当前位置: 首页 > news >正文

GAMES101 笔记 Lecture13 光线追踪1

目录

      • Why Ray Tracing?(为什么需要光线追踪?)
      • Basic Ray Tracing Algorithm(基础的光线追踪算法)
        • Ray Casting(光线的投射)
          • Generating Eye Rays(生成Eye Rays)
        • Recursive(Whitted-Styled) Ray Tracing
      • Ray-Surface Intersection(光线和平面的交点)
        • Ray Rquation(射线方程)
        • Ray Intersection With Sphere(光线和球体求交)
        • Ray Intersection With Implicit Surface(光线和隐式曲面求交)
        • Ray Intersection With Triangle Mesh(光线和三角网格求交)
          • Ray Intersection With Triangle(光线与三角形求交)
          • Moller Trumble Algorithm
      • Accelerating Ray-Surface Intersection(加速光线和曲面求交)
        • Bounding Volumes(包围盒)
          • Ray Intersection With Axis-Aligned Box(光线与AABB求交)
          • Why Axis-Aligned?
      • 参考资料

Why Ray Tracing?(为什么需要光线追踪?)

  • 光栅化不能很好地表示全局的效果
    • 软阴影
    • 光线反弹超过一次(间接光照)
  • 光栅化很快,但是质量不高
  • 光线追踪是一种准确的方法,但是非常慢
    • 光栅化:实时;光线追踪:离线

在这里插入图片描述

Basic Ray Tracing Algorithm(基础的光线追踪算法)

关于光线的三个想法:

  1. 光线是沿直线传播的
  2. 光线和光线不会发生碰撞
  3. 光线从光源发射出来后经过传播后到达眼睛。

Ray Casting(光线的投射)

  1. 从相机出发,生成一张图片通过投射每个像素。
  2. 将物体每个点连接一条光线到光源,通过计算能量来进行着色。

在这里插入图片描述

Generating Eye Rays(生成Eye Rays)

针孔相机模型:

  1. 从摄像机发出一条光线,打到场景中最近的物体上的某个点上。
  2. 将该点与光源进行连线,这跟光线称作shadow ray
  3. 如果这条光线没有被其它物体挡着,我们就认为这个点对光源可见。
  4. 有了法线,入射方向和出射方向,我们就可以算出这一点的着色(Blinn Phong模型),然后写入像素。
    在这里插入图片描述

Recursive(Whitted-Styled) Ray Tracing

与上面的模型不同,Whitted光线追踪模型中,一个光线在打到一个物体后可以继续传播,我们只需要知道它的折射方向和反射方向的参数。
在这里插入图片描述
在光线传播中遇到的每个点,都和光线连一条光线判断是否能被光源照亮。

如何光源可以照亮某个点,我们就把这个点的着色算出加到像素的最终着色值上去。

在这里插入图片描述

Ray-Surface Intersection(光线和平面的交点)

Ray Rquation(射线方程)

一条光线由起点和传播方向就可以定义。

射线方程:

r ( t ) = o + t d , 0 ≤ t < ∞ r(t) = o + td , 0 \leq t \lt \infty r(t)=o+td,0t<

Ray Intersection With Sphere(光线和球体求交)

球体方程:

在这里插入图片描述

其中, p p p是球面上的点, c c c是球心, R R R是半径。

交点一定同时满足光线的射线方程和球体方程。

可以通过求解方程得到交点:

在这里插入图片描述
通过二次函数求根公式,得到解:

在这里插入图片描述

Ray Intersection With Implicit Surface(光线和隐式曲面求交)

联立光线射线方程和曲面的隐式方程求解即可,注意解需要满足是实数并且是正数。

在这里插入图片描述

Ray Intersection With Triangle Mesh(光线和三角网格求交)

需求:

  1. 渲染:可视性、阴影、光照
  2. 几何:内部/外部测试,如果一个点在物体内部,那么令该点向四周发射光线,交点数一定是奇数。

如何求交呢?

可以将光线与三角网格中的每个三角形分别求交,最后取 t t t最小的值即可。

十分简单,但是效率非常低。

Ray Intersection With Triangle(光线与三角形求交)

三角形是一个平面,可以首先将光线与该平面求交,然后判断交点是否在三角形内部。

平面方程:

我们可以定义成法线 N N N和一个平面经过的某个点 p ′ p' p的组合。

平面方程定义如下:

在这里插入图片描述

联立光线和平面的方程,求解得到交点:

在这里插入图片描述

Moller Trumble Algorithm

这个算法可以一步到位地算出光线是否与三角形求交,主要利用的知识是三角形的重心坐标。

在这里插入图片描述

Accelerating Ray-Surface Intersection(加速光线和曲面求交)

Bounding Volumes(包围盒)

