聊聊最近几年的路径追踪技术的进展(一)

路径追踪技术(Path tracing,PT)已是当下工业中离线渲染使用的主流技术,不论是商业渲染器如皮克斯的RenderMan,Solid Angle的Arnold等,仍是迪士尼的in-house渲染器Hyperion以及Weta Digital的Manuka都是基于路径追踪技术。路径追踪算法很是简单,它首先将光照方程表述为面积积分的形式,而后一束光线从光源通过各个物体表面及内部屡次交互(反射,折射,散射)后进入图像平面的贡献值(即辐射照度)被转换为这些表面交互点造成的路径的一个积分,其被积函数为这些表面的双向散射系数(BSDF),顶点之间的积分变量变化(change of variables)以及顶点之间可见性的乘积。在统计中,积分能够很简单地使用蒙特卡洛方法进行估计,所以光照传输的问题就转化为对场景进行路径采样,而后对每条路径的贡献值进行平均求和的蒙特卡洛积分计算。git

尽管自基本的路径追踪算法被提出以来,各类加强改进的方法被整合进来,然而上述路径追踪技术的“基础架构”几乎没有多少实质性的变化。对于任何行业,工业中主流的技术通常不是当下最早进的技术,而是最成熟可工业化的方案,当前工业中的路径追踪技术优化主要集中在优化算法的执行效率,主要是针对处理器硬件架构进行优化,例如针对缓存系统的优化,加强数据局部性和指令局部性,以及改进光线连贯性(ray coherence)使其可以利用SIMD指令进行高效计算等,这方面比较突出的是迪士尼的Hyperion渲染器,一些渲染器的优化更是几乎能达到某些场景复杂度范围内实时渲染,例如Embree。算法

然而以上这些内容却不是本文关注的重点(上述内容会在thegibook中详细讨论),本文咱们要讨论的是一些路径追踪算法基础架构层面的改进,这些算法还不多出如今当前工业解决方案中,可是确实将来的重要发展趋势。缓存

传统的路径追踪算法是一个单纯的积分问题,所以可使用蒙特卡洛方法来估计,然而蒙特卡洛方法的每一个抽样是独立的,所以很难有效快速对一些比较困难的路径进行采样,一些很难被采样的路径须要巨量的采样数才能达到“使人满意”的结果,这致使很是缓慢的收敛速度。尽管开始的收敛速度很是快(4倍采样数量能够减小1/2的偏差),可是越到后面会花费更多倍的时间。传统的方差缩减技术如重要性采样,分层采样,拟蒙特卡洛方法(Quasi-Monte Carlo)仍然不能改变这个收敛速度。架构

要提高蒙特卡洛估计的收敛速度,直观上,咱们须要可以辨识每一个图像的分布特征,而后在一些高频变化区域增长采样的密度。然而,传统的蒙特卡洛方法中每一个抽样之间是独立的,它并不能有效辨识这种频率变化特征,尽管梅特波利斯光照传输(Metropolis light transport,MLT)经过采样点之间的相关性可以寻找一些困难路径,本质上它仍然并不善于处理和分析频率域特征。要想可以辨识图像的分布特征,咱们须要了解每一个路径的局部特征,便是咱们须要对路径追踪算法引入微分运算。路径的微分涉及路径与附近局部范围内光线的差值,即图像的局部特征,所以它引入了光线之间的相关性,能够从多个层面改善路径追踪算法的效率(也正是如此,咱们认为这是近几年路径追踪技术领域的重大进展)。app

最近几年路径追踪领域的一些重大进展正是微分几何(differential geometry)的引入,因为微分反应的是流形(manifold)的局部变化,所以很是善于寻找图像分布中的高频部分,目前路径追踪算法中的微分运用主要包括:以经过计算纹理过滤函数实现反走样的光线/路径微分(ray/path differential)和协方差追踪技术(covariance tracing);以经过计算梯度图像用于利用筛选泊松方程(Screened Poisson equation)重建目标图像的梯度域渲染(gradient-domain rendering);以及经过将微分几何结合费马定理(Fermat principle)用来寻找镜面/光泽路径的流形探索(manifold exploration),半矢量空间光照传输(half vector space light transport)等技术;此外,微分还被用于适配性采样(adaptive sampling),成为重要的降噪技术(Denoising)。dom

如下咱们就来从概念和思路上分析上述这些技术,固然咱们能够提早知道的这些技术的一个重要共同点就是:这些微分计算一般不须要经过光线追踪引入新的采样点,不然那样的计算成本就很高,这些技术一般都是利用微分几何和某些假设进行单纯的微分计算,这里主要的工具是一阶泰勒展开式(first-order Taylor approximation)和顶点处的切线平面空间(tangent space),所以,这些新技术一般均可以很容易地集成于目前主流的路径追踪技术基础架构之上,更详细的内容请参考thegibook中相关章节。函数

接下来咱们讨论的每一种微分的运用都涉及一个相对比较独立的层面,在阅读这些内容的时候,你首先须要很是清晰的了解的是它用来解决什么问题,所以我会在每一节的开头提出这个问题,而后读者能够围绕这个问题来阅读每一小节,即每一种技术。工具

光照传输的局部频率域分析

