Unreal Engine 虚幻引擎,性能分析,优化(二)
UE虚幻引擎,CPU 性能分析,GPU分析
目录
一、CPU 性能分析
如渲染线程中出现 CPU 受限,原因可能是绘制调用过多。这是一个常见问题,美术师通常会将绘制调用进行组合,从而减少消耗(如:将多个墙壁组合为一个网格体)。实际消耗存在于多个区域中:
-
渲染线程需要处理每个物体(剔除、材质设置、灯光设置、碰撞、更新消耗等)。 材质越复杂,设置消耗越高。
-
渲染线程需要准备 GPU 指令,以便为每个绘制调用(常量缓冲、纹理、实例属性、着色器)设置状态,并执行实际的 API 调用。 基础通道绘制调用的消耗通常比仅限深度的绘制调用更高。
-
DirectX 将验证部分数据并将信息传递到显卡驱动。
-
驱动(如 NVIDIA、AMD、Intel...)将进一步验证并为硬件创建指令缓冲区。该部分有时会在另一线程中分离。
使用 stats 命令显示由 3D 网格体引起的绘制调用时将显示 Mesh Draw Calls - 美术师可通过以下方法减少此项的数量:
-
减少物体数量(静态/动态网格体、网格体粒子)
-
缩短可视距离(如:场景捕捉 Actor 或每个物体上的距离)
-
调整画面(将画面拉得更远、使移动物体不在同一个画面中)
-
不使用 SceneCaptureActor(须重新渲染场景、调低帧率、或只在需要时进行更新)
-
不使用分屏(分屏比单屏的 CPU 受限更大,需对可延展性设置进行自定义或将内容设为更加主动)
-
减少每次绘制调用的元素(将接受更复杂像素着色器的材质进行组合或单纯地减少材质数量,将纹理组合为少数几块较大的纹理 - 只在减少材质数量时才使用元素较少的 LOD 模型)
-
禁用网格体上自定义深度或阴影投射的功能
-
将光源设为不投射阴影,或拥有更紧凑的边界体(视锥、衰减半径)
在一些情况下,硬件实例化不失为一个选择(相同的 3D 模型、相同的着色器、较少的参数变化、需硬件支持)。硬件实例化可极大降低每次绘制调用的驱动过载,但会使灵活性受限。我们将其用于网格体粒子和实例化植物。
Console命令行: Stat SceneRendering
高端 PC 上的实验说明每帧可拥有数千次绘制调用(DirectX11、OpenGL)。更新的 API(AMD Mantle、DirectX12)将尝试解决驱动过载,并可执行更大次数的绘制调用。 在移动设备上,绘制调用次数为数百次(OpenGL ES2、OpenGL ES3),但即使如此仍能极大地降低驱动过载(Apple Metal)。
如在Game Thr游戏线程中 CPU 受限,需要找到引起此问题的游戏代码(如蓝图、光线投射、物理、AI、内存分配)。
Console命令行: Stat Game
二、GPU性能分析
实时GPU分析器
实时GPU分析器将为主要渲染类别提供实时的逐帧统计数据。要使用实时GPU分析器,请按 反引号(Backtick) 键打开控制台,然后输入 统计数据GPU(stat GPU) ,并按 Enter 。你还可以通过 视口选项(Viewport Options) 下拉菜单中的 统计数据(Stat) 子菜单,启动实时GPU分析器。
Console命令行: Stat GPU
与现有统计数据一样,你可以使用控制台命令 stat startfile 和 stat stopfile 将统计数据记录到 ue4stats 文件中,然后通过在Session Frontend(虚幻前端工具)中打开文件来查看统计数据。
怎么查看.ue4stats文件
Window——>DeveloperTools——>Session Frontend
Session Frontend——>Load,打开.ue4stats文件
三、Memory内存使用
使用命令 stat memory 了解为游戏分配的内存使用,更具体地说,是了解预计算可视性。
点击查看大图。
统计信息 预计算可视性内存(Precomputed Visibility Memory) 显示当前用于预计算可视性的实际运行时内存使用。
四、Engine 显示一般渲染状态
显示一般渲染状态,例如帧时间,以及正在渲染的三角形数量的计数器。
Console命令行: Stat Engine
五、UnitGraph
显示带有实时线图绘图的“statunit”数据。用于在其他情况下运行流畅的游戏中检测故障。
要查看包含stat单元数据的图表,使用 stat Raw 查看未过滤数据。
Console命令行: Stat UnitGraph
原文链接:https://docs.unrealengine.com/4.27/zh-CN/TestingAndOptimization/PerformanceAndProfiling/CPU/
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)