Advanced Topics in Rendering
有偏和无偏的光线传播
无偏光线传播 Unbiased light transport methods
使用蒙特卡洛方法解积分时,不管用多少样本呢,得到的期望是真实值
双向路径追踪 Bidirectional Path Tracing (BDPT)
之前做的路径追踪,利用了光路的可逆性,从相机开始产生路径,连接相机与光源。
而双向路径追踪会生成两个不同的子路径,从光源会打出路径,从相机也会打出路径,
在着色点把两个路径连起来,就形成了整条路径。如下图所示:
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426142710.png)
以下是相同采样率下单向和双向的结果:
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426142735.png)
Metropolis Light Transport (MLT)
简单理解马尔科夫链:当前有一个样本,马尔科夫链可以生成一个和这个样本靠近的下一个样本,因此与之前的均匀采样不一样。
MLT使用了马尔科夫链蒙特卡洛方法(Markov Chain Monte Carlo, MCMC),给定足够的时间,能生成一系列以任意函数的形状为pdf的样本。而当采样的pdf 与 要积分的函数 形状一致的时候,效果最好。
因此对于任意未知的函数,都可以通过马尔科夫链的方法得到一系列的样本,使得这些样本的分布,和被积函数的形状一致。对应在光路上是一个局部方法,当存在一条路径时,可以产生与该路径相似的路径。如下橙色与蓝色路径。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143006.png)
优点:越难的场景(间接光照较多的场景),使用MLT效果越好。
缺点:很难在理论上分析其收敛速度,不知道什么时候收敛;所有操作都是局部的,有些地方收敛快,有些地方收敛慢;不能用来渲染动画。
有偏光线传播
估计出来的期望与真实值不一样。极限情况下收敛到真实值也是有偏的,称为consistent。对应到渲染结果,如果结果相对真实值较模糊,则是有偏的,但当样本足够多结果接近真实值就是一致的。
光子映射 Photon Mapping
适合渲染caustics(由于光线聚焦产生的一种非常强的图案),如下图:
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143203.png)
适合复杂的光线传播,Specular-Diffuse-Specular(SDS)
Vertex Connection and Merging
将双向路径追踪和光子映射结合起来。
Instant radiosity (VPL / many light methods)
已经被照亮的表面就认为是光源。光源打出光线,被照亮的地方是新光源,使用所有新光源来照亮着色点。相当于考虑了间接光照。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143408.png)
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143428.png)
Advanced Appearance Modeling (AAM)
非表面模型 Non-Surface Models
散射介质 Participating Media
云,雾。光打过来会被小颗粒散射到四面八方
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143611.png)
Phase Function相位函数定义了散射的方式。
光线往某方向走多远取决于介质的吸收能力,遇到小颗粒会反射,在任何一点都可能改变方向,找到一个与光源相连的路径计算其贡献。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143728.png)
Hair Appearance
需要考虑光线与每根头发的作用。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143823.png)
Kajiya-Kay Model
光线打到头发上会散射出一个圆锥。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143906.png)
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426143923.png)
Marschner Model
光线不仅会反射(R),穿进头发发生折射(T),穿进头发再穿出(TT),穿透反射再穿透(TRT)。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144019.png)
将头发当成一个玻璃圆柱,外层叫cuticle,里面叫cortex。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144046.png)
光线跟头发会产生多次散射,渲染很困难,计算量很大。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144159.png)
Fur Apperance
不能使用人的头发渲染方法来渲染动物的毛。
生物结构上不同。动物的毛的髓质多。
使用双层圆柱模型来建模动物毛发,更为复杂。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144230.png)
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144240.png)
应用:
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144322.png)
Granular(颗粒) material
并没有很好的效果。
远看是沙丘,近看是小颗粒堆积的。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144359.png)
表面模型 Surface Models
Translucent(半透明) Material
次表面散射:光线从一个点进入表面,在内部发生了大量散射,最终再出去。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144459.png)
次表面散射可以看成对BRDF概念的延伸,BRDF的所有作用都发生在一个点上,而BSSRDF是由一个方向进来,但是可以从其他方向出去, 进来和出去的点不一定一样。渲染方程要考虑对表面其他地方进入的光线,要对面积进行积分。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144546.png)
Cloth
纤维缠绕成股,股缠绕成线,由线编制为布。
布料渲染方法:
当表面模型进行渲染,不同的织法有不同的BRDF。
但对天鹅绒这种织物没办法像上述那样做。因此把织物认为是空间中分布的体积,划分成超级细小的格子,每个格子里知道纤维的分布与朝向,分开来计算。
即将织物当作一个体积,知道体积中微小的块的性质。类似云烟的渲染。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144826.png)
最暴力的做法把每根纤维渲染出来,像头发一样。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144857.png)
Detailed material (non-statistical BRDF)
有的东西渲染出来太完美,不够真实。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144915.png)
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426144929.png)
微表面模型中使用不同的法线分布,若法线分布有一些噪音,可以得到含有噪声的真实效果。
![](https://cdn.jsdelivr.net/gh/NEUQer-xing/Markdown_images/images/20220426145058.png)
但这样渲染非常慢。
解决方法:
微表面的镜面反射在法线分布复杂的情况下,很难建立有效的的反射光路(光源→表面→摄像机)。
因此让一个像素对应很多微表面,把整块范围内的法线分布替换原本光滑的分布。
一个像素覆盖的微表面数量不同,会得到不同的效果。