微分反应的是图像的局部特征,所以其在图像渲染中最直观的运用就是用于反走样(anti-aliasing)。光线追踪算法中因为采用不足致使的走样问题能够分为两大类:对路径空间(path space)的采样不足和对纹理空间(texture space)的采样不足,本质上这都是因为路径采样的不足致使的,可是它们一般使用不一样的方法来解决。一个像素区域内的光线从屏幕空间发射出去以后,随着光线在表面的各类交互这个面积可能会无限扩散,因此单纯增长路径采样的数量可能也很难弥补纹理走样(texture aliasing)的问题。因此它们分别对应路径追踪算法中两个比较独立的反走样技术:路径空间采样不足主要对应于降噪技术,纹理空间采样不足对应于纹理过滤技术。post

目前降噪技术主要的思路是针对图像的分布特征进行适配性采样以及适配性重建,前者对应于在图像的高频区域放置更高的路径采样密度;后者对应于根据图像特征对不一样的区域使用不一样的重建过滤器(reconstruction filter)。对路径进行适配性采样的方法能够分为两类:第一种直接对光照传输方程进行分析,称为先验方法(a priori method);而第二种只对屏幕空间的图像进行分析,称为后验方法(a posteriori method)便是说与路径采样的方法无关。性能

光照传输的局部频率域分析能够用于纹理过滤以及做为降噪技术中的先验方法。如下咱们讨论局部频率域分析的方法和思路。

路径的局部频率域分析虽然不是源自光线微分(ray differential)技术,可是跟它有很大的联系。光线微分技术的核心思路是随着光线的传播跟踪该光线对应的频率区域一个像素的大小,这称为光线的足迹(footprint),以下图所示,在路径追踪算法中追踪每条路径的时候,同时沿屏幕空间x和y方向分别发射一条一个像素大小的偏移路径,而后对每条基础路径同时跟踪两条偏移路径。路径在每一个顶点处的足迹大小则能够经过积分计算出来。固然光线微分技术并无彻底利用微分几何的知识,由于它假设偏移路径和基础路径在每一个路径顶点处位于同于平面-即该顶点的正切平面(tangent space)上,因此光线微分的计算大大简化了。

因为假设偏移路径和基础路径和表面的交点位于同一平面,上述光线微分技术仅适用于镜面表面(specular surface),路径微分(path differential)在此基础上将光线微分扩展到了光泽面(glossy surface)和漫反射表面(diffuse surface),它虽然有比较理论的推导,可是实践上主要使用经验方法,即根据表面的粗糙度用来缩放足迹的大小以支持光泽面和漫反射表面。

上述的光线/路径微分技术其实是光线的一种局部特征,传统的路径追踪算法中每条光线之间的独立的,因此不可以分辨这种局部特征。然而上述方法仍是有不少缺点,例如光线通过屡次传播以后可能形状很是不规则,而两条偏移路径计算的四边形没法表达这种形状;其次偏移路径可能被阻挡,而光线/路径微分是忽略这种阻挡的;为了更好的追踪光线的局部特征,咱们须要更完整的对光线的传输过程进行分析。

目前对光线进行局部分析的方法的思路主要是将光线的局部特征表示为一个空间-方向分布(spatial-angular distribution)的局部光照场(local light field),以下图所示,黄色的中心光线表示基础光线,周围的一些具备不一样位置和方法分布的光线是一些虚拟光线,它们共同构成一个局部的空间-方向分布。例如对于摄像机光线,它的局部光照场的分布就是一个像素范围大小的一个过滤器,该过滤器对于每一个不一样方向和位置处的光线都具备一个不一样的权重值,这个过滤器就反映了摄像机路径的局部特征;对于光源路径,若是是面积光,则局部光照场的方向为固定值,而位置分布于面积光源的各个位置。

有了局部光照场的描述,剩下的事情就是计算该光照场随着中心光线的传输。早期的思路是将光线在传输过程当中的各类交互过程看作一个操做函数,例如光线的直线传输(transfer),反射,折射,阴影遮挡等,以下图所示,而后在局部光照场函数的频率空间进行交互,这样就能够跟踪局部光照场随中心光线的传播过程。

上述的傅里叶分析过程计算成本相对较高,为了简化局部光照场的传输,协方差追踪(covariance tracing)技术考虑能够将一个4D的空间-方向分布近似为一个椭圆形高斯分布(elliptical Gaussian filter),以下图所示,而后该分布可使用该4D光照场的协方差来表示,因此局部光照场能够用其协方差矩阵(covariance matrix)来表示。而后这些对局部光照场的传播操做数就转变为矩阵操做,最后在计算足迹的时候再从协方差计算出该4D局部光照场的尺寸,这就能够用来替代上述的光线/路径微分技术用来实现纹理过滤。

协方差追踪不只用于纹理过滤中计算局部光照场足迹的大小,还被用于适配性采样,若是咱们从光源路径方向追踪光源的空间-方向分布至屏幕空间,则咱们能够在屏幕空间分析图像的频率分布,进而能够用于适配性采样,以下图所示。下图的局部光照场是一个5D空间,它还包含了时间维度,所以能够用于计算运动模糊(motion blur)效果,在该图中,首先从光源发出光线通过一次表面交互(即直接光)以后投射一个椭圆形分布到屏幕空间,而后根据这些分布就能够计算出图像的频率分布,这些分布特征被用于适配性采样。

除了协方差追踪,光照传输的局部频率域分析还包括其余一些方法,可是目前协方差追踪是更简单和高效的一种技术。固然协方差追踪的限制是它将局部光照场近似为一个椭圆形的分布,实际的局部光照场分布特征可能还须要更负责的形状表述,这也是将来的优化方向。

下一篇咱们将讨论梯度域渲染和流形探索或者半矢量空间光照传输。

相关文章
相关标签/搜索