第 2 部分:性能和优化

在第二个教程中,您将了解如何优化场景的性能。

视频字幕:大家好,欢迎学习“Autodesk VRED Professional 实时和虚拟现实简介”教程系列的第二部分。我们希望您已通过上一部分初步了解了相关内容。如果您有任何问题,可以发表评论。autodesk.com 上的 VRED 论坛也是提出问题、进行一般交流以及发出功能请求的好地方!

上次我们介绍了对几何体计算阴影和灯光的不同方法,今天我们想简要介绍哪些参数可以直接影响实时场景的性能。本教程的主要目的是找出可能的瓶颈问题,以便能够权衡可以针对哪些瓶颈问题进行优化。这一点很重要,因为优化场景可能需要大量时间和耐心 - 但是,如果是一些特殊情况,例如您想主要渲染静止内容,可以不用考虑这一点。但在本教程中我们要介绍 OpenGL 相关内容,在此提供一个重要提示:要检查性能问题,一项重要指标是 VRAM 负荷!因此,请务必注意这一点,如果帧速率下降,应首先检查此项!此外还务必注意统计信息!

但首先介绍概述内容。我们确信已经从其他渲染引擎或 VRED 了解了许多内容,但我们希望总有一些提示会有用!下面我们来了解概述内容 - 顺序无关紧要!例如,我们将首先介绍多边形数,但这在 VRED 中通常不是那么重要。

因此,请将以下概述内容视为一种核对表。我们将介绍以下内容:

