找回密码
 立即注册
查看: 1014|回复: 0

UE5实时优化渲染指南,值得收藏!

[复制链接]
发表于 2022-9-18 16:41 | 显示全部楼层 |阅读模式
了解您的绩效预算

在开发项目时,应用程序的目标平台具有有限数量的可用资源,用于将对象保存在内存中和处理它们。在构建项目时,您必须决定将这些资源用于什么用途。熟悉平台在 CPU 和 GPU 的速度、线程和带宽方面的功能,以及潜在的内存、图形内存和可用磁盘空间都是需要考虑的重要因素。
将您的项目与您打算发布的任何平台进行基准测试也很重要,以了解它将如何运行以及它将在哪里遇到性能瓶颈。您可以通过在平台或设备上运行要求苛刻的应用程序或技术演示,然后观察其性能统计数据来对平台或设备进行基准测试。以同样的方式定期测试和基准测试您自己的项目非常重要。
用于显示性能统计信息的控制台命令

您可以在运行项目时使用一系列控制台命令检查性能统计信息。这些可以在项目启动或打包为开发版本时通过控制台窗口输入。


显示在移动应用程序中的控制台窗口。
控制台和四指点击命令仅在开发版本中可用。它在运输或测试版本中不可用。
在控制台中,您可以输入命令以在屏幕上显示调试信息。下表包含提供性能信息的命令列表:


常见的性能因素

在确定了从何处查找性能数据后,本节将让您熟悉一些最常影响性能的常见因素。通过了解哪些元素正在影响您的项目以及如何影响您的项目,您可以开始使用引擎的内置诊断工具来识别和解决它们。
高分辨率法线贴图的最佳实践

将高分辨率顶点烘焙到低多边形模型的法线贴图中可能是一个复杂的过程,许多因素会降低法线贴图纹理在引擎内部时的质量。烘焙法线贴图有很多工具集,但我们推荐XNormal。我们对 Xnormal 使用的流程大致如下:

  • 将 Xnormal 中的法线贴图烘焙为 4xAA 的 8k TIFF。
  • 将 TIFF 导入 Photoshop,然后将其缩减为 1k 纹理。
  • 应用值为 0.35px 的高斯模糊。
  • 将图像从 16 位转换为 8 位。
  • 将图像导出到 24 位 TGA。
  • 将最终的法线贴图导入虚幻。
为确保烘焙过程中使用的表面法线与引擎中存在的相同,您应该从虚幻内部导出优化的法线。将烘焙模型导入 Unreal,选择创建自己的法线,然后从 Unreal 导出烘焙模型以在 Xnormal 中烘焙。这是创建高质量法线贴图的重要步骤,因为 Xnormal 需要了解网格的表面法线才能应用高分辨率模型的偏移。
最后,有两个选项可以在渲染静态网格时减少伪影:

  • 使用全精度 UV
  • 使用高精度切线基
这两个设置都可以在LOD部分 下的Details面板中的 Static Mesh Editor 中使用。


绘制调用

绘制调用是对资产的查找,每帧都会发生。您的应用程序使用的绘制调用数量取决于场景中唯一网格的数量,以及每个网格使用的唯一材质 ID 的数量。目前,大量的绘图调用是导致图形性能低下的最大原因,您应该尽可能减少它们。
例如,一个高度优化的汽车模型可能只有五个或六个单独的网格,并且这些组件中的每一个可能只有一种材料。
在优化的场景中,一个好的绘制调用目标是在 Galaxy Tab S6 上大约 700,在低端硬件上少于 500。在倾向于使用高度独特或复杂材料的 HMI 项目中,100 个绘图调用在 Galaxy Tab S6 上是一个很好的目标,而少于 50 个则更可取。
您可以使用控制台命令输出您的绘图调用计数Stat RHI。
请记住,draw call 计数将根据您是在 PIE 中还是在设备上而变化。|
减少网格数

减少绘制调用的最简单方法是减少在世界中渲染的唯一网格的数量。这可以通过两种方式完成:使用引擎中的内置工具来组合网格,以及使用可见性剔除。

  • 组合独特的网格

    • 可以使用外部 DCC 应用程序(如建模程序)手动组合网格。
    • 或者,可以通过组合网格和纹理在关卡中自动生成 诸如层次细节网格之类的编辑器内世界构建工具,以减少绘制调用。

  • 可见性剔除

    • 该引擎使用多种可见性和遮挡剔除方法来减少渲染的网格数量。剔除距离体积是放置的体积,可以移除由其大小和与玩家相机的距离指定的附加网格。

