这里回顾GAMES101 Lecture 18,高级光线传播与复杂外观建模。

课程主页:

课程作业:

课程视频:

本讲内容

  • 高级光线传播;
  • 很多内容,主要仅供参考;

高级光线传输

  • 无偏光线传输方法
    • 双向路径追踪(BDPT);
    • Metropolis光线传输(MLT);
  • 有偏见光线传输方法
    • 光子映射;
    • 顶点连接和合并(VCM);
  • Instant radiosity(VPL/多种光照方法)

有偏与无偏蒙特卡洛估计

  • 无偏蒙特卡罗法没有任何系统误差
    • 无论使用多少样本,无偏估计的期望值始终是正确的值
  • 否则,就称为有偏
    • 一种特殊情况,期望值收敛到正确值(如果样本无限多);
    • 此时称为一致;
  • 我们将在介绍光子映射后再次回到这里;

双向路径追踪(BDPT)

  • 回顾,路径连接相机和光
  • BDPT
    • 跟踪来自相机和光线的子路径
    • 连接两个子路径的端点
    • 适用于光线光传输复杂的情况
    • 缺点是难以实现且相当慢

思路:

效果:

Metropolis光线传输(MLT)

  • 马尔可夫链蒙特卡罗(MCMC)的程序
    • 使用某个PDF从当前样本跳转到下一个样本
  • 非常擅长局部探索困难的光路
  • 关键思想
    • 局部扰动现有路径以获得新路径
  • 优点:
    • 适用于困难的光路
    • 无偏
  • 缺点:
    • 难以估计收敛速度
    • 不保证每个像素的收敛率相等
    • 通常会产生“脏”的结果
    • 通常不用于渲染动画

优点示意图:

缺点示意图:

光子映射

  • 有偏的方法和两阶段方法
  • 非常擅长处理镜面-漫反射-镜面(SDS)路径和生成焦散

示意图:

  • 第一阶段——光子追踪
    • 从光源发射光子,使它们四处弹跳,然后在漫射表面上记录光子;
  • 第二阶段——光子收集(最终聚集)
    • 从像机拍摄子路径,使它们四处弹跳,直到它们碰到漫反射表面;

示意图:

  • 计算——局部密度估计
    • 想法:具有更多光子的区域应该更亮;
    • 对于每个着色点,找到最近的$N$个光子,计算这些点覆盖的表面积;

示意图:

该方法是有偏估计,因为

  • 局部密度估计$dN / dA \neq \Delta N / \Delta A$;
  • 但是随着点增多,$\Delta A $接近$d A$;
  • 所以估计是一致的;

有偏无无偏的区别

  • 有偏 == 模糊
  • 一致 == 样本无限时不模糊

顶点连接和合并(VCM)

  • BDPT和光子映射的组合
  • 关键思想
    • 如果端点不能连接但可以合并,则不要浪费BDPT中的子路径;
    • 使用光子映射来处理附近“光子”的合并;

Instant Radiosity(IR)

  • Instant Radiosity有时也称为多光方法
  • 关键思想
    • 点亮的表面可以被视为光源
  • 方法
    • 拍摄光子路径并假设每个子路径的终点是虚拟点光源 (VPL)
    • 使用这些VPL像往常一样渲染场景

  • 优点:
    • 速度快,通常在漫反射场景中效果不错;
  • 缺点:
    • 当VPL接近着色点时会出现尖峰;
    • 无法处理有光泽的材料;

示意图:

高级外观建模

  • 非表面模型
    • 散射介质
    • 毛发/毛皮/纤维(BCSDF)
    • 颗粒材料
  • 表面模型
    • 半透明材质(BSSRDF)
    • 细节模型(非统计BRDF)
  • 程序化生成模型

散射介质

在光穿过参与介质的任何一点,它都可能被(部分)吸收和散射:

使用相位函数描述参与介质内任意点x的光散射角分布:

散射介质渲染:

  • 随机选择弹射方向
  • 随机选择一段距离直行
  • 在每个“渲染点”,连接到光源

头发外观

Kajiya-Kay模型

人类头发模型如下:

Marschner Model模型

人物头发模型改进:

头发是玻璃状圆柱体,3种光相互作用:

  • R、TT、TRT
    (R:反射,T:透射)

示意图:

人类头发vs动物毛发

使用上述模型无法很好地渲染动物毛发,这是因为毛发可以分为Medulla,Cortex,Cuticle三部分:

人类头发和动物毛发的Medulla(髓质)占比不同,动物毛发的髓质占比更大,更容易发生散射:

Double Cylinder Model

散射示意图如下:

颗粒材料

例如沙子,调料:

散射函数

  • 许多表面的视觉特征由光从不同点射出而不是进入
    • 违反了BRDF的基本假设

示意图:

BSSRDF:

  • BRDF的泛化:

  • 渲染方程的推广,对表面上的所有点和所有方向进行积分:

示意图:

偶极子近似

通过引入两个点光源近似光扩散:

布料

  • 扭曲纤维的集合!
  • 两层扭曲

  • 梭织或针织:

布料:渲染为表面

  • 给定编织图案,计算整体行为;
  • 使用BRDF渲染;

示意图:

布料:渲染为散射介质

  • 单根纤维的特性及其分布 -> 散射参数
  • 作为散射介质呈现

示意图:

布料:渲染为真正的纤维

  • 渲染每根纤维;

示意图:

细节模型

之前渲染的结果过于完美:

实际情形:

微表面BRDF

表面 = 镜面微表面 + 统计法线:

计算公式:

其中$\mathbf {D(h)}$被称为NDF:Normal
Distribution
Function。

统计NDF vs 真正的NDF

统计的结果过于平滑,我们需要真正的NDF。

渲染

在该模型下,渲染很困难,因为很容易miss:

解决方案是计算像素的BRDF:

p-NDF具有尖锐的特征

p-NDF和覆盖范围有关:

波动光学

当物体很小时,不能假设光沿直线传播,需要用波来理解光。具体现象为金属勺子上的彩色现象:

程序化生成模型(Procedural Appearance)

  • 利用函数计算纹理(尤其是三维情形),使得我们可以动态查询,减少存储量;
  • 实现的方式是使用噪声函数;