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.
- 一致的 consistent
渲染中的有偏无偏
- An easier understanding bias in rendering
- Biased == blurry
- Consistent == not blurry with infinite #samples
- 有偏:模糊
- 一致性:无限的条件下是不模糊的
无偏的
双向路径追踪(BDPT)
- Bidirectional Path Tracing (BDPT)
- 光源出发发射出半路径,视点出发发射出半路径,BDPT
把这两条路径连接起来
- 思想简单
- 实现复杂
- 相对较慢
- 有些情况下 BDPT 效果非常好(下图)
- 下图的特点:first-bounce 是 diffuse 的
- 如果用之前的路径追踪方法,不容易控制光线打到光源上
- 下图的特点: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
- 这样这种方法在很难用于渲染动画
- 相邻两帧可能有些点收敛了,有些没收敛,导致抖动
- Difficult to estimate the convergence rate
有偏的
光子映射
- 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
- 使用虚拟的光源计算光照
- Shoot light sub-paths and assume the end point of each sub-path is a
Virtual Point Light (VPL)
- 可以得到间接光照的结果
- 优点
- 很快
- 漫反射场景中表现较好
- 问题
- 对于 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 规定了怎么散射
- Phase Function(相位函数)
渲染方式
- 随机选择一个方向去反射
- 随机选择一个方向直走
- 对于路径上的所有点(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:程序化生成材质(需要生成)