Lecture 14: Ray Tracing 2 (Acceleration & Radiometry
- 一、加速光线追踪 AABB
- 1.均匀网格 Uniform Spatial Partitions (Grids)
- ①前处理-构建加速网格
- ②射线与场景相交
- ③网格分辨率
- ④适用情况
- 2.空间划分
- KD-Tree
- ①预处理
- ②数据结构
- ③遍历
- ④问题
- 3.对象划分 & 包围盒层次结构(BVH)
- ①步骤
- ②数据结构
- ③遍历
- 二、辐射度量学
- 1.Radiant Energy 辐射能量
- 2.Radiant Flux 辐射(光)通量
- 3.Radiant Intensity 辐射强度
- 立体角求法
- ①球面面积法
- ②微分立体角法
- 4. 辐照度 Irradiance
- 5.辐射亮度 Radiance
一、加速光线追踪 AABB
1.均匀网格 Uniform Spatial Partitions (Grids)
①前处理-构建加速网格
- 找到包围盒
- 创建网格
- 判断与物体表面相交的格子(图中右上角少画了一个)
②射线与场景相交
- 按照射线顺序遍历网格
- 对每个网格单元
- 测试与存储在该单元中所有对象相交的情况
③网格分辨率
- 分辨率低,单元格太少 —— 没有加速效果
- 分辨率太高,单元格太多 —— 效率低
- 格子划分要适中,cells = C * objs(物体数),C ≈ 27 in 3D
④适用情况
- 在大量均匀分布的对象集合上表现良好
- 大规模空气不适合
2.空间划分
- Oct-Tree(八叉树)、KD-Tree(每次只砍一刀,沿轴方向划分)、BSP-Tree
KD-Tree
①预处理
- 找到场景中所有的包围盒(AABB)
- 找到这些包围盒的最小外包围盒,作为KD-Tree的根节点
- 递归划分节点
- 对每个节点选择一个轴进行划分(两种)
- 最长轴:选择对象分布范围最大的轴
- 中位数
- 对每个节点选择一个轴进行划分(两种)
②数据结构
- 内部节点:(不存储物体)
- 划分的轴
- 划分的位置
- 子结点
- 叶节点
- 物体的包围盒
③遍历
- 判断射线是否与节点的包围盒相交
- 如果是叶节点,则遍历叶节点中的对象,并测试射线与对象相交情况
- 如果是内部节点,按顺序判断射线穿过的子节点
④问题
- 物体可能在多个格子里
- KD-Tree构造太麻烦
3.对象划分 & 包围盒层次结构(BVH)
- 每个物体只在一个包围盒中,包围盒可能重叠
①步骤
- 找到包围盒
- 递归地将包围盒分成两个
- 最长轴:选择对象分布范围最大的轴
- 中位数
- 在每个叶节点存储物体
②数据结构
- 内部节点:
- 包围盒
- 子结点
- 叶节点
- 物体的包围盒
- 物体
③遍历
- 判断射线是否与节点的包围盒相交
- 如果是叶节点,则遍历叶节点中的对象,返回最近的那个
- 如果是内部节点,按顺序判断射线穿过的子节点
二、辐射度量学
1.Radiant Energy 辐射能量
- 指电磁辐射的能量,单位为 J(焦耳)
2.Radiant Flux 辐射(光)通量
- 单位时间内发射、反射或投射接收的能量,单位为 W(瓦特)
3.Radiant Intensity 辐射强度
- 光源单位立体角内 发射的 功率,单位为 瓦特每球面度 (W/sr)
立体角求法
①球面面积法
- Ω = A/ r 2 r^{2} r2 ,A 是球面上被截取的面积,r 是球面半径
②微分立体角法
- dΩ = sinθ dθ dϕ,其中 θ 是极角,ϕ 是方位角
4. 辐照度 Irradiance
- 单位面积上 接收到 的辐射通量,单位为 W/ m 2 m^{2} m2(瓦特每平方米)
5.辐射亮度 Radiance
- 单位面积、单位立体角内沿特定方向传播的辐射通量,W/ m 2 m^{2} m2/sr(瓦特每平方米每球面度)