GAMES101.闫令琪.08.高级光线传播与复杂外观建模(Lecture 18)

  • https://www.bilibili.com/video/av90798049

高级光线传播

  • Advanced Light Transport
  • Unbiased light transport methods
    • Bidirectional path tracing (BDPT)
    • Metropolis light transport (MLT)
  • Biased light transport methods
    • Photon mapping
    • Vertex connection and merging (VCM)
  • Instant radiosity (VPL / many light methods)

有偏无偏估计

  • 无偏估计 unbiased
  • An unbiased Monte Carlo technique does not have any systematic error
    • 不管样本数是多少个,无偏估计的期望总是正确的
    • The expected value of an unbiased estimator will always be the correct value, no matter how many samples are used.
  • 有偏估计 biased
    • 一致的 consistent
      • 当使用的样本数很多时,期望会收敛到正确的值
      • the expected value converges to the correct value as infinite #samples are used.

渲染中的有偏无偏

  • An easier understanding bias in rendering
    • Biased == blurry
    • Consistent == not blurry with infinite #samples
  • 有偏:模糊
    • 一致性:无限的条件下是不模糊的

无偏的

双向路径追踪(BDPT)

  • Bidirectional Path Tracing (BDPT)

  • 光源出发发射出半路径,视点出发发射出半路径,BDPT 把这两条路径连接起来
    • 思想简单
    • 实现复杂
    • 相对较慢
  • 有些情况下 BDPT 效果非常好(下图)
    • 下图的特点:first-bounce 是 diffuse 的
      • 如果用之前的路径追踪方法,不容易控制光线打到光源上

Metropolis Light Transport(MLT)

  • Metropolis:人名
  • 利用 MCMC 方法实现
    • MCMC:Markov Chain Mente Carlo
    • 根据当前的样本生成下一个样本
      • 之前的蒙特卡洛方法不考虑当前样本的影响
  • 对于之前的蒙特卡洛采样方法,当你用于采样的 PDF 和原来的函数一致的时候,效果是最好的(方差最小)
  • MCMC 方法能够生成一些样本,使得这些样本的分布和原来的函数一致
  • Jumping from the current sample to the next with some PDF
  • Very good at locally exploring difficult light paths
  • 能够在找到蓝色光路的条件下很快找到红色的光路

  • Works great with difficult light paths
    • 很适合复杂光路查找的情景
    • 当找到一条光路之后,很快生成其他可能的光路
  • 两个例子(很难找光路)
    • 半开着门
    • 焦散现象 caustic

  • 缺点
    • Difficult to estimate the convergence rate
      • 很难估计收敛速度
    • Does not guarantee equal convergence rate per pixel
      • 所有点的收敛速度不能保证一致
    • So, usually produces “dirty” results
    • Therefore, usually not used to render animations
      • 这样这种方法在很难用于渲染动画
      • 相邻两帧可能有些点收敛了,有些没收敛,导致抖动

有偏的

光子映射

  • photon mapping
  • Very good at handling Specular-Diffuse-Specular (SDS) paths and generating caustics
    • SDS:例如之前在水底的反射
  • 很适合渲染焦散的场景
    • 焦散(caustics):由于光线的聚焦产生的非常强的图案
    • 只是聚焦,没有发散的意思

一种实现方法

  • 两步的方法(2-stage)
(1) Stage 1: photon tracing
  • Emitting photons from the light source, bouncing them around, then recording photons on diffuse surfaces
    • 从光源辐射出很多的光子,反射,直到光子打到 diffuse 的材质上
    • 整理光子,记录光子的位置
(2) Stage 2: photon collection
  • Shoot sub-paths from the camera, bouncing them around, until they hit diffuse surfaces
  • 从视点辐射出很多光线,反射,直到打到 diffuse 的材质上
(3) 计算
  • local density estimation
    • 局部密度估计
  • ideas:光子分布越集中的地方,应该更亮
  • 对于任何的一个着色点,取其最近的 N 个光子,求出包围他们的球体在表面占的面积
    • 求出其密度
