一、高级光线传播
无偏光线传播 Unbiased Light Transport
unbiased Monte Carlo 就是计算总是得到我们的期望值,也就是结果是正确的,那就是无偏的。否则就是有偏的。
一致的,也是有偏的,但是当样本数量很大会收敛到一个正确值。
双向路径追踪 Bidirectional Path Tracing BDPT
光源和观察者各发送一条sub-path,然后连接它们的终点得到一个path
好处:在光源比较复杂的时候能够得到不错的效果,如上图 (很多diffuse,相机不好找到光源)
坏处:很难实现,而且比较慢
Metropolis Light Transport (MLT)
这也是按人名命名的,不是大都市。。
用马尔科夫链 MCMC实现 采样
因为能够实现让PDF与被积函数同形,所以误差也最小
这是一个局部方法,在实现效果上,就是给任意一个路径,能够生成附近相似的路径
好处:适合做复杂的,困难的光路传播。因为只需要找到一条光路,作为种子,就可以从周围发散找到其他光线。
caustics ,S-D-S path
坏处:
- 很难在理论上分析收敛的速度。
- 不好分析sample与variance的关系。
- 因为是局部的,有的地方收敛了,有的没有,导致画面会很脏
- 所以不能用来渲染动画,否则上下两帧差异太大,会有画面抖动感
有偏光线传播 Biased Light Transport
光子映射 Photon Mapping
variance和bias的trade off
biased but consistent 一致的
非常适合用来渲染Caustics
步骤:
- 首先把光子从光源发射,然后让它们停止在diffuse的表面,
- 然后从眼睛出发发射sub-path
- 然后,就可以做第三步计算局部的密度轨迹 local density estimation
在物体表面,光子分布越集中就越亮,越不集中就越不亮
对于任何一个着色点,取周围N个最近的光子,变成Nearest Neighbor问题,近邻算法
找到之后,画出这N个点包围的面积
最后求得密度就是N除以面积 = ,因为
- 后者是去一个点看它内部有多少光子
- 前者是给定一些光子数,看它实际的面积
当dA足够小的时候,就正确了, 否则是不正确的。这就是光子非常多的情况:
如果是确定了大小dA,然后去找里面有多少光子,那么永远得到都是有偏且不一致的结果。
因为ΔA永远不会等于dA
VCM- Vertex Connection and Mapping
是BDPT和Photon Mapping的一种结合办法
IR - Instant Radiosity
实时辐射度算法
又叫many light 算法
用光源照射到Lit surface,然后把他们当作光源也就是VPL,
然后再去照亮一个着色点
好处:
- 快
- 在漫反射场景中能提供很不错的效果
坏处:
- 在接缝处会有漏光的效果
- 不能处理glossy材质
二、高级外观建模
advanced appearance modeling
之前说到shading model 就是BRDF,这里介绍一些其他的外观建模
Non-surface Models
散射介质 Participating media
比如说云雾,冰晶会吸收与散射光线
被吸收与被散射
用phase函数决定如何散射
path随机方向走随机距离
对于巧克力,其实也可以这么认为是散射介质,只是光线进去不久就消失掉
毛发 Hair Fur Fiber (BCSDF)
kajiya-Kay Model
Marschner Model
反射也有折射
把头发当作玻璃结构
但是这是一根头发的计算模型,
如果考虑光线穿过头发再进入到其他头发那计算量会非常大
Fur Appearance - As Human Hair
人的头发不足与描述动物毛发
原理:
动物毛发的髓质比人的要大得多,所以散射程度也更大
人也是有跟没有髓质模拟差别很大
Double Cylinder Model
颗粒体 Granular Material
颗粒体
离得近是一粒一粒的,离得远是沙丘
比如这个短片的沙子
点击查看【bilibili】
Surface Models
BRDF在之前已经说了
半透 Translucent material (BSSRDF )
半透明 semitransparent 吸收
translucent 吸收+散射
在光进入物体后发生多次散射,最后在某个位置光线输出或者吸收
玉石 Jade
水母Jellyfish
次表面散射 Subsurface Scattering
BSSRDF
就是对BRDF的延申,增加了两个维度,入射和出射的位置
因为BRDF就是打到一个点然后从一个点出去
这个是打到一个点可能从另外一个点出去
Dipole Approximation
次表面,相当于
假设
- 有个光源在次表面里面
- 有一个在对应的外面
布料 Cloth
布料是一系列缠绕的纤维
fiber 纤维 - ply股 - yarn 线 - cloth 布
Render as Surface
用BRDF有局限性,比如天鹅绒
比较合理的是看成空间中分布的体积
Render as Participating Media
Render as Actual Fibers
细节 Detailed material(non- statistical BRDF)
Motivation
为什么需要复杂的有细节的材质
因为太完美了,需要一些人工痕迹
real life
rendering result
微表面模型的分布函数
微表面模型中的path tracing问题
很难打到光源/摄像机去
于是我们不计算真的微表面的法线,而是计算一个范围内的微表面法线分布
也就是用贴图 range query 来平均某个范围的微表面
法线分布与法线贴图
当物体细小到光波的尺度
这时候不再是几何光学,而是要用波动光学。(不连续的效果)
就要考虑光的衍射干涉等
Procedural Appearance
用三维噪声函数
给定任何一个空间中的点,会返回一个值
常用:生成水面,地形,纹理,