如何更快地渲染?深入了解 3D 渲染性能的指南
本文将带您从场景内部灯光、用料、反射、材质等方面的优化,提升场景渲染的速度。
一、灯光
每个发光器,无论是发光材质的物体还是实际的发光物体,都会向场景添加更多必须在渲染时进行追踪的光线。
尤其是在您可能会在大多数场景中使用的“全局照明”中,每种光线都会产生在场景周围反弹几次的光线–而这些光线中的每一种都必须由 GPU 或 CPU 计算。
现在,这是东西:
在某些情况下,添加光源可以加快渲染速度:如果您使用的是 GI,并且图像中有很多暗区域,而这些区域都不容易直射光线,那么添加另一个(非常暗)的光可以使这些区域变亮。快速清除那些嘈杂的像素。
添加灯光以便直接照亮您的主体,可以使渲染速度非常快。只有在必须几次左右反射才能达到目标时,或者如果它们本身具有更复杂的性质时,灯光才会真正变慢。
例如,区域光在计算上是昂贵的,因为光线跟踪器必须采样很多光线才能覆盖区域光的整个区域,所以还要确保生成的阴影很柔和。
与点光源相比,面光源是主要的减速器——尤其是大面积照明时。
尽可能尝试使用门禁灯,尤其是在照亮通过窗户照亮的室内场景时。门户照明比区域照明更高效,并且渲染速度更快。
尽可能使用聚光灯和非光线跟踪的阴影贴图,柔和阴影。使用这些可以更快地计算出软阴影,并且可以在不改变场景外观的情况下极大地加快渲染时间。
使用 HDRI 或天体在室外照明中渲染场景,由于您从一个完整(或一半)的圆顶获得均匀的照明,因此 Sun 的速度通常非常快,这意味着您的光线不必为了反射一切而进行大量反射。
如果您的 3D 软件和渲染引擎具有限制灯光反弹和灯光范围的功能,请这样做。让您的场景主体受到非常远的光线的影响,或者被其他光线阻挡/很难到达的光线是没有意义的。
必须多次反射才能到达场景主体的光线所发出的光线,或者已经衰减到几乎不可见的光线可能会在渲染中引入大量噪点。
有时,您可以只使用“渲染”或“项目标签”来限制灯光应照亮的水平以清除噪音,来排除任何不必要的内容。
二、用料
有很多“材质特征”可以减慢渲染速度,毕竟,“材质”构成了场景的整个“表面”区域。
照明可以与场景材质进行交互的三种基本方式。光可以是:
反射(例如镀铬)
折射(例如玻璃)
部分被吸收,分散和反射(例如皮肤)
还记得我们所说的保持场景中尽可能少的光线和光线反弹以更快地渲染吗?材料是成倍增加必须计算的射线数量的主要因素。
任何 Material 属性会增加场景中的光线数量或需要清除许多样本,这会使渲染速度变慢。
让我们看一些主要的罪魁祸首:
光面反射和折射
让光线从铬球反射(硬反射)是您在 3D 中最简单的操作。
这是一个带有硬反射的 Chrome Ball 并排显示,并且需要分配样本来清除图像中的噪点(白色=更多样本,黑暗=更少样本):
拿这个镀铬的球并使反射变柔和(有光泽),您将创建大量必须计算的新射线。现在,根据反射的柔和度,入射光线会在各个方向上均匀散射。
渲染引擎必须计算的采样和光线越多,完成渲染所需的时间就越长。
这同样适用于光泽折射。光滑的反射和光滑的折射的结合将进一步增加渲染时间。
现在,我并不是说不要使用光滑的折射或反射-它们是大多数材料的组成部分,但是当您使用它们时,请确保尽可能优化它们。
以下是优化折射和反射的方法:
限制其射线反弹(跟踪深度)
使用截止阈值进行优化
当您的反射或折射是光滑的(模糊的)时,您实际上无法在反射或折射中辨别出细节,我们可以利用它来发挥我们的优势。
由于材质中的反射/折射场景非常模糊,因此我们无法判断反射/折射场景是否 100%准确,这意味着我们可以降低折射/反射场景的复杂性,而无需任何人注意。
通过限制走线深度,我们告诉特定的光泽材料仅反射或折射其他对象,而不反射那些对象自己的反射或折射(达到一定数量的深度/反射)。
这意味着我们可以节省很多射线,因为我们人为地限制了跟踪深度。我们可以在大多数渲染引擎中执行此操作,或者直接在材质设置中执行此操作,或者有时您需要将渲染标签应用于某些对象才能使用此功能。
这是 Redshift 渲染引擎中的外观:
我们在上图中看到的另一个优化是“截止阈值”-基本上,这是告诉渲染器仅考虑会改变像素外观的光线,而不是定义的阈值。
看起来合乎逻辑,不是吗?
它仅应在对渲染产生明显影响的东西上使用计算资源。
问题是,默认情况下,这些阈值是如此之低,以至于它们根本不会影响您的渲染时间。您必须增加阈值才能充分利用它。试一试,看看有什么区别。使用这些可以加快光泽反射和折射。
当然,您也可以在硬反射或折射上使用它们,但是由于在硬反射中一切都非常清晰,因此您可能会注意到截止点发生得更快。
材质凹凸/法线贴图/位移贴图
还记得光泽反射如何增加材料产生的射线数量以及清除噪声所需的样本数量吗?
在这方面,使用凹凸贴图,法线贴图或位移贴图非常相似。由于这些贴图试图伪造网格细节,因此入射光线也被它们散射。
细节越精细,产生的光线越多。即使您的网格只有几个多边形(即一个多维数据集),如果您在其顶部有一个复杂的凹凸贴图,该凹凸贴图会将光线散射到整个位置,则渲染速度将大大降低。
材质纹理/位图
如果不使用一些出色的位图/纹理,几乎无法创建 3D 场景。它们会为您的网格物体添加细节,以至于大多数情况下要进行建模会花费太多时间。
确保您的纹理分辨率不会过度使用它。在整个场景中拥有一堆 8k 纹理,即使 2k 或 1k 纹理就足够了(考虑到对象的屏幕尺寸),渲染引擎也很难在整个场景中工作。
评论