评价
  • N 太小你会看到有噪声(noisy),N 比较大(但是不是无限)会看到图片模糊(blurry)
问题的产生
  • 局部密度估计应该是 \(\dfrac{dN}{dA}\),而不是 \(\dfrac{\Delta N}{\Delta A}\)
  • \(\Delta A\) 足够小的时候上面两个值才相等
  • 解决方法:发射出更多的光子,这样还是收集 N 个光子的话,面积就更小
    • 发射出的光子足够多,结果就是正确的(一致性 consistent)
  • 只有当 N 是无限的情况下,才是完全正确的,N 不是无限的时候,多少会有点糊

另外的方法

  • 取一个固定大小的范围,统计光子数量,然后计算局部密度
  • 始终是有偏的,而且不是一致

Vertex Connection and Merging(VCM)

  • 把 BDPT 和 photon mapping 结合在一起
  • ideas
    • Let’s not waste the sub-paths in BDPT if their end points cannot be connected but can be merged
    • Use photon mapping to handle the merging of nearby "photons"

  • 在 BDPT 基础上,如果有这样的 path
    • 端点在同一个面上(不可能通过反射连接起来)
    • 端点离得的足够近
  • 此时认为从光源发出来的是光子,利用光子映射的方法进行计算(原来认为是一条 sub-path)

实时辐射度算法

  • Instant Radiosity (IR)
  • 也被称为 many-light approaches
  • 思想:已经被照亮的面可以当作光源
  • 算法:
    • Shoot light sub-paths and assume the end point of each sub-path is a Virtual Point Light (VPL)
      • 从光源打出一些光线,光线停在某一个表面上,把光线端点当作虚拟光源
    • Render the scene as usual using these VPLs
      • 使用虚拟的光源计算光照
  • 可以得到间接光照的结果
  • 优点
    • 很快
    • 漫反射场景中表现较好
  • 问题
    • 对于 glossy 材质的物体不能很好渲染
    • 当 VPLs 和待渲染的点离得较近的时候,会出现一些奇怪的高亮
      • 和平方项有关,距离很近的时候,相当于除了一个很小的数

现状

  • 暂时没有一个方法能够解决所有问题
  • 工业界:path tracing 居多,不高端,但是可靠

复杂外观建模

  • Advanced Appearance Modeling
  • Non-surface models 非表面模型
    • Participating media 散射介质
    • Hair / fur / fiber (BCSDF) 头发/毛发/纤维
    • Granular material 沙子
  • Surface models 表面模型
    • Translucent material (BSSRDF) 半透明
    • Cloth 布料
    • Detailed material (non-statistical BRDF) 细节化的模型
  • Procedural appearance 程序化生成的模型

非表面模型

散射介质

  • Participating media
    • 散射介质 / 参与介质
  • Fog (雾),Cloud (云)
    • 不是在表面上,定义在空间中
  • 当光线穿越过散射介质的时候,光线会被 吸收/散射

  • 怎么散射?
    • Phase Function(相位函数)
      • 类似于 BRDF 规定了怎么反射,PF 规定了怎么散射

渲染方式

  • 随机选择一个方向去反射
  • 随机选择一个方向直走
  • 对于路径上的所有点(shading point),跟光源相连
  • 不仅需要考虑渲染方程,需要考虑光线和体积之间的作用
    • 思想是一样的,产生一些光线的路径

毛发

  • 光线和曲线的作用
  • 两种高光:有色、无色

Kajiya-Ray Model

  • 类似于之前的 specular + diffuse,光线打到圆柱上
    • 散射出一个圆锥
    • 同时又有一部分散射到四面八方

Marschner Model

  • 广泛应用的模型
  • R: reflection, T: transmission
    • R:有一部分被直接反射
    • TT:有一部分被穿透头发,然后再穿透出来
    • TRT:穿透,反射,穿透
  • 头发是一个玻璃柱(小段),内部有色素(会吸收能量)

  • 计算量很大,头发渲染非常难

