GAMES101 17-18 笔记 渲染相关高级内容
材料和外观
反射
材质其实本质上就是BRDF
在假设完全漫反射(朗伯材质)时,因为各角度散射均匀,所以BRDF和Li都为常数,因而渲染方程可以化简为:
在假设Lo = Li时,就可得出结论:fr = 1 / π。
在完全镜面反射时,出射方向可以这么求得:
左边表示θ的求解,右边表示φ的求解
折射
Snell’s Law 斯涅耳法则
从下图或得折射方向,右边是折射率表
具体计算如下:
所以可得全反射(无折射发生)的条件:
BSTF = BRDF + BTDF
Fresnel Reflection/ Term 菲涅尔项
反映的是不同角度的出射方向(观察方向)中反射的光能量占整个的多少(其他的被折射了)
1.5折射率的电解质的观察方向和反射占比的情况:
导体的观察方向和反射占比的情况:
具体公式算法:
通过Shlick’s approximation可以对菲涅尔项做出简化。
θ的范围是0到90度。
BRDF相关
Microfacet Material 微表面材料/模型
原理:
- 粗糙的表面:近看不同的几何(镜面),远看是一个平的平面
- 每一个微表面有自己的法线等,是一个镜面
因而微表面模型就利用这点,用来表示表面粗糙程度:
shadowing masking term就是遮罩函数,指反射出来的光线被表面其他凹凸给挡了的概率分布
Isotropic / Anisotropic Materials(BRDFs)
- 各向同性:微表面方向性很弱(或不存在),各个方向法线分布均匀
- 各向异性:微表面有明确的方向性
各向异性反映到BRDFs上,即是不同方位角(旋转后)的BRDF不同:
θi和θr是入射和出射的θ角,Φ是方位角,其实就是从上往下看的两条线在绕中心旋转时BRDF会变化。(经典的就是不锈钢锅底、尼龙、天鹅绒)
BRDF的属性总结
- BRDF非负
- 线性性质(整体光线传播效果由很多不同光线传播组成)
- 可逆性
- 能量守恒
- 各向同性&各向异性
各向同性再加上可逆性:
因此,不仅可以把四个参数缩小为三个参数(Φr - Φi 是一个整体),而且无关正负,可以直接用绝对值,利于后面会讲的存储问题
测量BRDF
模型只是模型,测出来的才是真实的。(而且事实上很多模型偏差事实很大)
测量模型如下:
算法如下:
但因为有四维的问题,这样处理会非常复杂,所以有以下方法可以提升效率:
但同时也有挑战:
高级渲染相关内容(了解为主)
高级光线传输(Advanced Light Transport)
biased和unbiased蒙特卡洛估计的定义是:若蒙特卡洛期望值与原积分(正确的)期望值相同,则成为unbiased,否则是biased。
biased有一个特殊情况,就是若该估计的样本无限多时会收敛到正确的期望,则成为consistent。
Unbiased light transport methods
Bidirectional path tracing (BDPT)
之前的BRDF是从摄像机出发到光源,BDPT是两头出发再在中间连接起来(事实上很难),适合光传输复杂的情况,效果非常好
Metropolis light transport (MLT)
蒙特卡洛选取样本是完全随机的,彼此之间没有联系,而MLT是在考虑选取样本的时候利用马尔科夫链,依赖当前的样本选择下一个样本。对局部探索困难的光路很有用。效果比BDPT还好。
但它也有一些缺点:
- 很难估计收敛率(收敛的时长)
- 每个像素(局部)的收敛速度不同,导致画面看起来比较“脏”
- 考虑到上述,基本不用于渲染动画
Biased light transport methods
Photon mapping 光子映射
它的优点是:
- 很好的处理Specular-Diffuse-Specular (SDS)
- 很适合渲染caustics(指由于光线的聚焦产生一系列各种各样的强的图案的物体)
操作上分两步:
- 光子从光源射出后不断反弹,直到遇到diffuse的面就停止
- 光子从视角射出后不断反弹,直到遇到diffuse的面就停止
- 计算local density estimation
对每一个着色点(shading point),找到最近的N个光子,计算包围它们的表面面积。(密度越高越亮)
实际使用中,N过小会噪声过大,N过大则会模糊,主要是因为dN / dA != ΔN / ΔA(尽管比较接近),所以结局方案是:
发射更多的光子,从而导致同样N个光子只会覆盖更小的ΔA,使其更接近dA。
所以光子映射是一种biased but consistent的方法。
所以在渲染中理解有偏无偏就看有没有模糊,若有则有偏,若样本接近无数时不模糊了则有偏但连续。
Vertex connection and merging (VCM)
结合了BDPT和Photon Mapping。
把BDPT得到的同一个面上两个出发点射出的光子算作一个光子映射局部的光子,再进行光子映射的处理。
Instant radiosity IR(VPL / many light methods)
原理:把已经照亮的面视为光源。
把光源照亮的面视为Virtual Point Light(VPL),当视角看到某点时,再让所有其他VPL去照亮该着色点,计算所有其他VPL照射在该点上的着色效果。
优点:快、适合漫反射场景
缺点:
- VPL在一些细缝等的地方会出现发亮的小点(原因是之前light sample中提到的把对shading point的积分改为对光源的积分的计算后式子需要除以两个点间的距离,此时若距离过小则会导致着色过亮)
- 不能处理glossy的材料(有一点反光但不是完全镜面那种)
高级外观建模(Advanced Appearance Modeling)
Non-surface models 非表面模型
Participating Media 反射介质(例如云)
使用Phase Function相位函数来决定具体怎么散射
具体做法如下:
Hair Appearance 头发外观
看作diffuse + specular(往一个锥形方向)的结合,效果一般。
另一种模型:
T是折射,R是反射
因为头发构造问题(内有髓质,对光线穿过去会有很大影响),又升级为:
还有颗粒材质(沙子类)。
surface models 表面模型
Translucent Material (不是半透明,是光从一个点进入从另一个点出去,但可能不是直线对应的点,而是在里面反射了好几次)
统一把这种现象称为:
Subsurface Scattering 次表面散射
定义了进来的点和出去的点,而不是像BRDF只需要一个点
Dipole模型:
Cloth
但有时候过于标准的渲染反而不够真实,主要原因在于NDF:
我们假设的太完美了,事实上概率分布是受其特性影响的。
Path sample的一个缺点是很难完美找到从摄像机到光源的路线(反之亦然),从而很浪费时间,解决方案是投影到一个像素上,这样对应到物体表面的一块面上再来反射,提高反射到光源的概率。
此外还有波动光摄的BRDF等(拿白光拍笔记本,可以看到细节上有其他颜色)
Procedural appearance 程序化生成(其实是直接拿来用)模型
主要是指噪声函数,是定义在空间中,需要即取。