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

相关推荐
XS0301066 小时前
SpringMVC核心知识点实操笔记
笔记
依然范特东7 小时前
强化学习笔记1--基础概念
笔记
晓梦林8 小时前
[ACTF2020 新生赛]BackupFile学习笔记
android·笔记·学习
jjh+++(求关注版)9 小时前
DeepAgent开发学习心得笔记
人工智能·笔记
xian_wwq10 小时前
【学习笔记】解剖 Claude Code —— Anthropic 的 Harness 参考实现-09/15
人工智能·笔记·学习
晓梦林10 小时前
Tools靶场学习笔记
笔记·学习
xian_wwq10 小时前
【学习笔记】什么是Harness Engineering- 01/15
人工智能·笔记·学习
笨笨饿11 小时前
#102_Codex无在VSCold无法打开
java·c语言·数据库·笔记
xian_wwq11 小时前
【学习笔记】Agent 安全护栏 —— 当 Agent DROP TABLE 了你的生产数据库-07/15
笔记·学习·安全