减少材料 ID 计数

有几种可能的选项可以减少网格上唯一材料的数量。
最简单的方法是使用像Substance Painter这样的程序,它将多种材质集成到同一个纹理中。这使您能够在一个非常简单的虚幻材质中利用大量材质类型,然后您可以将其用作具有简单纹理输入的材质实例的基础。这还可以减少材料指令数,从而进一步提高性能。


第二种方法使用掩蔽来实现更程序化的方法。材料可以表示表面的某些特征,如颜色、粗糙度或金属品质。无需为网格的不同部分使用单独的材质,您可以使用遮罩来分隔网格的 UV 的各个部分,并对每个部分应用不同的设置。您可以使用黑白纹理创建基本蒙版,但使用Vertex Color更有效。


在下面的示例中,顶点颜色用于定义不同的材质类型,材质定义了可以单独影响这些部件外观的参数。顶点颜色遮罩更有效并创建更清晰的分离,因为它不依赖于纹理分辨率。



一种使用顶点颜色来区分不同材质类型的材质。

材料

材质的复杂性会增加渲染帧的像素成本。每个像素的材质指令越多,渲染计算其最终值所需的时间就越多。不透明材质是最便宜的,但根据着色模型或基本着色器代码可能会有很大差异。
您可以在“材质编辑器”内的“统计”窗口中找到材质指令计数的读数。



显示指令计数的统计窗口。

指令数也会根据材料中数学函数的数量而增加。节点越多,渲染材质的成本就越高。一些特定的操作也有较高的成本。在构建更复杂的材质时尝试限制指令数。
半透明材料是一些最昂贵的材料类型。单独的半透明层具有昂贵的每像素成本,当多层透明层堆叠和渲染时,成本要高得多。这称为透支
车辆的头灯和尾灯是具有透明度的问题区域的示例。在许多情况下,手绘纹理贴图用于降低材质复杂性。即使是平坦的纹理,也可以很好地说明复杂的形状和深度。


优化纹理分辨率

有几种方法可以为您的项目优化纹理。您可以使用内置的虚拟纹理,它使您能够使用几乎任何尺寸的纹理,并且只在屏幕上渲染需要的部分,或者您可以使用标准的纹理方法。
对于未启用为虚拟纹理的标准纹理,可能需要大量空间来存储在内存和磁盘中,尤其是对于高分辨率纹理。虽然它们可以提高保真度,但考虑到屏幕分辨率和纹理的视角,纹理尺寸的回报会递减。重要的是使用尽可能小的纹理来获得所需的保真度。
要确定您的纹理需求,首先您需要确定相机位置和您将从中查看模型的视野(FOV)。这有助于确定要使用的所有网格和材料的屏幕空间。
确定相机位置后,您可以使用特殊的调试纹理检查mipmap以确定用于各种材质的纹理分辨率。使用调试 mipmap 纹理有助于确定不同组件所需的分辨率,对每个 mipmap 应用不同的颜色。这样可以更清楚地识别材质使用的是哪个 mip,以及它应该是什么纹理分辨率。
创建测试材质时,将 mipmap 调试纹理插入Unlit材质的Emissive通道,然后将该材质应用于您的网格。从适当的相机距离查看网格时,颜色编码将指示引擎使用哪个 mip 级别进行渲染。观察到的最高级别应该是NormalAmbient Occlusion贴图的原生纹理大小。



应用了调试 mipmap 材质的网格示例。

封装尺寸和启动时间

在打包虚幻引擎项目及其资产时,需要在磁盘上的包大小和运行时启动性能之间进行权衡。
启用ZLib 压缩后,应用程序的包大小会更小。但是,这需要更多的 CPU 时间来加载应用程序,这会降低启动速度。为了获得最佳启动时间,您可以禁用压缩。



您可以在 Project Settings > Packaging 中找到 Zlib 压缩设置。

推荐的流媒体设置

建议使用以下流设置DefaultEngine.ini。这些在应用程序启动时为资产的异步加载提供了额外的时间,这可以缩短启动时间。
[/Script/Engine.StreamingSettings]
s.PriorityAsyncLoadingExtraTime=275.0
s.LevelStreamingActorsUpdateTimeLimit=250.0
s.PriorityLevelStreamingActorsUpdateExtraTime=250.0推荐的包装设置