包围盒是一个非常快速的方法来避免求交:将一个复杂的物体用一个简单的包围盒包围起来。

  • 物体被完全包围在包围盒中。
  • 如果光线连包围盒都不相交,那么一定不和物体求交。
  • 所以,首先判断是否与包围盒相交,然后再判断是否和物体相交。

包围盒是三个不同的对立面形成的交集:

在这里插入图片描述

Ray Intersection With Axis-Aligned Box(光线与AABB求交)

考虑二维情况,三维同理。

分别考虑每一对面,计算出在最近和最远的交点。

t m i n t_{min} tmin取最大值得到 t e n t e r t_{enter} tenter t m a x t_{max} tmax取最小值得到 t e x i t t_{exit} texit

关键思想:

只有当光线全部进入所有对立面的时候,才是真正进入包围盒。
只要光线出任意一个对立面时,光线就穿出包围盒了。

如果 t e n t e r < t e x i t t_{enter} < t_{exit} tenter<texit,光线就和包围盒有交点。

在这里插入图片描述
考虑两种特殊情况:

  • 如果 t e x i t < 0 t_{exit} < 0 texit<0
    包围盒在光源的后面。
  • 如果 t e x i t ≥ 0 , t e n t e r < 0 t_{exit} \geq 0, t_{enter} \lt 0 texit0tenter<0
    光源在包围盒的内部。
Why Axis-Aligned?

选择轴对齐的包围盒,可以使得求交点更简单。

参考资料

GAMES101 Lecture13

相关文章:

GAMES101 笔记 Lecture13 光线追踪1

