08 Advanced Topics in Rendering
08 Advanced Topics in Rendering
高级光线传播
光线追踪中大部分情况下都使用蒙特卡洛估计。
对于蒙特卡洛估计来说:
- 如果无论采用多少样本,期望均等于真实值,那么这种估计称为无偏估计
如果期望和真实值不一致,则称为有偏估计
- 特别地,如果在样本趋近于无穷多时为无偏的,即期望值收敛到正确值,称之为一致的
双向路径追踪
Bidirectional Path Tracing ,BDPT (无偏)
BDPT 利用光向可逆性,从光源和相机分别发出半路径,将端点连接起来则形成一条路径。
特别适用于光线传播复杂的环境,尤其是环境中大部分被漫反射光照亮的情况,此时从相机出发的路径很难正确达到光源(漫反射难以反射到光源的位置)
如上图所示,右侧的双向路径追踪效果更好,因为侧面墙壁上很难漫反射到光源的位置,从光源出发的光线更容易计算
BDPT实现难度很高,并且运行慢很多
Metropolis光线传播
Metropolis Light Transport ,MLT(无偏)
Metropolis 光线传播是一种无偏的光线传播估计方法,其核心思想是使用马尔可夫链来生成与当前路径相似的新路径,以进行光线采样。
具体来说,当找到一条路径后,通过对其路径上的点位置进行微小扰动,生成新的路径,并利用这些路径来估计渲染函数的值。该方法特别适合处理复杂的光路传播,例如在光线需要经过多次反射和折射才能到达观察点的场景中表现良好。
缺点:
- 其收敛速度难以在理论上进行分析,无法准确预测渲染图像何时能够收敛到无噪声状态。
- 此外,由于操作是局部的,每个像素的收敛速度可能不一致,导致图像出现脏点,且不适合作为渲染动画的方法,因为相邻帧之间的收敛情况差异会导致图像抖动。
光子映射
Photon Mapping(有偏,一致)
光子映射是一种有偏但一致的光线传播估计方法。
光子映射特别适合处理光线经过多次反射和折射后形成的复杂光照现象,如 Costics 效果(光线聚焦产生的强烈图案)。
其工作原理是
- 首先,从光源发射大量光子,并记录光子在场景中的传播路径和与物体的相互作用。当光子碰到物体时,根据物体的材质属性决定是反射、折射还是吸收。特别地,当光子打到漫反射物体上时,光子会停止传播,并记录下其位置和能量信息。
- 在渲染阶段,从相机或观察者的位置出发,生成一系列的光线路径。当这些光线路径与物体表面相交时,通过查找该点周围一定范围内的光子分布情况,利用光子的能量和位置信息来估计该点的光照强度和颜色。这通常涉及到计算局部密度估计,即根据周围光子的数量和分布来确定该点的光照贡献。
尽管光子映射在光子数量有限时会产生有偏的结果(如模糊效果),但随着光子数量的增加,其结果会逐渐趋近于真实值。
该方法在电影行业等对光照效果要求较高的领域得到了广泛应用。
VCM(Vertex Connection and Merging)
VCM 的核心思想是将双向路径追踪和光子映射结合起来。
- 在双向路径追踪中,会从光源和相机分别生成子路径(sub-path),然后尝试连接这些子路径的端点以形成完整的光线路径。
- 而光子映射则侧重于从光源出发,记录光子在场景中的分布情况,尤其关注光子在漫反射物体上的积累。
VCM将双向路径追踪和光子映射结合起来,如果BDPT的半路径的终点不能连接起来,但是其在一个局部平面里,就可以用光子映射将其合并
实时辐射度(Instant Radiosity ,IR)
从光源打出多条半路径,其终点所在位置即为虚拟点光源(VPL),使用这些VPL渲染场景。
优点是速度快,在漫反射场景有较好的效果。
缺点是不能在gloosy场景使用,且渲染的点太近会出现小光源
高级材质模型——非表面模型
散射介质
光线在穿过散射介质时会发生吸收和散射,如雾、云等。
用相位函数(Phase Function) 描述光线在参与介质中的散射性质,即光线是往后集中散射、往前集中散射还是各向同性散射。
渲染方法:
- 随机选择一个方向进行光线反弹。
- 随机选择一个直线传播的距离。
- 在每个“着色点”,连接到光源。
头发外观
Kajiya-Kay模型:将头发视为圆柱体,光线照射到头发上会形成圆锥形散射,同时也会向四面八方散射,类似于漫反射和镜面反射的结合。
Marschner模型:将散射的光线分为三种:R(反射)、TT(透射两次)、TRT(透射一次后反射再透射)。该模型将头发视为玻璃圆柱体,分为角质层(cuticle)和皮层(cortex),皮层含有色素会吸收光线。
动物毛发:动物毛发的髓质(medulla)较大,光线进入后更容易发生散射。使用双层圆柱模型来模拟髓质,增加散射穿过的TTS和散射反射出来的TRTS。
颗粒状材质
如沙子、盐等,由小颗粒构成。
可简化为统计各成分百分比进行渲染,但计算量大,目前尚未得到很好解决。如盐、糖、沙子;
高级材质模型——表面模型
半透明材质与次表面散射
光线从一个点进入物体,从另一个点射出,形成次表面散射。不仅仅是半透明,光线在内部还会发生折射,如玉石、水母、牛奶、人耳等。
次表面散射BSSRDF是对 BRDF 的延伸,需考虑光线进入和离开点的位置与方向。可使用高斯径向模糊等方法近似渲染效果,能显著提升皮肤等材质的真实感。
布料材质
纤维结构:布料是由纤维缠绕而成的。
- 每一根纱线由纤维缠绕而成。
- 每一股毛线由纱线缠绕而成。
渲染方法:
- 作为表面渲染:根据织物图案计算整体行为,使用 BRDF 渲染。但对于像天鹅绒这样的布料效果无法展现。
- 作为参与介质渲染:考虑单个纤维的属性及其分布,转化为散射参数。将布料视为空间中分布的体积,对每个小格子中的布料性质进行采样,类似渲染云雾,但计算量大。
- 作为实际纤维渲染:显式渲染每一根纤维,但计算量更大。
细节材质
非真实感问题:过于完美的渲染结果反而不真实,真实世界物体表面存在划痕等细节。
微表面模型可描述法线分布,但计算复杂。引入细节时还需考虑波动光学效应。
高级材质模型——程序化生成材质
三维模型和材质的存储量极大的情况,不一定需要显式生成材质,可以通过查询噪声函数动态生成。
- 使用噪声函数动态计算,避免显式存储。
- 三维噪声函数可以生成内部结构,如切割或破损后的材质内部结构。
- 对噪声函数进行阈值处理(如二值化)以生成不同效果。
复杂噪声函数的应用:
- Perlin Noise:用于生成地形、三维木材等。
- 其他噪声函数:如 Goodbye Noise 等。
Houdini:用于程序化生成材质(显式生成)。