CG-07: Ray Tracing and Radiosity

1572 字
8 分钟
CG-07: Ray Tracing and Radiosity

介绍了一种渲染方法:光线追踪方法,以及经常和它结合使用的辐射度法…

从这里开始,我就没怎么听进去了

CG-07 Ray Tracing and Radiosity#

1. 两种渲染方法#

  • 从几何体出发 (geometry) -> Rasterization rendering
    • 对每个多边形/三角形:
      • 它是否可见?
      • 它在哪里?
      • 它是什么颜色?
    • 极快,但难以计算准确的阴影、反射和折射。
    • 不能处理物体间的光散射。
  • 从像素出发 (pixels) -> Ray tracing
    • 对最终图像中的每个像素:
      • 哪个物体在该像素处可见?
      • 它是什么颜色?

2. Ray Tracing#

2.1 定义#

  • 光线追踪通过追踪场景中光线的流动来生成图像,通常是从观察点向后追踪,经过表面直到光源。

2.2 分类#

  • 反向追踪

  • 正向追踪,效率低,因为许多光线不会穿过摄像机,不对图像产生贡献。

2.3 过程#

  • 对图像平面上的每个像素,从投影中心通过该像素投射一条光线进入场景。确定该光线首次相交的物体。

  • 确定光线击中物体的点(即光线交点),然后根据表面法线和光源信息计算颜色值。

  • 如果某物体位于光源和光线交点之间,则该点处于阴影中,不考虑该光源的光照贡献。

  • 然后光线被反射(若表面透明,则还会发生折射),此过程持续重复。

  • 确定反射/折射光线击中第二个物体的位置,并像第一个物体一样计算颜色。

  • 该过程持续进行,直到达到最大反射次数或后续颜色贡献变得微不足道。

  • 所有与光线相交物体计算出的颜色值按照衰减因子(依赖表面反射率)加权后累加得到最终像素颜色。

2.4 计算#

  • 设物体基本单元S1S_1S2S_2的反射系数分别为r1r_1r2r_2,表面法线为N1N_1N2N_2

  • 在由观察光线E1E_1S1S_1交点处的光照向量为L1L_1,计算颜色C1C_1

  • 在由反射光线E2E_2S2S_2交点处的光照向量为L2L_2,计算颜色C2C_2

  • 像素颜色计算公式为: Cp=r1C1+r1r2C2+C_p=r_1C_1+r_1r_2C_2+…

2.5 优点#

  • 跟踪光线流动,考虑直接镜面 (direct specular) 反射、直接漫反射 (direct diffuse) 和间接镜面 (indirect specular ) 反射。
  • 考虑光折射 (s light refraction) 和阴影 (shadowing)。

2.6 缺点#

  • 因大量昂贵的光线与物体交点测试及颜色计算 (costly ray-surface intersection tests and color calculations) 而速度慢。
  • 不考虑间接漫反射(表面间的漫反射),此内容由辐射度法处理 (Radiosity)。

3. 光线追踪加速#

光线追踪消耗大量时间在检测光线与物体的交点,减少交点测试次数能显著降低计算时间。

  • 包围体(Bounding volumes)
  • 空间划分(Space subdivision)

3.1 包围体 Bounding volumes#

  • 为场景中每个物体构建包围体

    • 轴对齐包围盒AABBs (axis-aligned bounding boxes)

    • 定向包围盒OBBs (oriented bounding boxes)

  • 先检测光线与包围体的交点,而不是每个物体,提高效率。

  • 层次化包围体 (hierarchical bounding volume)

    • 构建物体的层次化包围体。
    • 若光线未与任意层次的包围体相交,则不会与包围体内的任何物体相交。

3.2 空间划分 Space subdivision#

  • 均匀 (uniform) 划分:

    • 每个体素存储相交的物体列表,光线遍历规则网格,对每个体素里的物体测试交点。

  • 非均匀 (non-uniform) 划分:

    • 层次划分场景(如八叉树)以减少体素数量。

4 辐射度 Radiosity#