目录 Why Ray Tracing?(为什么需要光线追踪&#xff1f;)Basic Ray Tracing Algorithm(基础的光线追踪算法)Ray Casting(光线的投射)Generating Eye Rays(生成Eye Rays) Recursive(Whitted-Styled) Ray Tracing Ray-Surface Intersection(光线和平面的交点)Ray Rquation(射线方…...

【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力

文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文&#xff1a;Aligning Bag of Regions for Open-Vocabulary Object Detection 代码&#xff1a;https://github.com/wusize/ovdet…...

2023“Java 基础 - 中级 - 高级”面试集结,已奉上我的膝盖

Java 基础&#xff08;对象线程字符接口变量异常方法&#xff09; 面向对象和面向过程的区别&#xff1f; Java 语言有哪些特点&#xff1f; 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 C的区别&#xff1f; 什么是 Java 程序的主类&…...

开源项目-erp企业资源管理系统(毕设)

哈喽,大家好,今天给大家带来一个开源项目-erp企业资源管理系统,项目通过ssh+oracle技术实现。 系统主要有基础数据,人事管理,采购管理,销售管理,库存管理,权限管理模块 登录 主页 基础数据 基础数据有商品类型,商品,供应商,客户,仓库管理功能...

Leetcode刷题---C语言实现初阶数据结构---单链表

1 删除链表中等于给定值 val 的所有节点 删除链表中等于给定值 val 的所有节点 给你一个链表的头节点head和一个整数val&#xff0c;请你删除链表中所有满足Node.valval的节点&#xff0c;并返回新的头节点 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[…...

opencv hand openpose

使用opencv c 来调用caffemodel 使用opencv 得dnn 模块调用 caffemodel得程序&#xff0c;图片自己输入就行&#xff0c;不做过多得解释&#xff0c;看代码清单。 定义手指关节点 const int POSE_PAIRS[20][2] { {0,1}, {1,2}, {2,3}, {3,4}, // thumb {0,5}, {5,6}, {6,7}…...

flutter fl_chart 柱状图 柱条数量较多 实现左右滑动 固定y轴

一、引入插件 pub.dev&#xff1a;fl_chart package - All Versions 根据项目版本&#xff0c;安装可适配的 fl_chart 版本 二、官网柱状图示例 github参数配置&#xff1a;&#xff08;x轴、y轴、边框、柱条数据、tooltip等&#xff09; https://github.com/imaNNeo/fl_c…...

CAN学习笔记1:计算机网络

计算机网络 1 概述 计算机网络就是把多种形式的计算机用通信线路连接起来&#xff0c;并使其能够互相进行交换的系统。实际上&#xff0c;计算机网络包括了计算机、各种硬件、各种软件、组成网络的体系结构、网络传输介质和网络通信计数。因此&#xff0c;计算机网络是计算机…...

NAND flash的坏块

NAND flash的坏块 1.为什么会出现坏块 由于NAND Flash的工艺不能保证NAND的Memory Array&#xff08;由NAND cell组成的阵列&#xff09;在其生命周期中保持性能的可靠&#xff08;电荷可能由于其他异常原因没有被锁起来。因此&#xff0c;在NAND的生产中及使用过程中会产生坏…...

代码随想录算法训练营第二十五天 | 读PDF复习环节3

读PDF复习环节3 本博客的内容只是做一个大概的记录&#xff0c;整个PDF看下来&#xff0c;内容上是不如代码随想录网站上的文章全面的&#xff0c;并且PDF中有些地方的描述&#xff0c;是很让我疑惑的&#xff0c;在困扰我很久后&#xff0c;无意间发现&#xff0c;其网站上的讲…...

18.Netty源码之ByteBuf 详解

highlight: arduino-light ByteBuf 是 Netty 的数据容器&#xff0c;所有网络通信中字节流的传输都是通过 ByteBuf 完成的。 然而 JDK NIO 包中已经提供了类似的 ByteBuffer 类&#xff0c;为什么 Netty 还要去重复造轮子呢&#xff1f;本节课我会详细地讲解 ByteBuf。 JDK NIO…...

#P0999. [NOIP2008普及组] 排座椅

题目描述 上课的时候总会有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c;当同学们的座次确定下来之后&#xff0c;只有有限的 DD 对同学上课时会交头接耳。 同学们在教室中坐…...

Sentinel 容灾中心的使用

Sentinel 容灾中心的使用 往期文章 Nacos环境搭建Nacos注册中心的使用Nacos配置中心的使用 熔断/限流结果 Jar 生产者 spring-cloud-alibaba&#xff1a;2021.0.4.0 spring-boot&#xff1a;2.6.8 spring-cloud-loadbalancer&#xff1a;3.1.3 sentinel&#xff1a;2021.0…...

深度学习中简易FC和CNN搭建

TensorFlow是由谷歌开发的PyTorch是由Facebook人工智能研究院&#xff08;Facebook AI Research&#xff09;开发的 Torch和cuda版本的对应&#xff0c;手动安装较好 全连接FC(Batch*Num) 搭建建议网络&#xff1a; from torch import nnclass Mnist_NN(nn.Module):def __i…...

【多模态】20、OVR-CNN | 使用 caption 来实现开放词汇目标检测

文章目录 一、背景二、方法2.1 学习 视觉-语义 空间2.2 学习开放词汇目标检测 三、效果 论文&#xff1a;Open-Vocabulary Object Detection Using Captions 代码&#xff1a;https://github.com/alirezazareian/ovr-cnn 出处&#xff1a;CVPR2021 Oral 一、背景 目标检测数…...

网络编程 IO多路复用 [select版] (TCP网络聊天室)

//head.h 头文件 //TcpGrpSer.c 服务器端 //TcpGrpUsr.c 客户端 select函数 功能&#xff1a;阻塞函数&#xff0c;让内核去监测集合中的文件描述符是否准备就绪&#xff0c;若准备就绪则解除阻塞。 原型&#xff1a; #include <sys/select.…...

数学建模学习(7):单目标和多目标规划

优化问题描述 优化 优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 线性规划 线性规划是指目标函数和约束都是线性的情况 [x,fval]linprog(f,A,b,Aeq,Beq,LB,U…...

Element UI如何自定义样式

简介 Element UI是一套非常完善的前端组件库&#xff0c;但是如何个性化定制其中的组件样式呢&#xff1f;今天我们就来聊一聊这个 举例 就拿最常见的按钮el-button来举例&#xff0c;一般来说默认是蓝底白字。效果图如下 可是我们想个性化定制&#xff0c;让他成为粉底红字应…...

protobuf入门实践2

如何在proto中定义一个rpc服务? syntax "proto3"; //声明protobuf的版本package fixbug; //声明了代码所在的包 &#xff08;对于C来说就是namespace)//下面的选项&#xff0c;表示生成service服务类和rpc方法描述&#xff0c; 默认是不生成的 option cc_generi…...

adb shell使用总结

文章目录 日志记录系统概览adb 使用方式 adb命令日志过滤按照告警等级进行过滤按照tag进行过滤根据告警等级和tag进行联合过滤屏蔽系统和其他App干扰&#xff0c;仅仅关注App自身日志 查看“当前页面”Activity文件传输截屏和录屏安装、卸载App启动activity其他 日志记录系统概…...

UG NX二次开发(C++)-Tag的含义、Tag类型与其他的转换

文章目录 1、前言2、Tag号的含义3、tag_t转换为int3、TaggedObject与Tag转换3.1 TaggedObject定义3.2 TaggedObject获取Tag3.3 根据Tag获取TaggedObject4.Tag与double类型的转换1、前言 在UG NX中,每个对象对应一个tag号,C++中,其类型是tag_t,一般是5位或者6位的int数字,…...

Informer 论文学习笔记

论文&#xff1a;《Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting》 代码&#xff1a;https://github.com/zhouhaoyi/Informer2020 地址&#xff1a;https://arxiv.org/abs/2012.07436v3 特点&#xff1a; 实现时间与空间复杂度为 O ( …...

c语言位段知识详解

本篇文章带来位段相关知识详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#xff01;&#xff01; 目录 一.什么是…...

FFmpeg aresample_swr_opts的解析

ffmpeg option的解析 aresample_swr_opts是AVFilterGraph中的option。 static const AVOption filtergraph_options[] {{ "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS,{ .i64 AVFILTER_THREAD_SLICE }, 0, INT_MA…...

CAN学习笔记3:STM32 CAN控制器介绍

STM32 CAN控制器 1 概述 STM32 CAN控制器&#xff08;bxCAN&#xff09;&#xff0c;支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误&#xff0c;而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。 2 bxCAN 特性 波特率…...

软工导论知识框架(二)结构化的需求分析

本章节涉及很多重要图表的制作&#xff0c;如ER图、数据流图、状态转换图、数据字典的书写等&#xff0c;对初学者来说比较生僻&#xff0c;本贴只介绍基础的轮廓&#xff0c;后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法&#xff1a;结构化的分析、设计、…...

[SQL挖掘机] - 算术函数 - abs

介绍: 当谈到 SQL 中的 abs 函数时&#xff0c;它是一个用于计算数值的绝对值的函数。“abs” 代表 “absolute”&#xff08;绝对&#xff09;&#xff0c;因此 abs 函数的作用是返回一个给定数值的非负值&#xff08;即该数值的绝对值&#xff09;。 abs 函数接受一个参数&a…...

vue拼接html点击事件不生效

vue使用ts&#xff0c;拼接html&#xff0c;点击事件不生效或者报 is not defined 点击事件要用onclick 不是click let data{name:测,id:123} let conHtml <div> "名称&#xff1a;" data.name "<br>" <p class"cursor blue&quo…...

【Spring】Spring之依赖注入源码解析

1 Spring注入方式 1.1 手动注入 xml中定义Bean&#xff0c;程序员手动给某个属性赋值。 set方式注入 <bean name"userService" class"com.firechou.service.UserService"><property name"orderService" ref"orderService"…...

【微软知识】微软相关技术知识分享

微软技术领域 一、微软操作系统&#xff1a; 微软的操作系统主要是 Windows 系列&#xff0c;包括 Windows 10、Windows Server 等。了解 Windows 操作系统的基本使用、配置和故障排除是非常重要的。微软操作系统&#xff08;Microsoft System&#xff09;是美国微软开发的Wi…...

网站备案信息真实性/西安百度关键词排名服务

std::move函数可以以非常简单的方式将左值引用转换为右值引用。&#xff08;左值、左值引用、右值、右值引用 参见&#xff1a;http://www.cnblogs.com/SZxiaochun/p/8017475.html&#xff09; 通过std::move&#xff0c;可以避免不必要的拷贝操作。 std::move是为性能而生。…...

山东疫情最新分布情况图/整站优化推广

https://www.cnblogs.com/cloudos/p/8308946.html zabbix的客户端 1、进入所有mysql本地服务器上的zabbix客户端创建脚本目录和文件[rooti-ynodsrbz ~]# cd /usr/local/zabbix-2.4.2/[rooti-ynodsrbz zabbix-2.4.2]# mkdir scripts[rooti-ynodsrbz zabbix-2.4.2]# cd scripts/[…...

linux wordpress 中文/优化疫情防控措施

研究了四天linux内核移植和文件系统制作&#xff0c;总算移植成功&#xff0c;在这里和大家分享一下&#xff0c;我是一个初学者&#xff0c;有不对的地方&#xff0c;请大家指点。参考网友的资料&#xff1a;http://blog.chinaunix.net/u3/104564/sho ... 91186.htmlhttp://ww…...

莘县建设局网站/网站ip查询

基于CentOS 6.5操作系统搭建MongoDB服务Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中每一条记录都是一个Document对象。Mongo DB最大的优势在于所有…...

重庆万州网站建设多少钱/黄页网推广服务

2.配置VTY(Virtual Teletype Terminal)虚拟终端接口的认证方式[H3C]user-interface vty 0 4[H3C-line-vty0-4]authentication-mode scheme//进行本地或远端用户名和口令认证。即AAA认证//关于认证&#xff0c;一共有三种认证方式//password 本地口令认证;//scheme 本地或远端用…...

网站建设计划书/360开户

linux mixerWindows 10’s Creators Update added a new live game-streaming feature. You can broadcast your gameplay in real time to your friends without any additional software. Windows 10的创作者更新添加了新的实时游戏流媒体功能。 您可以将您的游戏玩法实时广播…...