导入和准备几何体时,我们应先考虑哪些事项?应检查材质的哪些参数?渲染设置如何影响场景的性能?最后:哪些摄影机设置会影响帧速率?

  1. 几何体

    a. 导入(多边形数、NURBS 数据)> 节点信息

    b. NURBS 与多边形

    c.场景树(层次、未使用的节点、材质组、节点数 > print len(getAllNodes()), Transformnodes, Shared Nodes

  2. 材质

    a. 说明 + IBL 质量、纹理数量 + 大小 > 纹理统计信息

    b. 着色器参数(凹凸、桔皮、置换)

    c.特殊情况(纺织布料、多层材质 + 分层材质、.axfs/.substance)

    d.Alpha 通道

  3. 渲染设置

    a. 实时抗锯齿和 DLSS

    b. 遮挡消隐/背面消隐

  4. 摄影机设置

    a. 景深

    b. 灯光光斑 + 光晕 + 强光

几何体

下面我们首先导入数据:一般来说,我会建议将“细分质量”设置得尽可能低。尤其是在导入 NURBS 数据时,以后可以在 VRED 中有选择地重新调整质量,并且可以进行细分较小零件(例如螺丝或图标)等操作。一方面,这样可以获得精简模型,在导入期间节省时间,同时还可以实时保持可能的最佳性能。此时,务必确保“保留曲面数据”处于激活状态。只有这样,以后才能在 VRED 中以迭代方式调整网格密度。在此还有一个关于导入非常大的几何体(例如房屋或街道)的提示:“细分质量”可以设置为“粗糙”,“最大弦长”可以设置为 50000,这相当于 5 米。导入包含四边形的多边形数据集时,建议先在 Maya 或您选择的工具中将其三角化。此外,导入多边形数据时,始终建议使用 .fbx 格式:与 .obj 或 .3ds 相比,它就是更新的格式、行业标准,使用此格式,除了几何体外,还可以导入或导出摄影机、材质、灯光或动画。此外,VRED 还会在导入期间先优化 .fbx 数据 - 对于 .obj 和 .3ds 数据,这些优化必须手动完成。稍后将介绍这些内容。

首先,为了快速了解相关内容,可以直接激活统计信息并查看全局多边形数。或者,可以选择特定节点,然后在“信息”上单击鼠标右键来查看场景树中的多边形数。如果某个零件的细分过于精细,并且您发现可以减少多边形,则可以直接选择相应的零件,然后通过“场景”>“几何体编辑器”>“几何体”测试其他设置 - 前提是 NURBS 信息存储在导入的数据中。此时可以像在导入期间那样增加或减小网格的密度。最后,仅创建正确表示几何体所需数量的多边形。唯一的例外是基于顶点的照明模式,如本教程系列的第一部分中所述。

其实,VRED 在处理大量多边形方面没有问题。具体情况取决于硬件,一般情况下,多边形数达到 5000 万及以上应该都不会有问题!更关键的是基于 NURBS 的数据集。一般来说,存储的 NURBS 数据是一个巨大优势,但在实时演示期间这可能会降低模型的性能。您可以在演示之前将模型转换为多边形 - 但在此之前要进行备份!

顺便说一下,可以通过这个小矩形区域符号识别 NURBS 数据。如果处理多边形数据,可以通过这个小三角形识别它们。要进行转换,直接在场景树中选择所需节点并单击鼠标右键,然后依次选择“编辑”>“曲面”>“转换为网格”。但请在转换之前保存包含 NURBS 数据的文件。

导入并细分数据后,建议查看场景树结构。一般来说,使结构保持整洁很有必要,这是为了实现顺畅的工作流。您的同事也会喜欢整洁的场景树!这意味着层次应尽可能保持简化,并且应移除在导入期间创建的不必要的组或材质组。此外,如果可能,应将同属一体的零件组合起来。这可以通过使用快捷方式 Ctrl + Shift + M 或在场景树中的选定几何体上单击鼠标右键并依次选择“编辑”>“几何体”>“合并几何体”来完成。或者,可以使用“优化”模块,但由于无法通过“优化”模块撤消操作,因此您至少应该知道如何手动执行此操作。顺便说一下:如果您想知道预配置了哪些快捷方式,可以通过“查看”>“显示快捷方式”查看相应列表。

现在回到场景树:最简单快速的层次优化方法就是所谓的“优化”模块。可以通过“场景”>“优化”或在场景树中单击鼠标右键并依次选择“编辑”>“显示优化模块”来调用“优化”模块。可以优化整个场景以及通过选择单个组来优化这些组。默认设置已经可以有助于提高性能。这些设置也存储在“文件”>“优化场景”下,并可以优化整个文件。

现在,我们将了解“优化”模块中最重要的功能。首先,我们要移除所有不需要的组。为此,我们激活“清除组节点”。VRED 现在将移除所含子节点少于两个的所有组。通过激活“刷新材质组节点”执行相同操作以删除所有导入的材质组,但您也可以手动删除它们。

请记住,您可以更进一步,按前面所述合并可能相关的零件以减少节点数。顺便说一下,您可以通过一个小的 Python 命令获取节点数:只需在 VRED 终端中键入命令 print len(getAllNodes()),即可获得所有子节点和父节点的总和。此数越小越好!

最后,但同样重要的是,仅当您不再需要它们时,才能移除所有变换节点。可以通过这个小轴图标而不是组图标识别变换节点。激活“刷新变换节点”后,相应节点的坐标和缩放将重置为 0 或 1,此时几何体本身会进行定位。注意:一旦参照了节点,并且该节点是所谓的共享节点,就不能使用此功能。过一会儿,我们将回到港口场景,因为在那里使用了许多共享节点。

按照之前承诺,在此提供一个有关如何优化类似于 .fbx 数据的已导入 .obj 或 .3ds 数据的简短提示:打开“优化”模块,检查是否激活了 16 位长度和 16 位索引,激活“统一顶点”、“优化索引”和“对索引进行排序”。此外,您还可以在“过滤器”下激活“移除无效纹理坐标”和“移除退化的多边形”。顺便说一下,这是您自己找不到的内容之一,但您可以在 VRED 论坛中找到!但我认为这些设置无论如何都存储在全局优化设置中。

欢迎回到海岸,以及回到实例或共享几何体,这是它们在 VRED 中的名称。共享几何体是场景中多次存在的几何体,其几何体结构完全相同。为了减少多边形,就在场景中多次使用同一几何体。常见示例包括螺丝、侧视镜或轮缘和轮胎。但是,在我们的场景中,我想使用这些集装箱演示该过程。当前只有两种不同的集装箱 - 灰色的 40 英尺集装箱,黄色的 20 英尺集装箱。单击几何体时,我们可以从场景树中带下划线的节点看到这是一个实例。为了对此进行说明,我们还可以简单指定此材质。

现在,我们处理参照对象,这种情况本身很棒。我们将其断开,看看它是否影响性能。为此,我们可以通过单击鼠标右键并依次选择“编辑”>“取消共享”>“取消共享子树”来移除场景树中整个组的参照。该过程需要一些时间,但我们已经可以看到帧速率下降了,但在场景中并没有视觉差异。要再次参照几何体,可以返回“优化”模块。只需在场景树中单击鼠标右键并选择“显示优化模块”,然后在“共享”下选中“几何体”。要检查这是否有效,只需稍微展开层次,然后检查相应节点是否再次加上下划线。请记住,在此示例中,无法从“遮挡消隐”等渲染设置受益!

材质

有关几何体优化的一章到此结束,接下来了解如何检查材质和纹理。在上一个教程中,我们已经指出,在大多数情况下,分辨率为 8 - 16K 的 HDRI 贴图完全足够。在某些情况下,如果在启用运动模糊的情况下渲染静止内容,甚至可以使用分辨率为 4k 的 HDRI 贴图。在此,我们想要指出一个相对较新的功能,即可以调整环境材质中的光泽质量。此处您只需知道,视觉质量会随着设置的提高而提高,但同时计算时间也会增加。我们建议单独检查此问题,并且考虑高质量设置是否还会带来附加价值。

现在我们来了解纹理。一般来说,使用的纹理数及其大小对显卡内存的负荷有重要影响。此外,无论纹理是处于激活状态还是取消激活状态,对内存的影响并没有差异 - 仅当从 VRED 中删除纹理时,才会释放占用的内存。要初步了解相关内容,建议查看 VRAM 使用情况 - 是的,我知道这是再次提到这一点。但这总是好的。还可以在“材质”>“文件”>“统计信息”下查看材质和纹理的数量以及内存使用情况。

为了快速方便地进行优化,还可以在“材质编辑器”>“编辑”>“移除未使用的材质”或“优化材质”下清理材质编辑器!

但是,如果即使在进行各种几何体优化后显卡内存仍不足,建议手动重新处理材质。可以尝试使用两种不同的方法或组合使用它们:一种方法是降低纹理的分辨率。例如,问一问自己是否需要在所有地方使用 8k 纹理,或者 4k 纹理是否就足够?即使在特写镜头中,4K 纹理通常看起来也不错!最简单的方法是在 Photoshop 或类似软件中缩小它们,然后在 VRED 中重新加载。另请注意:注意 2 的幂,这意味着使用 1024 像素、2048 像素、4096 像素纹理等。

如果缩小不同的纹理不能获得所需的效果,可以检查是否确实需要所有纹理通道。如果材质在近距离范围内不可见,则有必要检查不同的纹理通道。以此障碍物为例,我们可以看到凹凸、粗糙度和光泽纹理几乎或完全没有影响。此外,还可以调整“光泽颜色”本身以及删除纹理。

另外,请务必了解,默认情况下,VRED 会将所有纹理嵌入到 .vpb 文件中。如果要更改此设置并仅链接纹理,可以在“编辑”>“首选项”>“导入/导出”>“文件类型”>“OSB/VPB”>“导出”下禁用“使用内嵌纹理”。

现在我们来了解材质优化。有一些设置可能会影响性能,尤其是在使用虚拟现实眼镜时。其中包括程序着色器效果(例如凹凸),对于车漆材质,还包括透明涂层设置中的桔皮。与在其他渲染引擎中一样,在使用置换贴图时,也是如此。大多数情况下,您会看到帧速率立即下降。因此,我们建议将整个几何体移动到某个材质组中,以检查是否可能激活了某些关键着色器参数。

除此之外,还有一些特殊情况。使用程序纺织布料着色器时还应小心谨慎 - 应避免使用它来构建材质,而应使用纹理。其次,多层材质和分层材质的计算非常密集,因此只有在不得不需要时才使用。对于具有 Alpha 通道的纹理,也是如此。当前场景已经过充分优化,因此许多多层材质无关紧要。

渲染设置

简短结论:您可能已经注意到,场景的性能取决于多个参数,并且通常不得不进行一些折衷。因此,接下来将介绍另一个基本要素,即 OpenGL 中的渲染设置。

在 VRED 中基本上可以通过两种方法使用抗锯齿。一种方法是通过界面或使用空格键快捷方式触发标准静帧抗锯齿模式。另一种方法是使用“实时抗锯齿”永久激活抗锯齿。您可以在“可视化”>“实时抗锯齿”下找到此设置,此处还提供了五个预设。很明显,值越高,效果越好 - 但帧速率可能会下降。只需测试哪些设置能在性能与质量之间达到良好折衷。

或者,还可以尝试使用名为 DLSS 的新的深度学习超级采样。只需取消激活常规实时抗锯齿设置并测试其他设置。

也就是说,如果您使用虚拟现实眼镜,也可能有必要测试“可变速率着色”或在“首选项”中的“虚拟现实”下激活“焦点渲染”。

最后,一定要测试“可视化”>“光栅化设置”下的“背面消隐”和/或“遮挡消隐”设置。使用“背面消隐”时,VRED 仅渲染与摄影机对齐的曲面法线。“遮挡消隐”会忽略被其他几何体覆盖的所有曲面,因此它不适用于实例。

摄影机设置

为了完善本主题,我们简单了解一下可能会影响性能的摄影机设置。首先,存在一些实时景深设置。使用“f 制光圈”和“交互式景深质量”时,您会注意到帧速率下降。因此,如果您并不确实需要使用景深,建议将其取消激活。

此外还建议使用真实值,即,使摄影机的“焦距”和“f 制光圈”值在使用真实世界摄影机镜头也可以成像的范围内。快速提示:可以通过双击鼠标右键来设置焦点!

在摄影机的“图像处理”下可以找到其他关键摄影机参数。默认情况下,“光晕”、“强光”、“雾”和“镜头光斑”处于取消激活状态,但在使用时也可能会消耗一些帧。在呈现场景时,应考虑是需要这些效果还是禁用它们!

摘要

好了,本教程马上就要结束了,先在此激活第一个教程的夜间场景。简短总结一下,我们想再次指出,场景的性能可能取决于许多不同的参数。此外,某些优化在一个文件中的效果比在另一个文件中好。因此,请务必形成一种意识,即,哪些优化是有意义的,哪些优化是糟糕的折衷,以及哪些优化与附加的价值相比成本太高。一般来说,应务必使用尽可能少的节点并合并相关区域,同时减少多边形数,以及仅加载确实需要的数量的纹理,并且对这些纹理选择使用低分辨率!

如果您有任何问题或意见,请在评论中写下!再次感谢您的关注,希望您喜欢,下次见!