作为一个设计师,每个人都希望自己的作品渲染得更快。几乎完成了一个项目,所缺少的最后一步只是最终渲染,如果渲染速度够快,你就可以轻松的在项目交接的日期内完成作品并交给客户,但是渲染是个复杂的过程,会遇到很多渲染慢和渲染卡顿的问题。比如在截止日期前24小时,你有一个 1000 帧的项目,不管你怎么看,每帧 5 分钟,你根本无法及时完成。
渲染慢的原因很简单:3D 场景很复杂,没有一个场景的外观和工作方式与另一个场景完全相同,并且返回当前项目以使其渲染速度更快,这可能太耗时而无法让您按时完成最后期限更近。
这时候如何提高渲染就成为了首先考虑的问题了,阅读这篇文章,这里有很多的方法技巧会让你更快的渲染。
提高渲染速度的方式
无需大量场景更改即可让您更快地渲染的东西:
有时您无法对场景进行任何更改,但仍希望尽可能加快最终渲染速度。您可以执行以下操作:
更快地渲染需要更改场景的东西:
如果有一个共识可以应用于所有场景优化,那就是:仅使用您绝对需要的尽可能多的场景组件和元素。更多的东西可能在视觉上几乎没有区别,但可能会花费你大量的渲染时间。
多边形、光线、样本、灯光、细分……使用您可以选择的绝对最小值来实现您的外观。
无论如何,这是本节的概述:
当然,这个概述只是暗示了什么是可能的,您可能需要一些更深入的信息来完全理解如何实现上述内容。如果是这种情况,请继续阅读或跳至您最感兴趣的部分。
在上面的列表中,我只列出了适用于大多数用户的最重要的部分。不过,整篇文章中有一些隐藏的宝石,这可能正是您所需要的。
哪些渲染引擎可以优化?
优化场景和渲染设置的指导原则可以应用于所有渲染引擎,因为它们都基于非常相似的功能。
GPU 渲染引擎(如 Redshift、Octane、Cycles)或 CPU 渲染引擎(如 V-Ray、Arnold 或 Corona)都从您的 3d 场景中获取信息。众所周知,大多数渲染引擎都可以插入许多不同的3D 软件,无论是 Cinema 4D、3ds Max、Blender 还是其他任何软件。
这让我们很容易理解所有这些应用程序及其工作方式之间必须有一个共同点,这种相似性也让我们可以全面应用渲染优化。
如何更快地渲染概述:
我将这篇文章分为两个主要部分:
您会发现内部渲染因子与要优化/更快渲染的场景密切相关,需要更改场景元素和渲染设置。
另一方面,优化外部渲染因子根本不需要或几乎不需要更改您的场景。这些是外部因素,例如整体硬件性能,或渲染管理器接收场景的方式。
您可以优化两者中的任何一个并实现一些不错的加速,或者您可以解决内部和外部因素并看到您的渲染时间进一步减少!
如何更快地渲染——方法论
有两种方法可以解决这个问题:您可以盲目尝试下面的一些项目并希望它有所帮助,或者分析您的场景和环境,然后应用正确的修复。
后一个选项所需的步骤很简单:
- 找出您的场景渲染如此缓慢的原因
- 修复它
渲染慢与什么有关:
您的场景很可能已经优化得非常好,您的硬件是最好的——但是您对拥有数百万棵树木的森林的 25K 全景渲染仍然需要 5 分钟?
这让我们回到了加速场景的两个步骤,我们将其更改为:
- 找到需要最少时间和金钱来解决的最大瓶颈
- 修复它
不要在不考虑视口或渲染性能的情况下构建场景,仅在点击最终渲染按钮时进行优化 –
能够呈现速度就越快用于遍历更多的时候,而你对你的工作场景,提高质量,减少花费的时间,最终使你成为一个更具竞争力的3D艺术家谁能够在长期运行要求更高的利率或更多的薪金。
渲染引擎的工作原理
在本节开始,我们将从高级别的渲染引擎的工作原理以及增加渲染时间的因素开始,以便能够更好地确定我们必须更改哪些内容以使我们的场景渲染速度更快:
为了简单起见,让我这样说 – 一般来说,我们在任何给定场景中只有 3 种类型的对象:
事实上,我们真实的物理世界也是类似构建的,我们的眼睛有时就是相机。渲染引擎“渲染”或计算 3D 场景的外观,与我们真实的物理世界非常相似。
光源(如太阳)发出的光会从一个或多个表面反射,直到到达我们的眼睛,产生的光使我们以不同的方式看到物体。物理在现实世界中所做的事情,必须在渲染时由您的计算机精心“计算”。
以从表面反弹的光线为例。计算机必须计算以下一些内容:
这只是一个简单场景中的单一光线。想象一下,必须为场景的每个表面计算很多很多光线。
幸运的是,PC 的 CPU(处理器)和 GPU 非常擅长进行此类计算——比我们人类要好得多——尤其是 GPU(图形卡或视频卡)是为此类图形和“光线追踪”定制的”的计算。
虽然我们可以更深入地了解渲染引擎的工作原理,但上面的描述应该已经足以分析和优化我们的场景以更快地渲染:
由于渲染引擎所做的大部分工作是在场景中发射一堆光线,然后从物体上反弹,我们已经可以推断出以下内容:
“无噪音”:这是一个新术语,我们将快速了解一下:
你很可能以前见过它。以低质量渲染的图像不平滑或不清晰。它们到处都是噪音或颗粒,因此难以辨别细节。
任何图像(渲染与否)都由像素组成。渲染引擎为每个像素取一个样本。
渲染引擎,为了简单起见,我们将其放置在场景的相机内,通过每个像素发射一条光线,然后知道该特定像素后面是什么。这也称为“取样”。
通过像素发射光线并击中木头,那里有木头。通过像素发射光线并找到金属,图像的那个区域有金属。足够简单。
但是,这是重要的部分:像素不是一维的,而是二维的。基本上,每个像素都是一个二维正方形。一堆方块在一起就是一个图像。
那么为什么这很重要呢?因为光线或样本,我们通过像素拍摄以查看后面的 3d 场景中的内容是一维的。为了获得像素整个正方形区域后面的平均值,我们必须通过该像素和每个像素发射多条光线(采取多个样本)。
以这个例子为例:
如果我们只通过 X 射出一条光线并击中橙色三角形,则渲染引擎认为整个像素都被橙色三角形填充/覆盖,而实际上它只覆盖了该像素的右下部分。
通过对该像素进行多次光线/采样,我们会知道该像素的 90% 实际上是白色/灰色而不是橙色(有些也是绿色)。因此,通过采集多个样本,我们可以扣除该像素的平均颜色。
如果我们每个像素只使用一个或少量样本,我们并不确切知道整个像素后面是什么,就在我们的样本取自的一维点后面。
结果:我们的错误阈值很高,我们得到了一个嘈杂的图像。
的更多样本,我们通过我们的每一个像素的拍摄降低无错误,或噪声阈值和更低的颗粒感我们得到的图像将成为。
请记住,所有渲染引擎都有自己优化某些事物的方法,并且有一些方法可以伪造或优化某些过程,但通用功能可以全面应用于任何渲染引擎。
您从场景中获取的样本越多,结果就越平滑。
我们也可以这样说:如果您的场景中没有太多事情发生,与您的场景中充满复杂对象、复杂材质或复杂照明时相比,您将能够获得更少的样本。
如何更快地渲染
内部因素:优化您的场景
足够的理论,让我们渲染得更快。我们现在将研究的一些优化方法的很大一部分将涉及降低场景的复杂性,因此我们可以减少样本数量,同时仍然获得无噪声的结果图像。
还记得减少渲染时间所涉及的两个步骤吗?第一步是找出实际导致速度下降的原因。
先找到瓶颈——排除原则
找出导致速度变慢的原因的最简单方法是利用排除原则。
举个例子:如果我们的场景中有一百个对象,其中一个对象导致渲染速度变慢,找到这个对象的最快方法是通过排除原则。
通过排除事物,您可以将它们排除在等式之外。排除场景对象?还是渲染慢?您的场景本身很可能没问题。减少了渲染设置?还是渲染慢?您的渲染设置很可能没问题。换了 CPU 或 GPU?还是渲染慢?CPU 或 GPU 很可能与您的渲染速度下降无关。
请记住,减少可能导致速度变慢的因素以找到源头,然后我们可以进行修复。
但它们并不总是有效,所以尝试学习自己分析和剖析场景的技能,这样你就再也不需要外部帮助了。
首先找到瓶颈——检查您的样品
几乎每个现代渲染引擎都能够可视化为每个像素采集的样本数量。这是 Redshift 中的样子:
暗像素表示样本数量较少,亮像素表示样本数量较多。能够渲染您的图像并一目了然地查看哪些区域需要最多的样本,可以告诉您很多关于您的场景以及从哪里开始优化的信息。
样本分布可视化会告诉您渲染设置是否配置不当,或者是否存在某些场景对象、材质或照明需要太多样本才能清除。
首先找到瓶颈——检查你的视口
很多时候,您只需要在“线模式”中检查您的视口,以便在视口中显示所有多边形轮廓。
以下面的场景为例。一目了然,哪些对象有很多多边形,应该有一些减少的潜力:
视口屏幕截图设置为(隐藏)线视图
首先找到瓶颈——检查你的场景和对象信息
每个 3D 应用程序都可以显示整个场景或您选择的对象的多边形计数。这是在 Cinema 4D 中的样子:
还记得之前的排除原则吗?首先检查整个场景的多边形计数。如果它看起来很高,请选择一半的对象并再次检查。减少对象选择的数量,直到找到具有不合理的高多边形计数的对象并优化它们。
如果您有一个包含几个主要对象组的结构良好的场景,您也可以单步执行这些并在层次结构中向下工作,这可能会更快。
减少多边形的数量
渲染性能的一个重要因素是场景中的多边形数量。根据经验,您可以说对于大多数场景,多边形越少,渲染速度就越快。
它们是必不可少的,但我们确实希望尽可能地优化它们。过程很简单:减少多边形的数量,直到您开始在渲染中看到视觉差异。
让我解释一下:你需要一个每边有 100 个细分的参数立方体吗?当每一边只有一个多边形时,它看起来会有什么不同吗?不会!
让我们快速浏览一下:
原始 格
具有过多多边形的原始 格很快就会成为渲染缓慢的原因。原始 格的问题是,它们很难优化。
除了向它们添加一些减少多边形的修改器,这通常会严重破坏 格的 UV 布局和多边形流,除了手动减少多边形和重新拓扑之外,您真的无能为力。当然,如果你有这些原始 格的源文件的话就好多了!
您的客户是否向您发送了 STEP 或其他 CAD 数据,您必须将这些数据转换为多边形才能在 3D 场景中使用它?很容易指定应该从中生成多少个多边形,可以尝试一下。
在你的场景中有一个用ZBrush雕刻的角色,有数百万个多边形吗?也许您可以获得源文件并使用细分修改器,而不是将疯狂的分辨率直接烘焙到 格中。这样您就可以根据角色的屏幕尺寸调整细分级别。
基线是这样的:只使用 格屏幕尺寸所需的多边形或细节。
如果您的角色在背景中,与拍摄特写镜头相比,您应该能够获得更少的多边形。
请记住,我并不是说您应该使用 Low-Poly 并更改场景的外观。您应该拥有实现场景外观所需的最少多边形数量。
您还可以通过以下方式进一步减少多边形的数量:
删除/禁用相机看不到的任何内容。
渲染一架飞机在天空中飞翔?我敢打赌大多数内部对象甚至无法被相机看到。禁用这些座椅、轮子和其他内部构造 格。渲染森林?删除相机后面的所有树木和草。不需要那些。
渲染客厅?我敢打赌,在反射中看到的任何东西都可以减少很多。你真的无法判断花瓶中倒映的植物是有一百万个多边形还是只有一千个多边形。
细分、修饰符、生成器、克隆器、实例
修饰符、生成器和克隆器它们使场景构建变得更加容易,而无需破坏性地烘焙您正在使用的 格。它们越容易使用,它们未被优化到最佳潜力的危险就越大。
以细分曲面为例。它们细分整个 格,使每个级别的多边形数量翻两番。不仅如此,您通常还可以选择单独设置 viewport-subdiv 和 render-subdiv。
这可能看起来很明显,但这会带来危险,您可能不会注意到视口显示和实际渲染之间的多边形差异。您的视口可能会一帆风顺,因为细分设置为 0,但它们可能设置为比渲染时高得多的级别,你需要检查这个!
生成器(例如Extrude )根据某些特定参数生成底层 格的新多边形。同样,您通常可以单独设置渲染设置和视口设置,因此请确保这些拉伸子步骤尽可能少。
克隆器是渲染缓慢的罪魁祸首。尽管设置起来很简单,但要确保生成的实例是真正的内存实例,有时也称为渲染实例(或3dsmax中的Multiscatter)。这允许渲染器在它引用的内存中只拥有这些克隆对象中的一个,从而允许克隆器的内存消耗是非渲染实例所需的一小部分。
在一棵树上克隆数百万片叶子?您的克隆器只需要单个叶子所需的内存(或多或少),从而使真正大量的克隆成为可能。即使您只是在克隆器或数组对象之外使用实例,请务必将其设置为用作渲染实例,以便节省内存。
NURB/曲线组合
与挤出类似,任何类型的扫描、放样或车床 NURB 生成器都将采用样条线/曲线或其中的许多,并从中创建 NURB 对象,然后在渲染时将其非破坏性地转换为多边形。
因为曲线可以有如此多的顶点来使它们变得平滑,所以一定要优化您的结果、扫描、放样或车床,以仅使用实现您所追求的外观所需的最少量的子步骤。
有时您可以在 Generator 本身中设置子步骤,有时您必须减少曲线上的细分,以优化生成的对象。
参数对象
每个 3D 软件都带有一些参数化的默认对象,这意味着它们可以在一定程度上改变,而不必破坏性地将它们转换为基本 格。这些默认对象通常包括平面/曲面、立方体、球体、圆锥体、圆柱体、管子等,您通常可以设置半径、高度、边数和其他参数。
因为这些是默认对象,所以它们带有预定义的参数,这些参数可能不足以针对您的场景或您的一般工作方式进行优化。检查您的默认对象并尽可能减少多边形,而不会过多地改变场景的外观。
事实上,大多数 3D 应用程序允许您保存参数对象的默认设置,因此如果您发现每次创建参数对象时都进行相同的调整,您可能希望从一开始就设置默认参数,从长远来看,可以为您节省一些时间。
微位移
Micro-Poly Displacements 是在渲染时创建许多新多边形的另一种东西,您通常不会在视口中看到。
同样,请确保您确实需要它们,或者您是否可以使用法线贴图或凹凸贴图来伪造它们,尤其是当它们位于背景中或只能在反射中看到时。如果您确实需要它们,请检查细分数量可以向下走多远,直到置换的 格变得过于粗糙。
多边形结论:为什么多边形越少渲染速度越快?
事情是这样的:如果您在明亮的日光下使用默认的灰色材质渲染角色转盘,如果您的角色有 10k 或 10mio 多边形,您很可能看不到任何区别。多边形本身不会增加渲染引擎清除图像所需的样本数量。
然而,多边形确实会减慢光线追踪器的整体性能和光线树的构建(这是实际渲染开始之前的准备过程 – 请参阅渲染管理器部分)。
因此,尽管您不会看到所取样本数的差异,但在具有较少多边形的场景中,计算这些样本的速度会更快。
灯光
每个光发射器,无论是具有发光材质的对象还是实际的光对象,都会为您的场景添加更多光线,这些光线必须在渲染时进行跟踪。尤其是使用全局照明,您可能会在大多数场景中使用它,每盏灯都会产生在场景周围反弹几次的光线 – 并且这些光线中的每一条都必须由您的 GPU 或 CPU 计算.
在某些情况下,添加一盏灯可以加快渲染速度:如果您使用 GI 并且图像中有很多暗区,无法轻松到达直射光,则添加另一个(非常暗的)灯来照亮这些区域会有所帮助快速清除那些嘈杂的像素。
添加灯光以直接照亮您的拍摄对象,让您的渲染速度极快。灯光只会变得非常慢,如果它们必须反射几次才能到达您的主题,或者它们本身具有更复杂的性质。
例如,区域光在计算上很昂贵,因为光线追踪器必须采样大量光线以覆盖区域光的整个区域,同时还要确保生成的阴影是柔和的。与点光源相比,区域光源是一个主要的减速——尤其是大面积光源。
在可能的情况下尝试使用门户灯,尤其是在照亮通过窗户照明的室内场景时。入口光比区域光更高效,渲染速度也更快。
尽可能使用聚光灯和非光线追踪、阴影贴图、软阴影。使用这些可以更快地计算软阴影,并且可以在不改变场景外观的情况下大大加快渲染时间。
使用 HDRI 或天空对象在室外照明中渲染场景,并且太阳通常非常快,因为您可以从全(或半)圆顶获得均匀的照明,这意味着您的光线不必多次反弹即可照亮一切。
如果您的 3D 软件和渲染引擎能够限制光线反射和光线范围,请这样做。让你的场景主体受到非常远的灯光的影响,或者被其他灯光阻挡/难以到达的灯光是没有意义的。
必须多次反射才能到达场景主体的灯光发出的光线,或者已经衰减到几乎不可见的灯光,都会在渲染中引入大量噪点。有时您可以只使用渲染或项目标签来限制您的灯光应该照亮的对象以清除噪音。排除任何不必要的。
材料
有很多材质特性会减慢渲染速度,毕竟材质构成了场景的整个表面区域。
您的照明可以通过三种基本方式与场景的材质进行交互。光可以是:
还记得我们所说的保持场景内光线和光线反弹的数量尽可能低以加快渲染速度吗?材料是使必须计算的光线数量呈指数增长的主要因素。任何增加场景中光线数量或需要清除大量样本的材质属性都会使渲染变慢。
让我们来看看一些主要的源头:
光泽反射和折射
让光线从铬球反射(硬反射)是您在 3D 中可以做的最简单的事情。
这是一个带有硬反射的并排的铬球,以及清除图像中噪声所需的样本分布(白色 = 更多样本,黑暗 = 更少样本):
拿这个镀铬球,让反射变得柔和(有光泽),你就创建了大量需要计算的新光线。根据反射的柔和度,入射光线现在均匀地散射到各种方向。
渲染引擎必须计算的样本和光线越多,完成渲染所需的时间就越长。
这同样适用于光泽折射。光泽反射和光泽折射两者的结合会进一步增加渲染时间。
现在,我并不是说,不要使用光泽折射或反射——它们是大多数材料不可或缺的一部分,但是当你使用它们时,请确保尽可能地优化它们。
以下是优化折射和反射的方法:
当您的反射或折射有光泽(模糊)时,您无法真正分辨出反射或折射中的细节,我们可以利用这一点。
因为材质中的反射/折射场景非常模糊,我们将无法判断反射/折射场景是否 100% 准确 – 这意味着我们可以在没有任何人的情况下降低折射/反射场景的复杂性注意到。
通过限制跟踪深度,我们告诉特定的光泽材料只反射或折射其他对象,而不是这些对象自己的反射或折射(达到一定数量的深度/反弹)。
这意味着我们可以节省大量光线,因为我们人为地限制了跟踪深度。我们可以在大多数渲染引擎中直接在材质设置中执行此操作,或者有时您需要将渲染标签应用于某些对象才能使用它。
这是Redshift 渲染引擎中的外观:
我们在上图中看到的另一个优化是“截止阈值”——基本上,它的作用是告诉渲染器只考虑那些会改变像素外观的光线超过定义的阈值。
它应该只将计算资源用于实际上会在渲染中产生显着差异的东西。
问题是,默认情况下,这些阈值非常低,根本不会影响您的渲染时间。您必须提高阈值才能充分利用它。稍微玩一下看看有什么不同。使用这些来加速光泽反射和折射。
当然,您也可以在硬反射或折射上使用它们,但是因为在硬反射中一切都非常清晰,您可能会注意到更快发生截止的地方。
材质凹凸/法线贴图/置换贴图
还记得光泽反射如何增加材质产生的光线数量以及清除噪声所需的样本数量吗?在这方面,使用凹凸贴图、法线贴图或置换贴图非常相似。因为这些贴图试图伪造 格细节,入射光线也会被它们散射。
细节越精细,产生的光线就越多。即使你的 格只有几个多边形,即一个立方体,如果你在它上面有一个复杂的凹凸贴图,将光线散射到所有地方,你的渲染速度会大大减慢。
材质纹理/位图
如果不使用一些出色的位图/纹理,几乎没有可以创建的 3D 场景。它们为您的 格添加了细节,在大多数情况下,建模工作量太大。确保您的纹理分辨率不要过度。在整个场景中拥有一堆 8k 纹理,即使 2k 或 1k 纹理就足够了(给定对象的屏幕大小),也会使渲染引擎更难处理您的场景。
渲染设置
调整渲染设置是加快渲染速度的最有效方法之一。不过,一如既往,我们不只是想降低质量,我们希望尽可能接近我们需要的质量,但仍然希望提高渲染性能。
以下是一些最重要的因素,需要考虑以提高渲染性能:
自适应采样器
对于大多数现代渲染引擎来说,最重要的一点是将它们设置为使用自适应采样器。
问题是:现代渲染引擎非常复杂,并且有自己确定的方法,需要多少样本才能进行高质量的渲染。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!