网格的性能准则
性能
本文介绍在网格中创作内容时性能的重要性。 帧速率是使性能合理化的最简单单位。 通常,帧速率以“每秒帧数”(fps)或应用程序每秒可以呈现图像的次数进行度量。 如果内容未以最佳帧速率运行,则用户体验可能会大幅下降。 为了帮助你跟踪和实现质量帧速率,网格提供了各种工具和建议。
下表列出了每个平台网格支持的目标帧速率。
电脑 | Android (Quest) |
---|---|
监视刷新率 (最低 30fps) | 72fps |
简单场景和复杂场景
与所有 3D 开发一样,在网格中,视觉保真度和性能之间存在权衡。 根据运行网格的计算机,用户可能会遇到性能下降的问题,尤其是在场景很复杂的情况下。
像财务预算一样考虑业绩。 如果你有 100 美元来花费,你不能花 60 美元来渲染复杂的环境,40 美元模拟高级物理,以及 20 美元的视觉脚本 - 最终会花费超过预算。 作为开发人员,你必须在视觉保真度、交互复杂性、用户数和其他系统之间进行权衡。 网格团队生成了性能阈值列表,而不是作为规则,而是开发指南。
分析方法
网格中的创作环境通常涉及三个步骤。
- 在 Unity 中创作内容
- 上传到Microsoft网格
- 在网格应用中运行内容
在步骤 1 中,我们建议你混合使用网格工具包包中找到的内容性能分析器(CPA)和性能探查器,这是用于生成网格环境的任何 Unity 项目所必需的。 在步骤 2 中,CPA 工具会自动运行。 最后,在第三步最后阶段,分析应通过网格的内置性能探查器进行。
用于分析性能的工具
内容性能分析器(CPA)
建议使用内容性能分析器(CPA)来最大程度地提高网格体验的性能。 CPA 工具可以在创作时静态分析内容。 可以使用 CPA 来审核三角形计数、批处理、纹理内存利用率等。 这样,就可以在将内容上传到网格之前捕获内容优化问题和机会。
若要运行 CPA 工具,请从菜单项中选择网格工具包>内容性能分析器。
问题和建议通过 Unity 中的编辑器窗口报告。
重要
将内容上传到网格时,CPA 分析器的一部分将自动运行。 由于并非所有测试都可以自动运行,因此最好在开发过程中手动运行 CPA。
性能探查器
性能探查器提供了一个简单的窗口,用于查看所有平台的网格项目的帧速率、场景复杂性和内存使用情况。 性能探查器可在网格应用和网格工具包中访问。
若要查看网格应用中的性能探查器,请打开设置面板,然后选择“面向开发人员>性能探查器”。 性能探查器将显示在窗口的顶部中心。
使用性能探查器时,查找 显示为红色框的未命中帧,标记为“x”。 错过的帧表示内容未命中网格的目标帧速率,并且可能需要优化工作。 场景复杂性和内存使用率显示在错过的帧指示器下。 这些数字可能指示内容为何不满足网格的目标帧速率。
当指标不符合网格建议的性能阈值时,性能探查器上的文本将变为红色。 有关性能阈值的更多详细信息,请参阅一个继续部分。
重要
批处理不能显示在网格应用中。 它们仅在 Unity 编辑器中可用。
还应关注底部内存栏,以确保内存使用量不会快速更改或接近应用程序的内存限制。
若要查看 Unity 编辑器中的性能探查器,请确保场景中具有 网格模拟器设置组件 。 确保 初始屏幕计数 设置为零。 如果是一个或多个,则播放时将无法在性能探查器上切换。
单击 Unity 的 “播放 ”按钮进入播放模式,通过 “v ”键切换性能探查器。 性能探查器将显示在游戏窗口的顶部中心。
重要
在 Unity 编辑器中查看性能探查器时,你会看到更多信息,例如批处理计数和毫秒时间,某些子系统需要执行的时间。 请注意,这些指标是性能的相对近似值,最终分析应在网格应用中发生。
如果对性能探查器底部的毫秒时间进行测量,可以在性能阈值部分找到该信息。
其他工具
CPA 和性能探查器都是针对网格生成的自定义工具,但 Unity 中还有一些用于分析内容的好工具:
- Unity 的探查器
- Unity 的框架调试器
- RenderDoc (重要提示:RenderDoc 只能从 Unity 编辑器执行捕获。网格应用生成将不起作用。
性能阈值
优化性能可能是一种均衡行为,具体取决于你正在开发的方案以及想要实现的体验。 在网格中呈现场景是如何创作环境的内容的直接后果。 下面是当前平台的呈现建议。
电脑呈现阈值
Polycount | 批处理 | 后期处理 |
---|---|---|
<约 500k 三角形 | ~200 批 | 已禁用 |
纹理 | 浅色图 | Skybox 分辨率 |
< 约 160 MB | < 约 80 MB | 2048x4096 |
Android (Quest) 呈现阈值
Polycount | 批处理 | 后期处理 |
---|---|---|
<约 8 万个三角形 | 约 50 批 | 已禁用 |
纹理 | 浅色图 | Skybox 分辨率 |
< ~16 MB | < 约 20 MB | 1024x2048 |
你可能会注意到,上述表中未指定着色器限制。 由于网格使用 Unity 的 通用呈现管道(URP), 因此我们建议你使用更便宜的现成 URP 着色器(如 通用渲染管道/烘焙 Lit 或 通用渲染管道/简单 Lit)。 我们还了解自定义着色器的值。 一般情况下,我们尝试将大多数环境的自定义着色器保持在以下阈值内:
顶点数学 | 片段数学 | 纹理 |
---|---|---|
< 30 个操作 | < 120 个操作 | < 2 个查找 |
重要
对着色器操作进行计数是用于计算着色器性能的不完善指标,着色器开发人员还应分析其在网格中运行的着色器,以验证其运行性能。
如果想知道如何为网格应用配置 URP 的呈现管道,可以在项目的 \Library\PackageCache\com.microsoft.mesh.toolkit\mesh.toolkit.uploader\Assets\URP 目录中检查特定于平台的呈现器。
脚本阈值
网格允许通过可视化脚本、云脚本、网格物理和/或 WebSlate 创建交互式内容。 在 Unity 编辑器中查看性能探查器时,某些子系统执行所花费的毫秒(ms)时间显示在探查器底部。 当文本从绿色更改为红色时,指示子系统可能超出预算。 下表提供了有关这些预算的详细信息。
子系统名称 | 最大帧预算 | 说明 |
---|---|---|
行为 | 空值 | 更新所有本地 MonoBehaviour 脚本所花费的毫秒时间(C# 和 Visual) |
呈现 | 25% | 场景 CPU 呈现的毫秒时间 |
WebSlate | 空值 | 更新和呈现场景中任何 WebSlate 的毫秒时间 |
菲斯·西姆 | 15% | 步骤 PhysX 模拟的毫秒时间 |
Phys Sync | 15% | 同步所有物理体时的毫秒时间 |
Phys Effx | 10% | 更新定制物理行为的毫秒时间 |
VS 用户 | 15% | 放置在场景中的视觉脚本图中花费的毫秒时间 |
VS Env | 10% | 更新 Visual Script 基础结构所花费的毫秒时间 |
VS Net | 10% | 同步视觉脚本网络状态所花费的毫秒时间 |
上面列出的“最大帧百分比”值是基于泛型内容的建议。 作为开发人员,你需要平衡这些系统,以确保帧可以在分配的时间更新。
性能和优化资源
图形性能基础知识 https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html
通用呈现管道 (URP) https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html
SRP Batcher https://docs.unity3d.com/Manual/SRPBatcher.html
单传递实例化呈现和自定义着色器 https://docs.unity3d.com/Manual/SinglePassInstancing.html