建议使用以下包装设置DefaultEngine.ini。这些设置减少了打包资产时使用的压缩量,因为未压缩的 .pak 文件在启动时加载速度明显快于 ZLib 压缩文件。
[/Script/UnrealEd.ProjectPackagingSettings]
bCompressed=False
BuildConfiguration=PPBC_Development
bShareMaterialShaderCode=True
bSharedMaterialNativeLibraries=True
bSkipEditorContent=True分析磁盘上的包大小

虚幻引擎具有几个有用的工具,可以深入了解资产的数据足迹。
尺寸图

Size Map读取并比较编辑器中资产的相对内存消耗。要使用它,您必须启用AssetManagerEditor插件。之后,您可以通过右键单击 Content Browser 中的文件夹并从上下文菜单中 选择Size Map来访问它。


Size Map 显示一个窗口,其中的图标代表文件夹和文件占用的内存量。图标越大,文件占用的空间就越多。


注意:尺寸图在编辑器中使用资产时读取它们的足迹。打包项目后,内存消耗会有所不同。这是由于在烹饪过程中发生的不同类型的压缩。根据经验,尺寸图将代表资产可能占用的最大尺寸。
统计数据

统计工具提供有关关卡内资产使用情况的更多详细信息。您可以在窗口主菜单中找到它。


统计窗口会细分关卡文件中的资产数量,可以显示所有关卡或仅显示特定关卡。Primitive Stats列出了有关三角形数量、内存消耗和计数的信息。



显示原始统计信息的统计信息窗口。

此列表中显示的其他数据包括纹理使用和静态网格照明信息。统计窗口的列表模式可以快速说明哪些资产消耗的内存最多。Cooker Stats数据也非常有用,因为它列出了在最后一个打包过程中烹制的所有资产。
内存报告

虽然统计和大小图工具会向您显示文件在虚幻编辑器中的数据占用空间,但Memreport -full可以从在目标设备上启动的应用程序安装中使用控制台命令。这可以详细而准确地查看您的文件大小,因为它们将与您设备的压缩设置一起存在。
在开发配置中构建应用程序并加载到设备后,您可以拉起控制台窗口并输入命令。此内存快照保存在设备上的项目目录中。该目录通常是UE5Game/[YourApp]/[YourApp]/Saved/Profiling/Memreports/,但这可能会有所不同。
该.memreport文件是一个文本文件,可以在大多数文本编辑器中读取。文本的开头包括一些关于分配的内存和池大小的信息,而大部分文本显示了加载的级别、RHI 统计信息、渲染目标、场景信息等的记录。所有这些信息都很有价值,因为它代表了通过烹饪和包装过程的实际数据。
如果您搜索“列出所有纹理”一词,您将找到应用程序中每个纹理的列表,以及有关纹理类型、组、大小和内存占用的详细信息。该列表按内存大小排序,首先呈现较大的纹理。这是一种快速简便的方法来发现哪些纹理消耗的内存最多。
分析启动时间

影响开机时间的因素包括:

  • 加载和解压缩初始资产所需的时间
  • 应用程序的总体大小
  • 需要在用户安装中激活的任何插件
  • 需要解析的字符串数据量
  • 用户设备上的任何内存分配或碎片
有几种不同的工具可用于分析应用程序的启动时间,但最推荐使用Unreal Insights ,因为它可以从目标设备远程分析性能数据。
重要提示:

UE5实时渲染对电脑配置的要求是比较高的,前期的硬件成本是比较高的,这里有一个简单的节省硬件成本的方法,使用赞奇超高清云工作站,即使本地普通的电脑也能运行UE5软件,且普通电脑也能享受行业最高端的CPU和GPU,极大提高制作效率和使用体验,且使用方便快捷,全面支持3D应用软件插件运行,随时调用百余款软件插件,高效作业。
赞奇超高清云工作站可以利用云计算、虚拟化技术,为企业提供的云上虚拟Windows桌面及应用服务,提供VDI的云桌面交付方式,满足不同场景的需求,多终端接入,企业员工可随时随地访问桌面,提高企业办公效率,提升企业信息安全,保护企业数据资产,降低运维、设备成本。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-2-23 00:03 , Processed in 0.134951 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表