这是回答知乎上的一个问题,贴在这里做个记录。
关于离线渲染最近最全面的Survey可能是Per H. Christensen和Wojciech Jarosz 2016年的:https://www.cs.dartmouth.edu/~wjarosz/publications/christensen16path.html
我针对其中的一些重要内容做点说明,同时考虑到这篇Survey是偏工业运用的,我再补充一点处于研究性质的一些热点新技术。由于这方面资料几乎都是论文为主,我说些相应概念和技术名称,可以对照阅读相关主题的论文。分两个部分:
首先,工业运用中的主流技术,这方面包括Pixar的RenderMan,Disney的Hyperion以及Weta的Manuka等渲染器,主流当然还是CPU渲染,几个比较突出的技术包括:
- VCM/UPS:由于BPT的缺点是不能处理SDS(specular-diffuse-specular)路径,PM的缺点是处理diffuse表面不如BPT,2012年的VCM/UPS(Vertex connection merging/Unified path sampling)算法是一个很大的突破,它开始尝试将BPT和PM结合起来,使用PM对light subpath采样,并且将算法统一到BPT中,这样BPT就可以有效处理SDS。近几年中VCM/UPS几乎成了现在主流的离线渲染解决方案(参见The Path to Path-Traced Movies这篇论文);当然,VCM/UPS的缺点是,因为它仍然是BPT的思路,eye subpath并不知道light subpath的情况,所以尽管它能处理SDS,但是两个subpath连接的时候形成的很多full path由于可见性(尤其对于复杂visibility的场景)而对光照贡献率很低,而MLT则很擅长处理Visibility的问题,所以Robust Light Transport Simulation via Metropolized Bidirectional Estimators这篇论文就基于VCM/UPS来使用MLT对light subpath进行采样,这样保证了两个subpath之间的连接更符合最终图像分布。这篇论文也就同时把BPT,PM和MLT三大基础算法组合在了一起! 不过目前MLT方法在工业中运用还不多。
- 光线排序和连贯性:由于光线传输的随意性使得其并不能利用硬件的指令执行模型以及缓存系统,所以考虑光线的连贯性或者对光线进行排序是能够大大提升路径追踪效率的方法,这方面,基于连贯性(coherence)的路径追踪技术将这些数据分组成一些小的数据包,称为光线包(ray packet),这些数据包包含多个内存相邻的数据,并能能够被同一个指令执行。传统的基于光线包的技术主要是针对主要光线(Primary rays),即摄像机向场景发射出的光线,之后的光线可能向场景随处发射,并且对性能影响更大。2013年,迪斯尼的Christian Eisenacher等在一篇名为《sorted deferred shading for production path tracing》的论文中提出了一种改进方法,这种方法的核心思想是在实际计算之前对光线进行排序,这是Disney的In-house渲染器Hyperion的重要组成部分,这些技术最早用于《超能陆战队》当中。
- 降噪技术:由于蒙特卡洛方法带来的方差,使得需要增加4倍的采样数量才能换来2倍的方差减少,所以每像素采样数是制约路径渲染器性能的重要因素。然而,光增加采样数量并不能有效的解决噪点问题,因为图像的噪点分部通常是不均匀的,所以我们非常渴望能够在方差更大的区域放置更多的采样,这样能够更有效的减少方差,从而在少量的spp条件下获得非常高的图像质量。降噪技术是目前工业当中非常重要的部分,《疯狂动物城》《海底总动员2》这些没有一部不是严重依赖于降噪技术。降噪技术的核心是适应性采样和适应性重建,这些技术将采样的过程分成过个迭代的过程,每次对采样结果进行误差分析,根据误差分布来得出一个采样分布图,用于在下一迭代中在方差更大的地方放置更多的采样。降噪技术主要有两大类方法:基于路径空间的方法,这类方法直接对路径采样的过程进行跟踪,比如使用频率域分析或者微分分析等,由于计算量比较大,工业中主要使用第二种基于图像空间的方法,这方面的核心人物是Fabrice Rousselle。
其次,处于研究中的一些热点技术:传统的蒙特卡洛方法中每个抽样之间是独立的,它并不能有效辨识这种频率变化特征,要想能够辨识图像的分布特征,我们需要了解每个路径的局部特征,即我们要考虑光线之间的相关性,这可以从多个层面改善路径追踪算法的效率。以下举几种热点技术:
- 频率域分析:这类技术在光线追踪的过程中,还同时跟踪一条该光线(称为中心光线)对应的一个局部光照场(Local Light Field),这其实是一个像素范围内的空间-方法-时间(spatial-direction-temporal)分布,这个分布会随着光线的传输过程变化,例如表面的BRDF反射,直线传播,阴影遮挡等,如果能够跟踪这个分布的变化,就能够有效地分析图像的一些局部特征。这可以用来实现纹理过滤,适应性采样和适应性重建等很多有用的运用。频率域分析当前比较高效的实现是协方差追踪,它用一个椭圆形的高斯分布来进行这个局部光照场的分布,而这个椭圆形高斯分布可以用该局部光照场的协方差矩阵来表示,这方面的核心人物是Frédo Durand和Laurent Belcour等。
- 流形/微分几何:流形探索技术的思路是利用费马原理能够非常有效地寻找光泽路径,它主要用于MLT中用于寻找镜面,光泽路径,但是它不能成为一种独立采样算法,因为流形探索依赖于一条已有路径;另外,流形探索在Weta还被用于在漫反射顶点处计算透过光泽的半透明体直达光源的“直接光源”计算,因此渲染焦散效果,层表面散射非常有效。这方面的核心人物是PBRT的作者之一Wenzel Jakob等。
- 梯度域渲染:梯度域渲染技术也是与具体采样算法相对独立,可以是传统的PT,BPT或MLT,它通过在已有路径上计算梯度来提供图像的高频部分信息,最后通过泊松方程重建图像,传统的蒙特卡洛算法善于对低频部分进行采样,而筛选泊松方程的实质是梯度场充当了高频区域的采样,所以同样同等采样算法和采样数下渲染质量高得多。
以上只是些相对重要和热门的技术,当然不是全部,这些内容都会在THEGIBOOK 中探讨。