动物毛发

  • 使用头发的渲染模型渲染的效果不好

  • 生物结构
    • 动物毛发的髓质比较大,光线更容易发生散射

  • 加入髓质的效果

Double Cylinder Model

  • 双层圆柱模型(闫令琪提出)
  • 精确的描述髓质的作用
    • Cortex:absorbs
    • Medulla:scatters
  • 效果会更亮
    • s:scatter 散射

  • 效果图

颗粒材质

  • Granular
  • 一粒一粒的材质
    • 糖、盐、沙子
  • 计算量很大

表面模型

Translucent Material

  • semi-transparent:半透明材质,光线经过物体的时候发生吸收
  • translucent:光线经过物体的时候发生吸收和散射

  • 例子
    • Jade:玉石
    • Jellyfish:水母
    • 人的耳朵
  • 次表面散射:subsurface scattering

BSSRDF

  • 对 BRDF 概念的延伸
  • \(S(x_i,\omega_i,x_o,\omega_o)\):从点 \(x_i\) 处入射,入射方向为 \(\omega_i\),从点 \(x_o\) 处出射,出射方向为 \(\omega_o\)
  • 渲染方程需要修改,需要对整个表面进行积分

\[ L\left(x_{o}, \omega_{o}\right)=\int_{A} \int_{H^{2}} S\left(x_{i}, \omega_{i}, x_{o}, \omega_{o}\right) L_{i}\left(x_{i}, \omega_{i}\right) \cos \theta_{i} \mathrm{d} \omega_{i} \mathrm{d} A \]

  • 计算量很大
Dipole Approximation
  • Jensen et al. 2001
  • 模仿次表面反射,效果差不多,但是计算量小很多
  • 现实观察
    • 光线打到物体上,好像物体底下出现了一个光源,这个光源会照亮其周围的一片
    • 物理上的真实:上方还需要有一个光源

BSSRDF 效果
  • 更接近物理真实,效果更好

  • 惊人效果
    • https://cgelves.com/10-most-realistic-human-3d-models-that-will-wow-you/

Cloth

  • 布料
  • 布料的层级
    • 纤维 fibers
    • 股 ply
    • 线 yarn
    • 布料 cloth

  • 表面模型和针织的方向、图案有关
  • 根据形状计算 BRDF
  • 有些材质不能解决
    • 天鹅绒,不在平面上

  • 更准确的做法:空间分布的体积
    • 空间体积划分,最终好像就在渲染云一样
    • 计算量很大
  • 逐纤维渲染
    • 计算量很大

Detailed Appearance

  • 渲染的结果看着不真实的原因之一:过于完美
  • 真实世界很复杂
  • 手动加入划痕,刷(各向异性)
  • 微表面模型
    • 表面法线分布:\(D(h)\)
    • 简单的正态分布等过于完美
      • 法线贴图
  • 计算复杂度很高,需要渲染很久
    • 原因是表面都是镜面,很难让从视点发出的光线打到光源
    • 很难找到一条合理的光路
  • 解决方式:BRDF over a pixel
    • 一个像素出去的光线会覆盖一个区域内的微表面(patch),我们将这一部分区域的分布拿出来,替代原本的光滑的法线,并且用在微表面模型里
    • p-NDFs

  • 海面的模拟:波光粼粼的效果

波动光学

  • Waved Optics
  • 当物体的尺寸和光的波长相近的时候,会发生衍射、干涉等现象的发生(光不再沿直线传播)
  • 例子:
    • 小黑屋里面,关掉所光源,只用一个点光源照亮金属片,会发现金属片的表面有各种各样不同颜色的点
  • 波动光学解出的 BRDF,效果很好(能够模拟出上面的情况)

程序化外观

  • noise function
  • Compute a noise function on the fly.
    • 随用随取(不需要生成)
  • 木头纹理
  • Perlin Noise
  • Houdini:程序化生成材质(需要生成)