Games101学习笔记 Lecture 14: Ray Tracing 2 (Acceleration & Radiometry)

发布于:2024-07-03 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、加速光线追踪 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(瓦特每平方米)
    在这里插入图片描述
  • 遵循Lambert’s Cosine Law:接收到的与入射光线方向和表面法线之间的夹角余弦值成正比
    在这里插入图片描述
  • 照度还与距离有关,照度随距离衰减,衰减因子为距离的平方。
    在这里插入图片描述

5.辐射亮度 Radiance

  • 单位面积、单位立体角内沿特定方向传播的辐射通量(发射、反射、透射或接收的功率),W/ m 2 m^{2} m2/sr(瓦特每平方米每球面度)
    在这里插入图片描述
  • 性质
    • 与方向相关:包含了光线的方向信息
    • 与位置相关:是场景中每个点的属性
    • 与面积相关:是单位投影面积上的功率
  • 与辐射通量flux、照度irradiance、强度intensity的关系
    • 是flux、irradiance、intensity的综合
    • 是flux/立体角
    • 是irradiance/立体角
    • 是intensity/投影面积