UWA问答 | 博客 | 游戏及VR应用性能优化记录分享 | 侑虎科技 - 惟学无际
在游戏引擎渲染管线中，我们对于R、G、B通道颜色信息的数值范围通常设置在[0,1]之间（或者是[0,255]）。其中，0代表没有光亮度，1代表显示器能够显示的最大光亮度。这个表示方式虽然直接易懂，但它并不能反映真实世界中光亮度的情况。在真实世界的光照环境中，光亮强度有时候会超过显示器能够显示的最大亮度。而且，人眼在观察真实世界的物体时，会根据光照强度进行自我调节。因此，更加真实的渲染方式是让颜色值超过1。这种光照计算方式或环境光照图就是我们常常在游戏引擎中看到的HDR（High Dynamic Range）光照或者HDR环境贴图。但是，采用HDR渲染出来的亮度值会超过显示器能够显示最大值。此时，我们需要将光照结果从HDR转换为显示器能够正常显示的LDR。这一过程我们通常称之为Tone Mapping。下图是Unity引擎对采用HDR渲染的图片使用了Tone Mapping和没有使用Tone Mapping的对比结果： 其中，上图是没有使用Tone Mapping的结果，下图是使用了Tone Mapping的结果。可以看到，在没有使用Tone Mapping的渲染结果中，有很大一部分像素的光亮度是超过了显示器能够显示的最大值。在视觉上，这些地方变得过曝了。而在使用了Tone Mapping的渲染结果中，像素光亮度变得正常，视觉上也更加真实。 今天我们要介绍的这一篇论文是于2002年发表在Siggraph会议上的论文“Photographic Tone Reproduction for Digital Images”。这篇论文提出了一种新的Tone Mapping的方法，使得经过该方法转换的结果从视觉上看起来更加接近真实世界的物体。首先，我们来看看这篇论文的结果图，如下图所示： 其中，左图是采用线性缩放的结果，右图是采用论文中的算法进行转换的结果。可以看到，在简单的线性缩放结果中，许多细节部分丢失了；而论文算法转换的结果则很好地保留了图像的细节部分。接下来，我们将对论文中的算法部分做详细介绍。 一、初始光亮度映射 首先，文章作者对整个图像做了一个光亮度的映射，其作用类似于设置相机的曝光。这一操作实际就是对每一个像素做固定缩放。根据前人对Tone Mapping的研究结论，论文作者认为光亮度的log平均值能够反映图片中像素光亮度的特征。因此，作者用该值对每个像素作缩放。 若用Lω（x，y）表示像素（x，y）的光亮度，则log平均值可表示为： 其中，N 表示像素个数，δ 是一个用于避免奇异值的常数。缩放后的光亮度 L(x，y) 可用如下公式表示： 其中，α 是一个缩放参数，被称为Key Value，不同的 α 值对应了不同的缩放程度，如下图所示： 但是，仅仅做简单线性缩放是不够的。对于光亮度变化不是很大的图片，这种方法可以将像素的光亮度很好地压缩到一定范围，但是对于大多数图片，绝大部分像素光亮度是在某一个范围之内，而少数高亮的像素比平均值高太多，很容易产生过曝，如：光源、高光反射等。因此，通常在经过线性缩放之后，还需要利用非线性的算子对图像进行处理。文中作者列举了一种常用的算子： 其中，Ld（x，y）表示经过非线性算子处理后的像素，Lwhite表示图片中被映射到白色亮度的像素中的最小值。由于是非线性的，对于亮度高的像素缩放更大，因此该公式能够防止线性缩放中无法处理的过曝情况。但是，这种简单的算子通常容易导致细节丢失。作者观察到，在传统打印技术中，为了提高打印结果的质量，通常会采用一种dodying-and-burning的方法。该方法的原理是根据打印内容的不同，在不同区域减少光亮度（dodying）或者增加光亮度（burning）。论文作者通过实验，对比了简单非线性映射以及dodying-and-burning处理后的结果，如下图所示： 其中，上排图片中太阳被树枝遮挡住，因此不包含高亮的区域，下面的图片则包含高光反射。左边一列图片同样是采用简单非线性算子（Simple Operator）缩放，经过观察可以发现，下图中的书中文字完全被高光覆盖。由此可见，简单的非线性算子缩放会丢失很多细节。 论文作者在经过观察和测试之后，基于dodging-and-burning方法，提出了一种自适应的dodging-and-burning方法，下面我们将详细说明。 二、自适应dodging-and-burning 自适应dodging-and-burning的特点是，找出对比度大的边缘包围的区域，然后对该区域进行处理。因此，作者提出利用高斯核卷积的方法来找出这些区域。对于不同的缩放系数 s，在不同的像素点（x，y），计算高斯核函数 Ri（x，y，s）与图像 L（x，y）的卷积。则卷积结果 Vi（x，y，s）可表示为： 其中，Ri（x，y，s）可表示为： 然后，论文作者定义了一个误差函数，计算不同 αi 参数的卷积结果之差，来衡量图像局部像素的光亮度分布。则误差函数 V 可以表示为： 通过对不同的缩放参数 s 进行计算，找出符合如下公式的参数： 其中，ϵ 是一个阈值，sm 是对每个像素计算出的缩放参数。当我们获得每一个像素的缩放参数后，对每一个像素进行不同的缩放计算： 从而获得最终的Tone Mapping结果。下图显示了计算过程： 其中，左图显示了计算缩放参数的过程，Center表示内圈高斯计算的范围，Surround表示外圈高斯计算的范围。右图显示了用不同缩放参数进行缩放后的结果。通过观察可以发下，当缩放太小时无法有效地提取出图像细节，而缩放太大时会出现黑色的Artifacts。 三、实验对比 论文作者将dodging-and-burning计算结果与前人的结果进行了对比实验。如下图所示： 其中，New operator表示了论文的实现结果。 四、总结 论文作者提出了一种新的Tone Mapping的算法，它通过对dodging-and-burning打印技术的观察和分析，对于不同的区域采用不同的缩放系数，提出了自适应dodging-and-burning的方法，能够将高动态图转换成低动态图时防止高亮部分过曝，并且能达到在亮部和暗部都能保持细节的目的。 五、论文信息 作者信息： Erik Reinhard，著名计算机图形学学者，目前在Technicolor Research and Innovation做研究工作； Michael Stark，计算机图形学研究者，曾就读于美国犹他大学； Peter Shirley，著名计算机图形学大牛，真实感渲染专家，犹他大学客座教授，NVidia首席科学家； James Ferwerda，著名计算机图形学学者，罗彻斯特理工学院副教授。 论文链接： http://www.cmap.polytechnique.fr/~peyre/cours/x2005signal/hdr_photographic.pdf 这是侑虎科技第225篇原创文章，欢迎转发分享，未经作者授权请勿转载。如果您也有任何独到的见解或者全新的发现也欢迎联系我们，一起探讨。（QQ群465082844） 关于惟学无际 【惟学无际】是UWA在2017年推出的全新研究型专栏，我们将为大家推荐极具实际价值的学术论文，并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许，为有源头活水来 ，希望大家在研发的过程中不仅知其然，还能知其所以然。
基于物理的渲染－用真实的环境光照亮物体
目前，在游戏引擎中用于照亮物体的光源非常丰富。其中，比较常用的有：平行方向光、点光源、聚光灯以及体积光等，但它们都是对真实光源的近似，并不能很好地模拟真实世界中的复杂光照情况。为了增加光照效果的真实感，我们常用的一种光照计算方法是基于图像的光照计算（Image-based Lighting）。例如：天空盒（Sky Box）作为环境光贴图，或者是用Reflection Probe作为反射贴图等。而在最近比较流行的基于物理的渲染管线（Physically-based Rendering）中，IBL成为了必不可少的一部分。 今天我们介绍的一篇论文是Paul Debevec在1998年Siggraph会议上发表的一篇文章。这篇论文主要解决的问题是：如何利用HDR（High Dynamic Range）图以及全局光照明技术，将虚拟的物体融合到真实照片中。它实现的效果类似于今天我们常说的AR（Augmented Reality）技术。在渲染虚拟物体的时候，文章作者采用的方法是用HDR图作为环境光贴图来计算光照结果。该方法是最早使用IBL进行光照计算的方法之一。我们先来看看他的渲染结果，如下图所示。 其中，左图是真实拍摄的图片，右边是将虚拟物体合成到真实拍摄图片的结果。可以看到，虚拟物体中的金属材质对周围环境的反射以及高光，都能和真实物体形成一致的光照结果。 论文将场景中的物体分成三类分别进行处理。下图是这篇论文的算法框架图。 这三类分别是：远处的场景、近处的局部场景、以及虚拟场景。在渲染远处场景的时候，论文作者用真实拍摄的图片以及简单的几何来渲染，其光照信息全部来自拍摄的图像。在渲染近处局部场景的时候，由于需要模拟真实场景对虚拟场景的影响，所以论文作者还对物体的材质进行了近似估计。最后，在渲染虚拟物体的时候，利用环境光照的入射光来计算光照。其算法过程示意图如下图所示。 首先，论文作者对真实场景进行拍摄。然后，利用反射探针对场景中的环境光进行获取。在获取环境光贴图时，作者采用的是HDR的表示方式。接着，利用获取的环境光照贴图对远处场景进行建模。最后，用全局光照软件渲染虚拟物体以及与虚拟物体有光照影响的近处局部物体，并融合到拍摄的真实图像中。接下来我们将对论文的算法进行详细介绍。 一、用真实的环境光照亮物体 文章作者采用了HDR图作为环境光照贴图。为了说明用HDR图比普通的LDR图更能表现实际光照环境，论文作者分别采用HDR和LDR环境贴图进行渲染，并对两者结果进行了比较，结果如下图所示。 第一排是用HDR图片渲染的结果，第二排是用LDR渲染结果。其中，右边三列结果中，LDR的渲染结果在计算时，作者将光照强度增大了6倍，从而使得LDR的入射光的强度能够与HDR的一致。但是从渲染结果中可以看到，采用HDR环境光图渲染的结果能够表现出更多的细节，而LDR的渲染结果显得比较平坦。因此，作者在其接下来的实验中全部采用了HDR图片作为环境光照入射光。 二、无限远场景 文章作者提出了一种基于光照的建模方法（Light Based Model）来对远处的物体进行建模。这种方法其实类似于我们今天常用的天空盒。它的做法是将HDR光照图映射到一个方盒上，作为远处的背景，如下图所示。 这张图不仅用于显示无限远处的场景，并且用于对虚拟物体渲染的入射光。 三、近处局部场景 为了模拟近处局部真实场景与虚拟场景之间的光照交互，不仅需要对近处局部场景进行几何建模，而且需要获取其材质信息。虽然可以采用材质获取工具对真实场景材质进行测量，但是文章作者采用了迭代的方法来对其进行估计。该方法的过程如下： 首先对局部真实场景的几何进行建模，然后对其材质进行估计，如：diffuse，diffuse加specular，或者是任意的BRDF模型，甚至是随空间变化的; 对估计的材质模型选择初始参数; 用全局光照算法对局部场景进行渲染; 采用不同的视角，比较渲染结果和真实拍摄结果; 如果渲染结果与真实拍摄结果不一致，则调整模型参数，并返回第3步继续迭代。 四、近处的虚拟场景 在渲染近处的虚拟场景时，需要将拍摄的多张环境光贴图合成一张完整的贴图作为入射环境光。因为，当采用Light Probe采集环境光照时，处于Probe球背面的场景无法被采集到。同时，正对着相机方向的场景由于球面边缘反射的拉伸，采样率低，容易出现瑕疵。因此，论文作者在多个不同的角度对Probe球进行拍摄，然后将多张拍摄的结果进行合成，最后形成一张完整的贴图。下图展示了论文作者采集的三张环境光贴图以及对虚拟场景的渲染结果。 在上方的图片中，上图是利用Light Probe拍摄的三张贴图，下图是用合成的环境光贴图渲染的虚拟场景。在渲染时，论文作者采用了全局光照渲染引擎Radiance进行全局光照渲染。与我们目前在游戏引擎中采用的实时算法不同的是，Radiance并不是实时计算完成的。由于当时的硬件条件限制，支持离线渲染。 五、融合结果 论文作者将远处场景、近处场景、以及虚拟场景进行融合，得出最终结果，如下图所示。 其中，图(a)是真实拍摄的结果。图(b)显示了用Light Probe拍摄环境光贴图的设置。图(c)至图(f)显示了采用迭代对局部场景（地板）进行估计的过程。为了表现出虚拟物体和地面之间的阴影遮挡以及多次反射，论文作者用一张纯diffuse的纸板对地面进行几何近似，并通过第三节中的迭代算法对地面的材质参数进行估计。图(g)显示了将虚拟物体融合到真实场景的结果。 六、总结 这篇论文提出了一种利用真实拍摄光照贴图对虚拟物体进行渲染并融合的算法。该算法可以很好地将虚拟物体融合到真实拍摄的场景中。其主要原因是，渲染虚拟物体的环境光照贴图是从真实拍摄的HDR图片中获取，所以虚拟物体的渲染结果的光照能够与真实拍摄场景一致。其次是论文作者在渲染时，对与虚拟物体有相互影响的真实场景进行几何和材质的估计。然后，根据估计结果进行全局光照的渲染。最终能够捕获真实场景与虚拟物体之间相互反射以及阴影遮挡的效果。 七、论文信息 作者信息： Paul Debevec，南加州大学兼职研究员，GoogleVR项目主要成员，著名计算机视觉、图形学学者。他的研究成果包括，利用Light Stage获取BSDF，如人脸的反射模型，以及将高动态图用于基于图像的建模与渲染。他的研究成果被用于许多著名电影渲染，包括黑客帝国、蜘蛛侠2、金刚、超人归来、蜘蛛侠3、以及阿凡达等。 下载链接： http://www.vis.uni-stuttgart.de/plain/vdl/vdl_upload/103_28_debevec-siggraph98.pdf 这是侑虎科技第221篇原创文章，欢迎转发分享，未经作者授权请勿转载。如果您也有任何独到的见解或者全新的发现也欢迎联系我们，一起探讨。（QQ群465082844） 关于惟学无际 【惟学无际】是UWA在2017年推出的全新研究型专栏，我们将为大家推荐极具实际价值的学术论文，并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许，为有源头活水来 ，希望大家在研发的过程中不仅知其然，还能知其所以然。
基于物理的渲染—基于Haar小波基的实时全局光照明
上一期惟学无际我们给大家介绍了一篇 基于球面调和基函数（Spherical Hamonices，简称 SH ）的动态全局光照明算法。它的思路是：将光线在物体间复杂的传输过程看作一个传输函数，预先模拟计算好并用 SH 基函数来近似表示。同时，在实时光照计算时，将入射的环境光用 SH 基函数近似，这样光照渲染结果可以用两者的 SH 基函数的点积进行计算。该算法通过预计算模拟，使得实时计算的复杂度大大降低，从而能够支持实时动态光源的全局光照明渲染。但是，该算法有一个缺陷，即只能获得低频的渲染效果。因此，基于 SH 的 PRT 只能渲染类似于 AO（Ambient Occlusion）的软阴影，无法渲染有明显轮廓边界的真实阴影。 今天介绍的这篇文章是 Ren Ng 等人在2003年发表于 Siggraph 会议上的经典论文 《All-Frequency Shadows Using Non-linear Wavelet LightingApproximation》，目前该篇文章的引用次数已经超过400次。在这篇论文中，作者提出了一个采用非线性小波变换来代替线性 SH 变换的 PRT 算法。实验结果证明，相较于前人的 SH 函数，本文作者在使用相同数量的小波函数时，能够更好地捕捉到全局光照明的高频信息。因此，该算法能够渲染出更加真实的全局光照明效果，比如具有明显边缘的实时阴影。 首先我们来看看这篇论文的效果图，如上图所示。其中，左图是基于 SH 的 PRT 渲染结果，右边是基于小波的 PRT 渲染结果。两幅图采用了相同数量的基函数项：左图采用100个 SH 基函数，右图采用100个小波基函数。中间的六个方形纹理则是环境光贴图。比较左右两图的阴影渲染效果则可以发现，右图的阴影边缘较为清晰，而左图的比较模糊。因此，在使用相同数量基函数的情况下，小波变换比 SH 变换能够捕捉到更高频的光照信息，渲染结果更加贴近真实情况。接下来，我们将详细介绍这篇论文算法的主要内容。 一、算法与实现 所有的渲染问题，其实都是在解决渲染方程的计算问题。这篇论文也不例外，因此我们首先来介绍渲染方程。考虑物体表面某一点 x，其法线方向为 n，则该点从 ωo 方向反射出的光 P( x, ωo ) 可表示为： 其中，L 为入射光强，V 为可见性函数，fr 为BRDF函数，n 为法线方向，ω 为入射光方向。 论文算法可以应用于两种情况：1）视点变化，材质限定为Diffuse；2）视点不变，材质任意。接下来我们分别介绍这两种情况下的解决方案。 1.1 视点可变且材质限定为Diffuse 当材质限定为Diffuse时，传输函数可以表示成为： 1.2 视点不变且材质任意 当材质为任意时，传输函数可表示成为： 其中，由于视点固定，所以 ωo 只跟 x 相关。 渲染方程中的积分式可以看成入射光强 L 与其他项关于入射光方向 ω 的卷积。离散化后就变成对应项相乘之后求和。于是，对于每一点 xi ，其光照计算可表示成为： 如果用矩阵以及向量形式表示，则可简化为：P= T · L 。其示意图如下图所示。 1.3 预计算 在预计算阶段，论文作者采用了两种方法。第一种方法是每次对传输矩阵 T 的一列进行模拟计算，也就是对入射光向量 L 的每一个方向 ω 做计算，计算方式是光线跟踪。因此，T 中每一列向量表示的是环境光贴图每一个像素照射场景的结果。该方法比较简单，并且支持各种全局光照效果，但是它只支持固定视点的情况。 第二种方法是每次对传输矩阵T 的一行进行模拟计算。这种方法只计算直接光照的部分。因此，传输矩阵的每一行表示的是物体表面某一点 x 的可见性立方体贴图外加BRDF和Cosine项的权重，如下图所示。 上方图片为场景中某些顶点的预计算结果。其中，第一张图是场景底部面片某一点的预计算结果，第二张图是植物下方某点的预计算结果，第三张图是植物叶子上某点的预计算结果。该方式可以用光栅化图形硬件来实现。论文作者对每一个点 x ，首先渲染一个高分辨率的半立方体可见性贴图。然后计算BRDF和Cosine项的权重值，并且进行降采样到环境贴图一样的分辨率。 1.4 实时渲染 在实时渲染时，论文作者首先将环境光贴图通过2D Haar小波变换计算出相应的系数向量 L 。然后，选用了一部分入射光进行计算。其主要目的是通过删减能量比较小的入射光来减少计算量。论文作者采用了三种过滤方法。第一种是直接用Haar小波系数的大小进行过滤，第二种是用传输矩阵的对应列计算出一个权重，第三种是用光源的面积大小来过滤。然后，计算 L 与 T 的乘积得到最后的渲染结果。整个计算过程是在 CPU 端进行，因为小波变换后的系数向量和矩阵是非常大的稀疏向量和矩阵，而当时的 GPU 无法支持通用的稀疏矩阵乘法运算。 二、效果对比 论文作者分别用 SH 基函数以及小波基函数对环境光贴图进行模拟，并且比较了两者在采用不同数量基函数时的结果与原始环境贴图差别，如下图所示。 其中，左右两幅图是分别对两张不同的环境光贴图的模拟结果。在左右两图中，左边一列是分别用100、4096以及10000个SH基函数项对环境光贴图的模拟结果，右边一列上两幅图是分别用100和4096个小波基函数项对环境光贴图的模拟结果，第三幅是原始环境光贴图。对比 SH 和小波的模拟结果可以看到，对于比较简单的环境光贴图，小波基函数只需要100项即可捕获高频信息，而 SH 需要4096项才能达到相似的结果。对于复杂的环境光贴图，小波基函数只需4096项即可还原出原始贴图，而 SH 即使采用10000项依然无法很好地还原原始贴图。 小波变换之所以能够用非常少的项就能捕捉全频光照信息的原因是，经过小波变换后，大部分项的系数变成了零或接近于零，如下图所示。 经过实验发现，小波变换之后非零项所占的比例只有0.1%~1%。小波变换相当于对全频信息进行了压缩。因此，采用相同数量项时，小波变换能捕获的光照信息要比 SH 更多。但是，小波变换也有它的局限性。它并不具备 SH 的旋转不变性，因此在传输函数中法线方向 n 被看作位置变量 x 的函数。这意味着基于小波变换的 PRT 无法实时渲染物体经过旋转后的结果。而SH则没有此限制。这也是基于小波变换的 PRT 在随后的研究中发展受限的主要原因之一。 论文作者对比了采用不同数量项的 SH 基函数和小波基函数对环境光贴图近似结果与原始图的 L2 误差，如下图所示。 可以看到，随着项数的增加，SH 和小波的近似误差都在减少。但是小波收敛的更快，到1000 时已经比 SH 在10000项时的误差还要小了。 三、更多渲染结果 论文作者渲染了采用更多的场景进行实验，下表统计了不同场景中对环境光贴图进行采样的分辨率、稀疏矩阵中非零项的比例以及内存占用量。 更多的渲染结果如下图所示，上排是 SH 渲染结果，下排是 Haar 小波渲染结果。从左到右采用的基函数项逐渐增加。可以见到 Haar 小波在采用相同数量基函数项的情况下，比 SH 渲染出的阴影结果具有更多的高频细节。 四、总结 本篇论文提出了使用Haar小波函数来作为PRT的基函数，从而实时渲染出能够保留全频信息的全局光照明效果。与球面调和基函数相比，Haar小波基函数同样具有标准正交性，同时，它的高压缩比特性可以让其以非常少的参数就可以保留住渲染效果的高频信息，进而达到全频光照明的渲染效果。虽然Haar小波由于自身特点限制在后续的全局光照明渲染中并没有得到广泛的应用，但其在推进全局光照明的实时渲染研究领域，有着不可磨灭的贡献。 五、论文信息 论文参考视频： 视频网址：https://v.qq.com/x/page/n0384trr1va.html 作者介绍： Ren Ng，目前就职于UC Berkeley 个人主页：https://www2.eecs.berkeley.edu/Faculty/Homepages/yirenng.html Ravi Ramamoorthi,著名计算机图形学学者，目前为UCSD教授。计算机图形学界大牛，发表论文数量可谓著作等身（Publications 好几页翻不完） 个人主页：https://cseweb.ucsd.edu/~ravir/ Pat Hanrahan,著名计算机图形学学者，目前为斯坦福大学教授。计算机图形学界大牛，曾经在Pixar工作，为RenderMan Shading Language开发者之一 个人主页：https://graphics.stanford.edu/~hanrahan/ 下载连接： https://graphics.stanford.edu/papers/allfreq/allfreq.pdf 这是侑虎科技第213篇原创文章，欢迎转发分享，未经作者授权请勿转载。如果您也有任何独到的见解或者全新的发现也欢迎联系我们，一起探讨。（QQ群793972859） 关于惟学无际 为学无际是UWA在2017年推出的全新研究型专栏，我们将为大家推荐极具实际价值的学术论文，并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许，为有源头活水来 ，希望大家在研发的过程中不仅知其然，还能知其所以然。
基于物理的渲染—更精确的微表面分布函数GGX
在上次介绍的微表面模型文章中，我们曾提到过模型中有一个模拟物体表面反射高光的函数 Rs 。在该函数中，有一个表示微表面法线方向分布情况的函数 D（Microfacet Distribution function）。基于对材质表面的观察，许多研究者提出了该分布函数的模型，比较著名的有 Beckmann（1） 以及 Blinn Phong。但是，目前在各种游戏引擎中使用最多的、同时也是效果最好的是一个叫做 GGX 的模型。研究过 PBR 渲染管线的同学可能会经常在各种技术文章中看到 GGX 这个符号。今天我们介绍的这篇论文来自于2007年著名的图形学会议EGSR（Eurographics Symposium on Rendering），而 GGX 也正是首次在这篇文章中提出。 这篇论文的题目是《 Microfacet Models for Refraction through Rough Surfaces 》，它所解决的问题是，如何将微表面反射模型推广到表面粗糙的半透明材质，从而能够模拟类似于毛玻璃的粗糙表面透射效果。同时，文章作者提出了一种新的微表面分布函数 GGX 。并且，通过与前人提出的模型以及真实测量数据做对比，证明 GGX 能够更好地拟合真实测量数据，比前人提出的模型更加精确。 虽然在这篇论文中 GGX 被用来渲染表面粗糙的半透明物体，但是 GGX 作为一种描述微表面法线方向分布的函数，同样适用于渲染表面粗糙的不透明物体。例如在著名的游戏引擎Unity和UE4中，GGX 就被用于渲染不透明物体。下图(2)展示的是UE4引擎的渲染PBR结果，其中微表面分布函数采用的就是 GGX 。 接下来我们介绍这篇论文的内容。首先，我们来介绍这篇论文的渲染效果图，如下图所示： 图中渲染的是一个半透明的球体，该球体表面既有光滑部分也有粗糙的部分。透过光滑表面可以清晰地观察到背景图中不同颜色的条状纹理，而透过粗糙表面则纹理的形状和边界变得比较模糊。同时，可以看到在球的顶端出现了高亮反射的现象，这是由于球面对顶部光源的反射造成的。因此，通常在渲染既有反射又有透射的情况时，我们通常采用BSDF（Bidirectional Scattering Distribution Function）来模拟。这篇论文中的BSDF既包含了反射模型BRDF（Bidirectional Reflectance DistributionFunction）又包含了透射模型BTDF（Bidirectional Transmission Distribution Function）。接下来，我们先介绍这篇论文的BSDF以及其中包含的各项函数，然后介绍论文与前人提出的方法的对比试验。有兴趣的读者可以选择继续阅读，或者直接跳转到后面结果部分，查看论文的更多渲染结果。 一、论文BSDF介绍 给定物体表面某一点的法线方向 n ，入射光方向 i ，以及出射光方向 o ，则该物体表面材质的 BSDF 可以表示为 BRDF 和 BTDF 之和： 其中，fr (i,o,n) 表示 BRDF ，ft (i,o,n) 表示 BTDF 。对于 BRDF ，论文采用了 Cook-Torrance 模型的形式： 唯一不同的是，论文作者将 Cook-Torrance 模型公式中分母的 π ，改成了常数 4 。论文中的解释是，函数 D 用了不同于Cook-Torrance模型的归一化。其中，hr 表示入射方向 i 和出射方向 o 的中间向量：hr = Sign ( i ∙ n )( i + o )。对于理想镜面反射，hr 方向即为反射点的法线方向。 为了将微表面模型从 BRDF 推广到 BTDF ，论文定义了折射情况下的 ht 。如上图所示，给定折射面两边介质相对密度ηi 和 ηo ，则中间向量可以表示为： 其中，当该情况为理想折射时，ht 与法线方向相同。 根据论文中的公式推导（有兴趣的读者可以查看原论文推导过程），BTDF 可以表示为： 由上述公式可以看到，论文中定义的 ft 与 Cook-Torrance 模型中的fr 有相似的形式。其中，都包含了模拟菲涅尔现象的函数 F ，模拟微表面法线方向分布的函数 D ，以及阴影遮挡函数 G 。接下来，我们将逐一介绍 BTDF 中这些函数的定义。 二、F、G、D 函数的具体形式 首先，我们介绍菲涅尔项 F 。论文作者采用了与 Cook-Torrance 模型中类似的菲涅尔项表达式： 其中，c =|i ∙ n|。与Cook-Torrance模型不同的是，g 被定义为与介质密度相关的函数： 当内部全反射发生时，F =1。 对于阴影遮挡函数G，论文作者采用了与 Cook-Torrance 模型不一样的函数：Smith shadowing-masking3。该函数依赖于微表面法向分布函数 D ，最初它是用来计算高斯分布的阴影遮挡，后来被推广到任意的分布函数。Smth G 函数用两个子函数的的积来近似： 其中，G1 是根据微表面法向分布函数 D 推导出来（有兴趣的同学可以从原文查看具体推导过程）。 最后，我们介绍 GGX 微表面法向分布函数 D，以及对应的 G1 函数。在介绍分布函数 D 之前，我们先介绍微表面模型中的微观法线以及宏观法线的概念。由于微表面模型假设物体表面是由许多凹凸不平的微小平面构成，因此这些微小平面的法线与物体表面的法线并不相同。 如上图所示，n 表示物体表面宏观法线方向，也就是我们通常在渲染中用到的物体表面法线方向。m 表示看不见的微小平面的法线方向。函数 D 正是描述了 m 的分布情况。不同的 m 的分布，造成了物体表面不同程度的粗糙度。 2.1 GGX 分布函数 若用 ν 表示任意方向，θm 表示 m 与n 之间的夹角，θv 表示 ν 与 n 之间夹角，αρ 表示控制变量。则 GGX 分布函数 D ，以及阴影遮挡函数 G1 可以表示为： 其中，Χ+ （α）表示阶跃函数，当 α > 0 时取值 1，当 α ≤ 0 取值 0。论文比较了Beckmann1、Phong以及 GGX 分布函数以及阴影遮挡函数在不同控制变量取值时的曲线，如下图所示： 其中，Beckmann 、Phong 以及 GGX 分别用红色、蓝色和绿色线表示。从图中可以看到，Beckmann 与 Phong 分布函数曲线几乎完全重合，GGX 则更窄拖尾更长。 上图是Unity引擎的渲染结果4。其中，左边是 GGX 分布函数渲染结果，右边是 Phong 分布函数渲染结果。在 GGX 的结果中，高光的衰减拖尾更长，视觉上周围泛光的范围更广一些，更加符合实际的反射高光情形。 三、与真实采集数据比较 论文作者利用前人提出的方法，从真实半透明材质中采集了光线透射的数据。然后，分别用 Beckmann1 以及 GGX 的分布函数的 BTDF 进行拟合。论文作者采集了四组数据，ground、frosted、etched 以及 antiglare。其中，各组数据的控制变量取值如下图所示： 每组数据的拟合曲线如下图所示： 从上至下，从左至右，分别是 ground、frosted、etched、antiglare的数据。黑色点表示真实采集数据，Beckmann1 和 GGX 曲线分别用红色和绿色表示。从上面的曲线可以看到，GGX 曲线（绿色）更加贴近真实采集数据。 四、更多渲染结果展示 论文作者通过真实数据拟合的模型控制参数渲染了粗糙表面半透明的结果，并达到了比较好的渲染效果，如下图所示： 其中，左图是用Beckmann1分布函数以及 antiglare 数据参数渲染的结果，中间和右边图是分别用 ground 和 etched 数据参数以及 GGX 分布函数渲染的结果。 五、总结 这篇论文将 Cook-Torrance 模型从模拟粗糙表面反射推广到粗糙表面的透射情况。并且，提出了一个新的微表面分布函数 GGX 。通过对真实采集数据的拟合以及与前人提出的分布函数比较，GGX函数能够更好地拟合真实数据。 六、论文信息 作者介绍： Bruce Walter，康奈尔大学博士毕业，康奈尔大学计算机图形学研究员 Stephen R. Marschner，康奈尔大学博士毕业，康奈尔大学教授 Hongsong Li，北京理工大学，光学专业毕业，光学专家 Kenneth E. Torrance，著名计算机图形学学者，曾经在康奈尔大学机械与航天工程学院工作，目前已退休。 下载链接： http://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html 参考文献： 【1】 P.Beckmann and A. Spizzichino, The Scattering of Electromagnetic Waves from Rough Surfaces, Pergamon Press, New York 1963. 【2】 http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf 【3】 K.E.Torrance, E. M. Sparrow : Theory for off-specular reflection from roughened surfaces. Journal of Optical Society of America 57, 9(1967), 1105–1114. 【4】 https://blogs.unity3d.com/cn/2016/01/25/ggx-in-unity-5-3/ 这是侑虎科技第203篇原创文章，欢迎转发分享，未经作者授权请勿转载。如果您也有任何独到的见解或者全新的发现也欢迎联系我们，一起探讨。（QQ群：793972859） 关于惟学无际 【惟学无际】是UWA在2017年推出的全新研究型专栏，我们将为大家推荐极具实际价值的学术论文，并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许，为有源头活水来 ，希望大家在研发的过程中不仅知其然，还能知其所以然。
PBR渲染管线之所以能够比较真实地表现各种不同的材质，是因为它采用了更加复杂的材质模型。在PBR渲染管线出现之前，我们通常采用的材质模型由三部分组成：环境光（Ambient）、漫反射（Diffuse）以及镜面反射（Specular）。我们采用Lambert模型来模拟漫反射散射，用Phong模型来模拟镜面反射高光。但是这种模型难以模拟出表面不同的粗糙程度造成的不同反射效果，导致它模拟出来的材质在视觉上看起来更加接近于塑料的光滑表面。 PBR渲染管线中采用的是一种叫做微表面（Microfacet Model）的材质模型，它基于物理的观察，认为物体表面由很多凹凸不平的微小镜面组成。这些具有不同大小、方向的微表面在对入射光线进行反射时产生了不同的反射效果，从而使得人眼能观察到不同的材质属性。因此，微表面模型能够更加真实地模拟各种不同的材质，如下图所示： 虽然PBR渲染管线是近几年才被应用到游戏渲染领域，但是微表面模型早在上世纪80年代就在计算机图形学领域被提出。今天介绍的这篇技术论文是于1981年发表在ACM Computer Graphics的文章。这篇论文提出了一个对真实世界材质模拟的数学模型，它就是著名的Cook-Torrance模型。Cook-Torrance模型对计算机图形学材质模型的研究发展具有重要的影响。直到今天，我们仍然可以看到许多游戏引擎的PBR渲染管线中采用Cook-Torrance材质模型的简化版以及它的变种。 在这篇论文中的Cook-Torrance模型出现之前，大部分计算机图形学中模拟物体材质模型的设计思路都是基于几何光学，如：模拟理想漫反射的Lambert模型、利用余弦函数指数函数模拟高光的Phong、以及将grazing angle的高光考虑在内的Blinn等。这些模型能够很好地模拟一部分真实世界的材质，但是仍然有些材质无法模拟。Cook-Torrance模型则不同，它基于的是一个物理现象，即物体表面是由许多微小的平面组成。这些平面的朝向各不相同，而对于光滑的物体，微小平面朝向分布比较统一，对于粗糙物体，微小平面的朝向分布更加散乱。这使得Cook-Torrance模型能够更加通用，并且能够模拟表面粗糙的材质。前人提出的模型在模拟镜面反射以及高光的效果时更像是塑料，而Cook-Torrance不仅能模拟塑料，也能很好地模拟金属等粗糙表面的高光现象。 接下来我们将首先介绍文章中的反射光照模型，即Cook-Torrance模型的通用表达式。然后，介绍高光项的表达式。因为基于微表面物理模型与传统的解析模型最大的区别，就在于对镜面反射高光项的处理不同。基于微表面模型的高光项，引入了更多的考虑因素，如：菲涅尔现象、微表面的朝向分布函数、以及阴影遮挡项，才使得其能够成为更加通用材质模型。 一、反射模型 给定光源、物体表面以及观察者，反射模型描述了光线从光源方向射向物体表面，然后从观察者的方向被反射出去的情况。其中，包含了光的强度以及颜色信息。被反射的光的强度和颜色取决于光源射出的光强度和颜色，以及物体表面的反射能力。通常我们用BRDF（Bidirectional Reflectance Distribution Function）函数来描述物体表面对光的反射能力。接下来我们将介绍文章作者是如何定义这个函数的。 物体表面反射能力函数，即 BRDF 函数，可以定义为：从 L 方向射入的光线有多少从 V 方向被射出。假设入射光为无穷远的方向光，并且光强用 Ii 表示，则从 L 方向入射到 P 点的光能可表示为： 其中，ω 为入射光方向角。若用 R 表示 BRDF 函数， Ir 表示反射光线的强度，则 Ir 可表示为： 其中，s + d = 1 分别表示高光和漫反射系数。如果再加上环境光影响，则上述公式可变化为： 上述公式即为文章中的光照计算表达式。 二、高光项及其中各项表达式 文章作者定义了一个光源方向和视线方向之间的一个向量 H 。如上图所示，给定物体表面一点 P ，以及光源方向 L 和视线方向 V 。则其中间向量可以由如下公式表示： 其中，θ 为 L 和 V 之间夹角的一半。因此， 文章作者假设环境光为一个恒定值，漫反射为理想漫反射，于是 Ra 和 Rd 与视线方向无关。但是高光项 Rs 与视线方向有关。根据微表面模型的定义，物体表面由无数朝向不同微小平面组成，每一个微小平面可以看作一个镜面，对入射光产生镜面反射。因此，只有法线方向与 H 相同的微小平面才会对高光项产生贡献。定义高光项的形式为： 其中，F 为菲涅尔项、G 为阴影遮挡项、D 为朝向分布项。接下来我们将一一介绍这三项的表达式。 首先，我们介绍阴影遮挡项。根据前人提出的模型，G 函数可以用如下公式表示： 朝向分布函数 D 描述了微小平面中朝向 H 方向的平面的比例。在前人提出的模型中，比较著名的是Blinn和Beckmann提出的模型。Blinn模型的表达式为： 其中，C 为一个常量。Beckmann模型的表达式为： 在这两个模型中，α 表示 H 和 N 之间的夹角，m 则决定了高光的分布范围。m 取值较小时，微小平面的朝向比较统一，因此高光的范围比较窄。反之，则高光的反射范围比较广，如下图所示： 左边两幅图从上到下是当 m = 0.2 和 m = 0.6 时Beckmann模型的反射分布，右边两幅图从上到下是当 m = 0.2 和 m = 0.6 时高斯模型的反射分布。从上图可见，不同的 m 取值代表了不同的表面粗糙度。而当物体表面具有多种不同粗糙度时，分布函数 D 可以用不同取值的 m 的加权平均： 根据前人提出的菲涅尔公式，菲涅尔项 F 可以表示成为： 其中，c = cosθ = V·H，g2 =n2 +c2-1。当θ = 0 时，c = 1，g = n。则有： 于是，可求得： 至此，我们介绍完了Cook-Torrance模型中高光项的所有内容。接下来我们将对文章中的渲染结果进行展示。 三、更多结果展示 文章作者用不同的参数渲染了不同材质的物体。如下图所示，不同的模型对应了不同取值的 s ，d 和 m。 渲染出来的结果如下图所示： 下图是包含多种材质的物体渲染结果: 如上图所示，两幅图都是用Cook-Torrance模型渲染的结果，左边是一个塑料材质的黄色瓶子，右边是一个黄色的铜质瓶子。从上图可以看到，Cook-Torrance模型可以很好地模拟物体表面不同程度粗糙度的光照情况，因此它不仅能渲染出塑料材质表面轮廓清晰的高光，也能渲染出金属表面模糊的高光效果。而这一特性却是传统的模型无法达到的效果。 四、总结 这篇论文基于微表面模型，提出了一个新的材质模型。相比于前人提出的模型，该模型考虑了对菲涅尔现象、阴影遮挡以及微表面朝向分布等因素对高光项的影响。从而使得该模型能够很好地模拟粗糙表面的高光现象。对于不同粗糙度的参数取值，该模型能够更加通用地模拟广泛的材质。 五、论文信息 关于论文作者： Robert L. Cook，著名计算机图形学学者，毕业于康奈尔大学，是Pixar动画电影公司著名渲染引擎RenderMan的创立者之一，目前已退休。 Kenneth E. Torrance，著名计算机图形学学者，曾经在康奈尔大学机械与航天工程学院工作，目前已退休。 下载地址： http://inst.cs.berkeley.edu/~cs294-13/fa09/lectures/cookpaper.pdf 这是侑虎科技的原创文章，欢迎转载分享，未经许可请勿转载。 关于惟学无际 UWA在2017年推出的全新研究型专栏，我们将为大家推荐极具实际价值的学术论文，并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许，为有源头活水来 ，希望大家在研发的过程中不仅知其然，还能知其所以然。
基于物理的渲染—迪士尼的渲染模型
今天给大家介绍的是一篇关于基于物理渲染（Physically Based Rendering）的技术论文。该篇论文是在2012年Siggraph图形大会上，由迪士尼公司分享的关于PBR技术的报告。PBR是最近游戏渲染领域中比较高级的渲染管线。相比于传统基于Lambert以及Phong模型的渲染管线，PBR采用更加真实的材质模型，能够更好地表现物体表面不同粗糙度带来的不同反射效果，从而能够更贴近真实地模拟各种不同的材质。采用PBR的材质能更好地模拟金属、非金属以及不同粗糙度等材质对光的反射效果。虽然PBR在最近几年才被用于实时的游戏渲染，但是早在几年前它就被用于离线的电影渲染中。而这篇论文正是基于前人提出的材质模型，通过对真实测量的材质数据进行分析对比，提出新的材质模型。最终，迪士尼将这一方法应用到他们的电影渲染中。 我们推荐这篇论文，希望对PBR渲染管线原理有兴趣的开发者，能够通过此文加深对PBR的理解，从而能够在项目开发中更好地利用PBR管线，达到满意的渲染结果。 如上图所示这是迪士尼公司出品的动画电影 Wreck-It Ralph 中的截图。可以看到人物头顶的金属皇冠、非金属衣领都能达到贴近真实的渲染效果。 不同于前人提出的基于物理的材质模型，这篇文章的材质模型在设计之初并不是以物理正确为原则，而是以让美术设计者更容易理解和使用为原则。文章作者认为是否是物理正确并不重要，重要的是能达到美术设计者的需求并且使用方便、容易理解。因此，他们提出了5个主要的设计原则： 使用方便、便于理解比物理真实更重要； 可调节参数越少越好； 参数的值都必须在效果可接受的范围内归一化到（0～1）之间； 参数可以被赋予超过其实际可接受范围（0～1）之外的值； 所有参数组合的效果都必须是可接受并且稳定； 基于这5个原则，文章作者提出了用11个参数表示的材质模型，根据不同的参数，可以渲染出不同的材质，如下图： 从上图可以看到，经过对参数的简化，文章提出的材质模型用了11个参数即可非常真实地模拟出金属、非金属以及不同粗糙度的材质光照结果。 文章作者基于上述的5个原则以及对真实测量数据的观察结果，对传统的微表面材质模型中的各项函数进行修改。接下来我们首先介绍传统的微表面模型的通用表达式，然后对其中的每一项函数进行说明，并介绍在文章中采用的各项函数的表达式。 文章中的模型采用了微表面模型的通用形式，该通用形式最早出现在Cook-Torrance模型中： 其中，向量 l 和 v 分别表示入射光和视线方向，向量 h 表示 l 和 v 之间的中间向量，它们与法线方向的夹角分别用对应下标的 θ 表示， θd 表示 l 和 v 之间夹角的一半。diffuse 表示漫反射函数，D 表示微表面分布函数，F 表示菲涅尔系数， G 表示阴影系数。文章中模型的 diffuse 函数是： 其中，roughness 表示粗糙度。对于微表面分布函数 D，目前最好的分布函数是著名的 GGX 函数。但是，文章作者采用了比 GGX 更为通用的形式 GTR （Generalized-Trowbridge-Reitz）： 它与 GGX 的区别在于， GGX 为上式中 γ= 2 时的结果。文章作者采用了两个不同的 GTR 函数来拟合高光项，分别采用 γ= 1 和 γ= 2 。α 的取值为 roughness 的平方，c 为一个常数用于调节整体缩放。对于菲涅尔项 F，文章采用了 Schlick 的公式： 其中， F0 为一个常量，其值取决于材质的透射系数。对于阴影系数 G ，文章作者采用了 Walter 在其论文中根据 GGX 推导的 G 公式，并将公式中的 roughness 从 [0, 1] 缩放到[0.5, 1] 范围。做这个缩放的原因是，根据与实际测量的数据对比以及美术设计者的反馈，高光在 roughness 值较小时显得过于亮。虽然这个缩放的过程使得模型不再物理准确，但是它符合了美术设计者的需求，这也正是这篇文章最主要的设计原则。 在下文中，我们将为大家介绍文章的实验部分，也就是如何对真实采集数据进行观察，并设计材质模型的。大家可以根据兴趣继续阅读，也可直接跳到后面查看结论和未来工作部分。 一、可视化真实采集的BRDF数据 文章作者使用 Matusik 在2003年发表的论文中的数据集，该数据集可以免费从 Mitsubishi 实验室官网下载（www.merl.com/brdf）。该数据集包括了木材、金属、石头、塑料、橡胶、纤维等真实材质的数据。每种材质根据不同入射角和出射角度进行采样，如下图： 文章作者开发了一套展示真实测量材质数据以及用 BRDF 模型渲染的结果进行比较的系统，该系统可以在 GitHub 上免费下载（github.com/wdas/brdf），如下图所示： 其中，可以选择看真实测量数据（ImageSlice），或者是渲染的数据（Lit Object/Lit Sphere）并进行对比。 二、 从真实数据观察的结果 根据文章作者对漫反射表面的观察发现，在 Lambert 模型的假设前提下，单纯的漫反射并不带有方向性，反射光在每一个反射方向上都是相同的值，但是很少有物体表现出 Lambert 模型的假设前提。特别是在视线与法线接近垂直的区域（grazingangle area），有的表现为快速衰减，有的表现为亮度增加，而这与物体表面的粗糙度有密切联系，如下图所示： 从左到右是粗糙表面、光滑表面以及Lambert 模型渲染的漫反射结果，可以看到在球的边缘处，不同程度的粗糙度表现出不同的效果，而Lambert 模型并不能很好的表现出这一特点。虽然前人提出的模型，如：Oren Nayer 以及 Hanrahan-Krueger，有对此现象作一定程度的模拟，但是并不足以表现这个现象。因此，文章作者在设计材质模型漫反射部分时将这一现象考虑在内。 根据文章作者对高光现象（对应于微表面分布函数）的观察发现，真实采集的数据的高光拖尾比传统的材质模型，如：Beckmann、Blinn Phong、Gaussian 等，都要长一些。在与实际测量结果的对比中，GGX的渲染效果最接近，如下图所示： 左边是真实测量的结果，中间是用 GGX 模型渲染的结果，右边是用 Beckmann 模型渲染的结果。因此，文章作者在提出的材质模型中采用 GGX（GTR γ= 2 时）与 GTR γ= 1 时函数混合作为高光项 D 。 根据文章作者对菲涅尔现象的观察发现，所有的真实测量的材质，在入射光线与视线之间夹角接近180度时，都会出现高亮的现象。例如：上图中，距离视点越远的河面反射的角度越大，反射的光线的亮度就越亮（图中1、2、3从远到近，1最亮）。这一现象正是被 Torrance-Sparrow 微表面模型所观察并在其模型中提出。虽然模型中的被除数项在 grazing angle 区域趋近于无限，但是由于G 项衰减抵消，不会出现问题。文章作者最终采用 Schlick 以及Walter 推导的结果来作为文章中材质模型的 F 和 G 函数。 三、更多的结果展示 下面是利用文章中算法渲染的Wreck-ItRalph动画电影中的一些效果图展示。 四、结论与未来工作 今天介绍的这篇论文，通过真实测量的材质数据进行分析对比，对已有的微表面模型中的各项做了相应修改、简化模型参数，提出新的材质模型。但是，提出这一模型的原则并非基于物理真实，而是对于美术设计者友好，并方便他们使用。虽然这篇文章中的材质模型能够表现出更加广泛的材质光照反射现象，但是它并不能模拟次表面散射的光照。因此，作者希望在未来工作中解决这一问题。 五、论文相关信息 关于论文作者 Brent Burley，1996年加入迪士尼公司，目前是迪士尼动画工作室首席软件工程师，负责产品中渲染软件开发。主要成果有：开发了一款开源的、用于细分曲面的纹理映射系统Ptex，将基于物理的材质模型用于产品的渲染。 下载地址 http://blog.selfshadow.com/publications/s2012-shading-course/#course_content 这是侑虎科技的原创文章，欢迎转载分享，未经许可请勿转载。 关于惟学无际 UWA在2017年推出的全新研究型专栏，我们将为大家推荐极具实际价值的学术论文，并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许，为有源头活水来 ，希望大家在研发的过程中不仅知其然，还能知其所以然。
惟学无际是UWA在2017年推出的全新研究型专栏，我们将为大家推荐极具实际价值的学术论文，并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许，为有源头活水来 ，希望大家在研发的过程中不仅知其然，还能知其所以然。 今天给大家介绍的是一篇以画面质量与设备耗电量为引导的渲染技术论文，该论文发表于2016年著名的Siggraph图形学大会。一般来说，图像渲染质量的提升往往意味着每个像素都要进行更多的数据计算，从而造成设备耗电量的增加。对于对耗电量非常敏感的移动设备来说，我们往往需要在画面质量与设备耗电量间进行权衡。如何使用尽可能少的耗能来渲染出高质量的画面，这几乎是每个游戏团队都在思考的问题。因此，我们推荐这篇论文，希望文章中作者对于该问题的思考和提出的解决方法可以对你的项目有所帮助和启发。 先来看一下本文方法的效果图： 我们知道，渲染参数（比如Shadow Mapping、SSAO的相关参数以及图像分辨率等参数）决定了图像质量。上述效果图的意义如下： 上图左侧部分是同一场景在不同渲染参数下得到的不同质量的三幅图像，分别为最低质量的渲染图像、本文使用根据耗电量优化后的参数渲染出的图像、最高质量的渲染图像； 中间部分是三幅图像的细节比较，可以看出在图像质量方面（高光、阴影、反射等细节），本文方法得到的渲染效果与最高质量的效果相差不大，并且远好于最低质量的渲染效果； 右侧图表则是各个方法在耗能和渲染质量上的数值比较。下方的图表表示不同方法渲染质量的差距，可以看到本文方法的画质（橙色）与最高画质（绿色）相差不大，但远高于最低画质（蓝色）。而上方图表表示三种方法的耗电量统计，在画质相差不大的情况下，本文方法进行渲染的耗电量（橙色）远低于最高画质的耗电量（绿色），比最低画质的耗电量（蓝色）也高出并不多。 综上所述，本论文方法可以在基本保持渲染质量的情况下，让设备的耗电量大幅降低。根据论文中描述，其具体可以减少30%~50%的电量消耗。 接下来我们来概括一下本篇论文的渲染框架。设备输出画面的视觉效果与渲染参数有关，我们将一组渲染相关参数（Shadow Mapping，SSAO，Resolution等）的组合记为s。除了渲染参数，画面展示的场景内容还与相机的位置与朝向有关，将其记为c。这样，渲染出的效果图像就可以看作是s与c的函数，记为f（s，c）。场景渲染时，在给定相机位置与朝向c后，确定一组渲染参数s，设备便能够根据s与c输出画面f。前面提到，渲染参数决定了图像的质量，同样也决定了耗电量的多少。这样，渲染的关键问题就变为如何寻找一组合适的参数，使设备能够在满足低耗电的前提下尽可能地保证画质。文章通过一个优化过程来解决该问题。根据较高画质和较低电量消耗这两个目标，可以构造出一个优化方程组，对其求解便可以从众多可能的渲染参数组合中确定一组最优的组合，记作Sopt。通常求解Sopt难以做到实时，因此本文使用了预计算方法：对于每个可能的相机位置/朝向c，预先建立相应的帕累托曲线P（计算耗时，但算好后可以根据P快速找到Sopt），存储（c，P），之后在实际运行时，根据当前的相机位置，在查找表中通过临近的c查找对应的P，利用P再加上用户指定的图像质量和耗电量要求就够快速的搜索出Sopt，完成实时渲染。 在下文中，我们将为大家介绍该文章的大致实现步骤，大家可以根据兴趣继续阅读，也可以直接跳到后面查看具体的效果比较：） 一、算法框架 渲染的关键是确定合适的渲染参数，文章将参数s的确定转化为一个优化求解过程。由于相机不同位置c和渲染参数s所构成的参数空间是非常巨大的，并且需要优化求解的是一个多目标方程（降低电池消耗和提升渲染质量），因而本文作者尝试采用一定预处理技术来完成这一目标。概括来说，要使本文算法达到实时，关键部分有两个： 如何有效地预处理场景中不同相机位置和不同渲染参数所产生的电量消耗以及渲染质量； 如何实时地采用这些信息。 算法框架如下图： 其中绿色部分为预处理部分，黄色为实时渲染部分。在预处理阶段，文章采用了八叉树对相机可能的位置空间进行分割，在每个树节点，使用遗传算法（Genetic Programming）搜索所有可能的渲染参数组合，得到该相机位置对应的帕累托曲线P（Pareto frontiers），并将相应的（c，P）对进行存储。对于空间分割的细度，对每个树节点可以通过比较相邻节点的帕累托曲线相似度，来判定是否需要继续分化，从而保持足够的采样点来确保渲染所得图像的连贯性。 在实时渲染阶段，只需根据当前相机位置查找所有附近八叉树节点的帕累托曲线，并根据用户给定能量预算或者渲染质量差预算，在各个帕累托曲线上快速找出对应的渲染参数并进行差值，从而得当最优的渲染参数。接下来将对参数优化求解过程进行略微详细的介绍。 二、问题定义 定义渲染函数为f（c，s），即给定相机参数c以及渲染参数s，输出渲染图像f。其中f包括所有前向渲染和延迟渲染的最终结果。假设我们有一个最优画质设置sbest，那我们就可以定义一个与最优质量图像的画质差： 其中，x，y为图片中的坐标变量。类似的，我们可以定义一个电量消耗关于相机参数c和渲染参数s的函数p（c，s），这样我们就可以定义以下优化方程式： 其中pbgt和ebgt分别为给定的电量消耗阈值（预算）以及画质差阈值（预算）。以上公式的意义分别是，在给定的电量预算中，找出画质最优的渲染参数，以及在给定画面质量预算时，计算出最节省能耗的渲染设置。文章的渲染关键就是在用户给定预算（电量或者画质）时，找出最优的渲染参数。 三、解决方案 由于该问题涉及两个目标，画面渲染质量和电量消耗，为了更有效地解决这个优化问题，文章提出了一个偏量排序策略（Partial Order），即将一个渲染设置优于另一个的定义为：要么有更好的渲染效果并至少保持一样的能耗；要么更节省能耗并保持至少一样好的画质。基于此，文章使用帕累托优化（Pareto－Optimal），引入帕累托曲线（Pareto frontiers）缩小了整个优化空间，即在帕累托曲线（Pareto frontiers）上的渲染设置肯定比其他参数空间上的点更优，这样就能快速的求出给定预算下的最优渲染设置了。如下图所示，只需找到离预算线最近的点就是最优的结果。 帕累托曲线的计算是相对耗时的，为了可以实时计算出最佳解决方案，文章采取了预处理的方法来实现，并提出了一个合理假设，即：在一定的相机参数范围内，优化的帕累托曲线会比较相似。基于此，文章采用了八叉树来对整个场景相机位置进行划分，并给出了一个自适应分割空间方法如下图： 如上左图，每个小方格都是一个相机位置／朝向采样，其中o表示位置，v表示方向。为方便说明，这里使用2D表示并有4个方向。通过遗传算法先计算场景四周位置每个方向的帕累托曲线后（图中o0-o3），比较他们同一方向的帕累托曲线的差异（如图中红色部分），如果大于一定阈值，就分出一个子树（图中蓝色部分），循环往复，直到所有数节点间差异都小于阈值。而小于阈值部分，便继承父节点的帕累托曲线，如图中的虚线部分。而在运行时，首先根据运行相机的位置找到八叉树中的对应叶子节点，然后根据相机方向对应的投影面积最大的预算方向，如右图中，对应位置是o7以及v3。从而得到该运行时相机的近似帕累托曲线。在具体实现中，会对参数的结果进行插值，以避免画质的突然变化。 四、效果展示 在实验部分，文章主要测试了4个场景：Valley, Hall, Elven Ruins以及Sun Temple。如上图所示，和最节省模式相比，该方法的画质差是很小的，而和最佳画质的能量消耗相比，该方法的能量消耗和最低画质在一个等级上。 在该算法的统计数据上，如上图，我们可以看出，在一个667.9K个三角形512MB大小的场景下，最终的预处理数据仅为18.1KB，这表明该方法在实际应用中是较为可行的。然而，31.7K三角形，就需要35.3个小时（能量消耗测试需要具有统计意义，每次采样文章使用10秒钟时间进行）的预处理，如果进一步降低预处理的时间，文章作者将其列为了将来进一步完善的工作。下图为Valley，Hall以及ElvenRuins场景示意图以及统计图，可以看出该方法的画质几乎和最优化质在一个水平上，而能量消耗却很少。 五、结论 本文就设备的渲染耗时问题进行了深入的研究，并结合具体的实际案例，验证了本文提出的方法非常有效。该论文所提出的解决方案主要有以下三个特点： 能够在渲染质量与能量消耗方面做出一个最优的权衡； 用户可以指定需要满足的画面质量目标或者能量消耗目标； 通过少量的预处理数据，即可在实时渲染中得到应用。 六、论文相关信息 关于论文通讯作者 王锐，浙江大学教授，博导。2007年浙江大学数学系博士毕业，2008年起在浙江大学计算机科学与技术学院CAD&CG国家重点实验室任教。长期从事计算机图形学绘制、虚拟现实方面的研究工作，在快速/实时全局光照明绘制、光场传输采样的理论与方法、绘制流水线设计与优化等方面取得了具有国际先进水平的研究成果。在计算机图形学的顶级期刊/会议ACM Transaction on Graphic及SIGGRAPH，SIGGRAPH Asia发表多篇论文，在IEEE TVCG, CGF，C&G，TVCJ，EG，PG等国际知名期刊和会议共发表论文三十余篇。现为国际知名期刊CGF的编委。 作者个人主页 http://www.cad.zju.edu.cn/home/rwang/ 论文下载地址 http://www.cad.zju.edu.cn/home/rwang/projects/power-optimization/power.html#powerparam 这是侑虎科技第189篇原创文章，欢迎转发分享，未经作者授权请勿转载。如果您也有任何独到的见解或者全新的发现也欢迎联系我们，一起探讨。（QQ群：793972859）