4.1 定义#

  • 辐射度是单位面积上离开(发射和反射)表面的辐射通量。

  • 辐射度方法用于模拟表面间的漫反射 (Diffuse Reflection)(直接和间接)。

    • 漫反射中,光线以相同强度向各方向反射,但表面接收的光能量取决于其相对于光源的朝向。

    • 示意图:A以相同强度反射光照给B和C,因B的入射角较小,故其接收的光能更多。

4.2 计算#

  • 贴片(patch) ii 的辐射度 BiB_i 计算公式为:

    Bi=Ei+ρijall patchesLijB_i = E_i + \rho_i \sum_{j \in \text{all patches}} L_{i \leftarrow j}

    其中,LijL_{i \leftarrow j} 是从贴片 jj 到贴片 ii 的光线量 (amount of light),EiE_i 是贴片 ii 自身发射的光 (light emitted),ρi\rho_i 是贴片 ii 的反射率 (reflectivity)。

  • LijL_{i \leftarrow j} 还可以进一步定义为:

    Lij=FijBjL_{i \leftarrow j} = F_{i \leftarrow j} B_j

    其中,FijF_{i \leftarrow j} 是描述贴片 jj 到贴片 ii 的形状因子 (form factor),BjB_j 是贴片 jj 的辐射度。

  • FijF_{i \leftarrow j} 的计算公式为

    Fij=1AiAiAjVijcosθicosθjπr2dAjdAiF_{i \leftarrow j} = \frac{1}{A_i} \int_{A_i} \int_{A_j} V_{ij} \frac{\cos \theta_i \cos \theta_j}{\pi r^2} dA_j dA_i

    其中,AiA_iAjA_j 分别是贴片 iijj 的面积,VijV_{ij} 表示贴片 iijj 之间的可见性,即如果两者之间没有遮挡,则 Vij=1V_{ij} = 1,否则 Vij=0V_{ij} = 0

4.3 例子#

考虑一个封闭区域,内有四个多边形,反射率 ρ (0ρ1)\rho \ (0\leq\rho\leq1) 相同(漫反射表面通常较小)。 S1S_1 是光源,时间 tt 时光源关闭,区域内无光能。

时间 t+1t+1 ,光源 S1S_1 开启,能量为 ee。 多边形接收的总能量:

  • S1:L1=0S_1: L_1 = 0
  • S2:L2=eF21 S_2: L_2 = eF_{2 \leftarrow 1}
  • S3:L3=eF31 S_3: L_3 = eF_{3 \leftarrow 1}
  • S4:L4=eF41 S_4: L_4 = eF_{4 \leftarrow 1}

在时间 t+2 t+2,每个多边形的总能量是基于其它多边形反射能量和反射率、形状因子之和,形成迭代方程。

  • 随时间 t t 增大,项数增多。
  • 因为 ρ<1 \rho < 1,多次反射后后续项逐渐变小。
  • 每个表面发射的能量最终收敛到一个稳定值。

4.4 大辐射表面的辐射度#

  • 因入射角变化,辐射度在大表面上可能变化显著。
  • 为提高准确度,将表面划分为小贴片,每个贴片假定均匀发射和反射光。
  • 假设场景中有 nn 个贴片,构建 nn 个联立方程,未知量为 BiB_i,可用矩阵方法求解:
  • 计算所有贴片辐射度后,更新原始图元颜色,使用扫描转换渲染。
  • 计算的辐射度是视点无关的,无法处理视点相关的镜面反射 (specular reflection)
  • 可结合辐射度和光线追踪方法,但计算量更大。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

CG-07: Ray Tracing and Radiosity
https://cauchyoooo.github.io/posts/2025/cs5182cg/cg-07/
作者
Cauchy
发布于
2025-05-03
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Cauchy
Thinking...
近期状态
5.20: 人果然还是要好好照顾自己的身体。刚刚更换完blog主题, 文章搬迁ing...
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
28
分类
3
标签
8
总字数
96,173
运行时长
0
最后活动
0 天前

文章目录