1547 字
8 分钟
GAMES101 Lecture 14 Ray Tracing 2 (Acceleration & Radiometry)

Uniform Spatial Partitions(Grids) 均匀空间划分#

1.1 预处理——建立加速格子#

  1. 找到包围盒
  2. 创建格子
  3. 标记与物体相交的格子

1.2 光线与场景求交点#

  1. 按照光线穿梭的顺序遍历格子
  2. 对于每个格子,计算存储在格子里的所有物体是否与光线有交点。

1.3 加速效果#

格子太多和格子太少都是不好的。

  • 只有一个格子:没有加速效果。

  • 格子特别密集:需要做很多光线与格子求交,加大开销。 即想要获得比较好的加速效果,格子不能太稀疏,也不能太密集。下面是人们经验得到的规律。

  • #cells = C*#objs

  • C=27 in 3D

格子划分法适用于大小和空间均匀分布的大型对象集合(如下图所示)。

但是此方法不适合于有很多空旷区域的场景(如下图所示),下面又称为“teapot in stadium”问题。

2 空间划分(Spatial Partitions)#

2.1 空间划分的例子#

  • Oct-Tree 八叉树 把场景包起来,然后把正方体切成八份。不断的对子节点递归进行此过程,放格子里面是空的或者物体足够少就停下来。(但是有个严重的问题,随着维度的升高,节点数量指数型增长)

  • KD-Tree 与八叉树几乎相同,但是对每次划分的格子,总是沿着某一个轴切割(通常是交替的),且对每个格子仅切割一次。(好处是相比于八叉树,节点数量的复杂度不会随着维度指数型增长。)

  • BSP-Tree 对空间二分,每次划分时选择一个方向,与KD-Tree的区别在于它的切割不一定是与轴平行的。(存在的问题是在维度高的时候不好计算,切割的几何体从点到线到面到超平面。)

2.2 KD-Tree#

1> KD-Tree 的基本结构#

总体来说是一颗二叉树,如下图所示(为了简化没画全,实际上1、2等节点都有子节点)

对于非叶子节点:

  • 划分的轴:x、y或z轴。
  • 划分的位置:分割的平面沿轴的坐标。
  • 子节点:一定有两个子节点。
  • 在非叶子节点不会存储物体。

对于叶子节点:

  • 存储物体列表。

2> 计算光线与物体交点的步骤#

发现经过叶子节点1,与区域内的所有物体求交

以此类推,找到与光线有交点的格子内的物体,然后与格子里面的所有物体求交.

3> KD-Tree的问题#

  1. 很难判断物体的三角形和AABB包围盒是否有交集。
  2. 一个物体可能会与很多AABB包围盒有交集。也即一个物体可能存储在多个叶子节点里。

3 物体划分与BVH加速结构(Object Partition & Bounding Volume Hierarchy)#

3.1 建立过程#

  • 找到包围盒
  • 递归的把物体集合划分成两个子集
  • 重新计算子集的包围盒
  • 当满足一定要求的时候停止
  • 在每个叶子节点里存储所有物体

以下是图解:

首先对于所有物体找到包围盒,形成根节点

然后把物体分成两部分,并重新计算包围盒,形成根节点的子节点

不断的递归重复这个过程,知道满足一定的条件后停止,最后在叶子节点存储物体列表

3.2 BVH的优缺点#

BVH避免了KD-Tree的问题,具有如下优点。

  • 一个物体只能出现在一个格子里。
  • 不涉及三角形和包围盒求交的问题。

缺点:

  • BVH并没有空间严格划分开(包围盒有可能相交)。

3.3 建立中的细节问题#

  1. 如何划分节点? 每次都需要选择一个维度来分割(经验上有下面两种做法)。
  • 选择节点中最长的轴。
  • 取分布处于中间的物体的位置来划分节点。(找第i大的数----快速选择算法)
  1. 划分终止条件? 当节点包含少于特定元素时停止(比如5)。

  2. BVH树的存储结构?

  • 中间节点存储包围盒和子节点的指针。
  • 叶子节点存储包围盒和物体列表。
  • 节点代表场景中图元(primitives)的子集,所有物体都在子树中。

BVH算法#

Intersect(Ray ray,BVH node){
if(ray misses node.bbox) return;
if(node is a leaf node)
test intersection with all objs;
return closest intersection;
hit1 = Intersect(ray,node.child1);
hit2 = Intersect(ray,node.child2);
return the closer of hit1,hit2;
}

4 空间划分与物体划分#

空间划分(如KD-tree)#

  • 把空间划分成不重叠的区域。
  • 一个物体可能呗包含在多个区域中。

物体划分(如BVH)#

  • 把物体划分成不相交的子集。
  • 每个子集的包围盒在空间上可能是重叠的

5 辐射度量学 (Basic radiometry)#

5.1 辐射度量学的动机#

光源中定义L=10,但是10代表的是什么无法确定,缺少单位。

5.2 概览#

辐射度量学就是在物理上准确度量光照的方法。

它定义了一系列的方法和单位,准确的定义了光在空间中的属性:

定义了光照的新属性:Radiant flux(辐射通量),intensity(辐射强度),irradiance(辐射[照]度),radiance(辐[射]亮度)

为什么学,学的是什么,这个新的东西是怎么运用的

5.3 Radiant Energy and Flux(Power)#

5.3.1 Radiant Energy#

定义 Radiant energy是一种电磁辐射的能量。它由焦耳(J=Joule)单位来度量,用符号Q来表示。

5.3.2 Radient Flux(Power)#

定义 Radient flux(Power) 是单位时间的发射出的、反射的、传播的和接收的能量(功率) 另一种定义:单位时间辐射出光子的数量 流明(lumen)

5.4 与光相关的物理量#

关键的物理量 光源辐射出的能量(Radiant Intensity),物体表面接收的光的能量(Irrdiance),光线在传播过程中的能量(Radiance)。

5.4.1 Radient intensity#

定义 Radient intensity是每单位立体角辐射的能量

某一方向的power

什么是立体角.
定义一个角

立体角

单位立体角

方向的辐射强度

GAMES101 Lecture 14 Ray Tracing 2 (Acceleration & Radiometry)
https://dingfengbo.vercel.app/posts/games101/lecture-14-ray-tracing-2/
作者
Eureka
发布于
2026-04-09
许可协议
CC BY-NC-SA 4.0