Performance Profiler
性能分析器在时间轴上显示性能数据。它报告每帧花费多少时间来更新项目的各个方面:渲染可见的节点,更新其状态,使用游戏逻辑执行脚本,计算物理量等等。
使用事件探查器,您可以:
- 检测应用程序的瓶颈
- 检查是否需要优化艺术品资产
- 检查是否需要代码优化
- 比较更改前后的概要分析结果
性能分析器
激活分析器#
要打开分析器,请单击Tools -> Performance Profiler并选择所需的分析模式:
可以使用以下分析模式:
- Generic profiler仅显示常规统计信息块。
- Rendering profiler显示详细的渲染统计信息和时间线图。
- Physics profiler显示了与物理相关的详细统计信息(在 Physics radius 之内)和时间线图。
- World Management profiler显示了整个已加载世界的统计信息。
- Thread profiler显示有关加载线程资源的统计信息。
要在游戏内模式下显示探查器统计信息,请键入show_profiler命令,并在控制台中输入从 1 到 5 的值。 要在游戏内模式下禁用事件探查器,请在控制台中键入 show_profiler 0 。
通用分析器#
启用通用配置文件
Total | 计算和渲染当前帧所花费的总时间(以毫秒为单位)。这是应用程序执行顺序中的主循环的持续时间。
Total = Total CPU + Waiting GPU |
---|---|
Total CPU | 准备当前帧(包括 update,render 和 swap )花费的总时间(以毫秒为单位)。 |
Total GPU | 在GPU上渲染当前帧所花费的总时间(以毫秒为单位)。 此计数器可能在某些GPU上不起作用。 |
Update | 更新应用程序逻辑所花费的时间。这包括在世界脚本的 update() 功能中执行所有步骤。它还包括所有节点状态的更新(例如,更新蒙皮动画或更新粒子系统以生成新粒子)。
|
Render CPU | 准备要在当前帧中渲染的所有数据并将渲染命令从CPU馈送到GPU所花费的时间。如果“渲染CPU”时间过长,则表示可能需要优化艺术品资源,例如:
|
Waiting GPU | 从完成CPU上的所有计算到GPU完成渲染帧之间的时间。 (请参见插图)。此计数器对于分析应用程序性能的瓶颈很有用。
|
Interface | 呈现所有GUI小部件所需的时间。 |
Physics | 执行所有物理计算所需的时间。 |
Heap | 为应用程序分配的所有内存池的大小。 Unigine分配器在池中分配内存,这使分配更快,更有效(默认情况下,如果使用 USE_MEMORY 指令)。随着在池中分配内存,计数器值逐步增加。 |
Memory | 按需分配的所有内存块的大小。此计数器报告分配的池应用程序资源中实际使用了多少内存。
|
System | 用于应用程序的RAM内存的大小。 |
Allocations | 帧期间的分配呼叫数。 (即使请求分配几个字节,此计数器也会报告分配调用。) |
Sync Threads | 同步内部引擎线程数(默认情况下,该值等于可用CPU内核数减去1并受32限制)。 |
Async Threads | 异步内部引擎线程的数量(默认情况下,该值等于可用CPU内核的数量,并且受32个限制)。 |
渲染配置文件#
启用渲染分析器
除了 generic 之外,还显示以下统计信息:
Terrain Cache CPU | 当前用于“景观地形”图块的CPU内存缓存量,以兆字节为单位。 |
---|---|
Terrain Cache GPU | 当前用于景观地形图块的VRAM缓存量,以兆字节为单位。 |
Terrain Virtual Texture | 当前用于“景观地形”虚拟纹理的内存量,以兆字节为单位。 |
Terrain Detail Textures | 当前用于“地形地形”详细信息的内存量,以兆字节为单位。 |
Terrain Reload Tiles | 修改后当前等待重新加载的“地形地形”图块的数量。 |
Terrain Reload Bounds | 导致重新加载图块的事件数(一个边界可能导致重新加载多个图块)。 |
Sounds | 当前用于声音采样的内存量,以兆字节为单位。 |
Meshes Limit | 可用于网格几何图形的VRAM的最大数量,以兆字节为单位。 |
Meshes | 当前用于网格几何图形的VRAM量,以兆字节为单位。 |
Textures Limit | 可用于纹理的VRAM的最大数量,以兆字节为单位。 |
Textures | 当前用于纹理的VRAM量,以兆字节为单位。 |
Textures Cache | 当前用于纹理缓存的VRAM量,以兆字节为单位。 |
Buffers Render | 当前用于渲染缓冲区(Gbuffer,后效果等)的VRAM量,以兆字节为单位。 |
Buffers Shadows | 当前用于阴影贴图的VRAM量,以兆字节为单位。 |
Async Buffer | 当前用于异步缓冲区的内存量,以兆字节为单位。在流处理过程中将资源异步加载到的中间缓冲区。 仅适用于OpenGL。 |
Async Buffer Indices | 当前用于网格索引缓冲区的内存量,以兆字节为单位。该缓冲区用于存储在流处理过程中异步加载的网格的索引。 仅适用于OpenGL。 |
Grasses | 当前用于草节点的VRAM量,以兆字节为单位。 |
Terrains | 当前用于地形的VRAM量,以兆字节为单位。 |
Allocations Textures | 帧期间纹理的内存分配数。 |
Compile Shaders | 在帧期间编译的着色器的数量。 |
Dynamic Reflections | 每帧绘制的动态反射数。如果是立方体贴图反射,则如果更新了所有六个面,则每帧会渲染六个反射。 |
Lights | 每帧渲染的光通过次数。这意味着计数器将显示当前看到的照明视口中的所有光源的数量。该值还包括用于在反射表面上渲染光的其他遍次(如果使用了动态反射)。普通的2D反射将渲染次数乘以2,而基于立方体贴图的反射(每帧更新了六个面)会将渲染次数乘以6。
每个灯光都会重绘其照亮的网格多边形。这就是为什么光源数量越多,图形卡必须渲染的多边形数量越多,性能越低的原因。例如,使用两个全向光源将使它们照亮的渲染几何体增加一倍。 |
Shadows | 每帧渲染的阴影遍数。每盏灯都需要经过阴影才能计算出阴影。同样,如果有反射的表面带有绘制的阴影,则会增加阴影的通过次数。 |
Decals | 每帧渲染的贴花数量(在所有渲染遍次中)。 |
Surfaces | 每帧渲染的曲面数(在所有渲染遍次中)。每个光源在被照亮时都会使表面数量加倍。 |
Triangles All | 每帧渲染的三角形总数,包括当前在视口中可见的所有多边形以及在阴影渲染过程中渲染的多边形。 |
Triangles Shadows | 在阴影渲染过程中每帧渲染的三角形数量。每个光源都必须重新绘制其照明的几何形状,从而增加了渲染三角形的总数。为了避免GPU瓶颈,请保持动态光源的数量及其半径尽可能小。 |
Triangles Viewport | 每帧渲染的三角形数量。这包括当前在视口(几何形状)中可见的所有多边形。 |
Primitives | 每帧渲染的几何图元数。这包括点,线,三角形和多边形。可视化器和分析器本身也添加到此计数器中。如果使用镶嵌细分,则该值会显着不同。在这种情况下, Triangles 报告粗糙网格中的三角形数量,而 Primitives 显示有关镶嵌细分图元数量的统计信息。 |
Dips | 抽奖电话数。 具有相同材料的相同网格曲面的数量越多,实例化效果越好(默认情况下启用)。 这意味着,绘图调用的数量得以最小化,从而减轻了CPU和GPU的负担。 您可以比较表面的数量(Surfaces)和用于渲染它们的DIP的数量。 例如,如果有30000个曲面和1000个DIP,则意味着仅一个绘制调用(Surfaces/Dips)将渲染30个实例化的网格面。 因此,实例化可提高性能。 |
Shaders | 每帧设置的着色器数量。 (在每个渲染过程中都设置了着色器;因此,如果仅使用一种材质,则仍需要对其着色器进行多次设置。当看不到任何东西且屏幕为黑色时,即使在这种情况下,组合着色器仍在使用。) |
Materials | 每帧设置的材料数量。 (在每个渲染过程中都设置了材料。) |
小于1 Mb的值显示为 0 。
物理探查器#
此分析器显示物理半径内的统计信息。
启用了物理探查器
除了 generic 之外,还显示以下统计信息:
PIslands | 物理半径中的物理岛屿的数量,可以单独计算。此数字越低,则多线程is的效率越低。 |
---|---|
PBodies | 物理半径中的实体的数量。 |
PJoints | 物理半径中的关节的数量。 |
PContacts | 物理范围内的触点总数半径;这包括物体(它们的形状)和物体与网格物体之间的接触。 |
PCollision | 发现对象之间的碰撞时,物理模拟的碰撞检测阶段的持续时间。 |
PResponse | 计算碰撞响应并解决关节时响应阶段的持续时间。 |
PIntegrate | 物理模拟结果应用于人体时积分阶段的持续时间。 |
PSimulation | 所有模拟阶段的持续时间。 |
在我们的 物理学视频教程中观看Physics Profiler选项的概述。
世界管理概况#
此探查器显示了整个世界的统计信息。
在编辑器模式下,启用和禁用节点,主体或关节会增加World Profiler计数器的值,因为创建(有限数量)的克隆是为了撤消/重做。
启用了World Management Profiler
除了 generic 之外,还显示以下统计信息:
WNodes | 世界上的节点总数(已启用和已禁用)。 |
---|---|
WBodies | 世界上个实体的总数。 |
WJoints | 世界上个关节的总数。 |
WSpawn | 引擎花费在程序节点上的时间(以毫秒为单位) (例如草,杂波,世界层)。 |
线程分析器#
启用线程分析器
除了 generic 之外,还显示以下统计信息:
AsyncQueue | 异步加载资源(文件/网格/图像/节点)的时间,以毫秒为单位。 |
---|---|
Sound | 异步加载声音的时间,以毫秒为单位。 |
PathFind | 异步寻路计算时间,以毫秒为单位。 |
最新更新:
2021-04-09
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)