GAMES101: Lecture 13: Ray Tracing 1 (Whitted-Style Ray Tracing) ppt笔记

为什么使用光线追踪?

  • 光栅化不能很好处理全局效果(软阴影,反弹超过一次的光线)
  • 光栅化速度快,但质量低
  • 光线追踪精确,但耗时

Basic Ray Tracing Algorithm

图形学中有关光追的三条规定:

1.光线沿直线传播

2.光线交叉时不发生"碰撞"

3.光线从光源出发到达人眼

Ray Casting

光线投射主要思想:

生成图像时,向每个像素投射一条光线

生成阴影时,当眼睛光线与物体表面相交后,从该交点再向光源发射一条阴影光线;如果这条光线在到达光源之前与其他物体相交,则该交点处于阴影中

假设有一条从眼睛发出的eye ray,与最近的物体表面交于一点,连接该点与光源,若无物体遮挡,

则可以看作光源发出的光线经物体表面该点反射能到达人眼

Recursive ( Whitted-Style) Ray Tracing

上面的光线投射只考虑了光线反射一次的情况

递归光线追踪考虑光线多次反射

我们将从眼睛发出的第一条光线称为primary ray,后面反射/折射的光线称为secondary rays

所有光线都可与物体表面交于一点,我们考虑这些点与光源连线shadow rays的连通性

Ray-Surface Intersection

首先考虑光线与物体表面相交 的计算

光线方程:r(t)=o+td,0≤t<∞r(t) = o + td, 0 \le t < ∞r(t)=o+td,0≤t<∞

光线由光源o与方向向量d定义,光线上任意一点r(t)由时间t通过光线方程决定

光线与隐式表面相交:

光线:r(t)=o+td,0≤t<∞r(t) = o + td, 0 \le t < ∞r(t)=o+td,0≤t<∞

隐式表面:p:f(p)=0p: f(p) = 0p:f(p)=0

代入得:f(o+td)=0f(o+td)=0f(o+td)=0 解得正实根即为光线与表面的交点

光线与三角形网格相交:

检测光线与三角形是否有交点可转化为

光线与三角形所在平面的交点是否在三角形内

平面方程:p:(p−p′)N=0p: (p-p')N = 0p:(p−p′)N=0

平面由法线向量与平面上一点定义

平面上的所有点p满足向量pp'与法向量垂直

光线:r(t)=o+td,0≤t<∞r(t) = o + td, 0 \le t < ∞r(t)=o+td,0≤t<∞

平面:p:(p−p′)N=0p: (p-p')N = 0p:(p−p′)N=0

代入得:(o+td−p′)N=0(o+td-p')N = 0(o+td−p′)N=0 解得正实根即为光线与表面的交点

Möller Trumbore Algorithm可用于快速判断光线与三角形是否有交点

考虑三角形P0P1P2P_0P_1P_2P0P1P2

解方程O+tD=(1−b1−b2)P0+b1P1+b2P2O+tD = (1-b_1-b_2)P_0+b_1P_1+b_2P_2O+tD=(1−b1−b2)P0+b1P1+b2P2

(1-b1-b2, b1, b2)构成重心坐标

若光线与三角形有交点,该三元方程组解出的(t, b1, b2)满足

t为非负数, 1-b1-b2, b1, b2均为非负数

Accelerating Ray-Surface Intersection

普通光线-场景交集:遍历每个三角形找到最近的交点

pixels x triangles x bounces 非常耗时

边界体积Bounding Volume

将复杂物体用一个简单的volume框住,物体由volume完全覆盖

如果光线与volume不相交,则与物体也不相交;则可以先检测光线是否与volume相交,再检测是否与物体相交

一般采用与坐标轴对齐的包围盒Axis-Aligned Bounding Box(AABB) ,我们将该长方体视为三组相对的面围成的体积

选择与坐标轴对齐,可以简化三维运算到相似下的单一方向的运算

光线在x, y, z三个方向上都能计算出进入相对面的中间区域的时间tmint_{min}tmin和离开该区域的时间tmaxt_{max}tmax

下图中光线在tmint_{min}tmin时间进入x0面,在tmaxt_{max}tmax时间离开x1面

!!!

光线在三个方向均进入中间区域时,光线处于box中

光线在任意一个方向退出中间区域时,光线离开box

!!!

因此对于3D的box,

光线进入box的时间tenter=max{tmin}t_{enter} = max\{t_{min}\}tenter=max{tmin}

光线退出box的时间texit=min{tmax}t_{exit} = min\{t_{max}\}texit=min{tmax}

考虑texit<0t_{exit}<0texit<0时,box在光线后方

tenter<0t_{enter}<0tenter<0时,光源在box内

最终结果:光线与AABB相交当且仅当tenter≤texitt_{enter} \le t_{exit}tenter≤texit 且 texit≥0t_{exit}\ge0texit≥0

相关推荐
优选资源分享7 小时前
PicGo v3.0.3 新版 | 开源免费图床工具
javascript·笔记·electron
星恒随风9 小时前
Linux线程概念详解:从分页存储、页表、MMU与TLB,深入理解线程和进程的区别与联系
linux·运维·笔记·学习·状态模式
qq_284274059 小时前
数控机床编程基础与坐标系:编程六步流程、程序号/程序段/程序字格式,与右手定则下车床铣床XYZ轴判定(含考点)
笔记·学习·自动化·制造
问心无愧05139 小时前
[SUCTF 2019]EasySQL
笔记
ss2739 小时前
PG实战笔记 | 09 PostgreSQL psql客户端基本操作
数据库·笔记·postgresql
xxwl5859 小时前
区域赛分类题解
c++·笔记·学习·算法
成都蜀味缘餐饮技术培训学校12 小时前
油炸串串技术培训实战指南,核心食材选购与预处理标准
数据仓库·经验分享·笔记·课程设计·微信公众平台
摇滚侠12 小时前
《大模型应用开发实践:基于 Spring AI+DeepSeek 实现》第 11 章 大模型技术概览 阅读笔记 1
人工智能·笔记·spring
xxwl58514 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法
知产xiao_xin15 小时前
专利立法及修改
经验分享·笔记·知识产权