性能分析器
性能分析器在时间轴上显示性能数据。它报告每帧花费多少时间来更新项目的各个方面:渲染可见的节点,更新其状态,使用游戏逻辑执行脚本,计算物理量等等。
使用事件分析器,您可以:
- 检测应用程序的瓶颈
- 检查是否需要优化艺术品资源
- 检查是否需要代码优化
- 比较更改前后的概要分析结果
性能分析器
激活分析器#
要打开分析器,请单击Tools -> Performance Profiler并选择所需的分析模式:
可以使用以下分析模式:
- Generic profiler仅显示常规统计信息块。
- Rendering profiler显示详细的渲染统计信息和时间线图。
- Physics profiler显示了与物理相关的详细统计信息(在 Physics radius 之内)和时间线图。
- World Management profiler显示了整个已加载世界的统计信息。
- Thread profiler显示有关加载线程资源的统计信息。
要在游戏模式中显示分析器统计信息,请在控制台中键入 show_profiler 1 命令。要在游戏模式中禁用分析器,请在控制台中键入 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小部件所需的时间。 |
Total Physics | 执行所有物理计算所需的时间。 |
Waiting Physics | 物理模块等待渲染过程完成以返回主线程并执行其余物理周期的时间段。 |
CPU ram free | 当前可用内存量。 |
CPU ram usage physics | 工作集的当前大小。工作集是当前在物理RAM中可见的内存页集(检查源)。 |
CPU ram usage committed | 内存管理器为正在运行的进程提交的私有内存总量(检查源)。 |
CPU ram malloc | UNIGINE自定义分配器分配的内存量。 |
CPU ram static pool | 静态池中分配的内存量。 |
CPU ram dynamic pool | 动态池中分配的内存量。仅适用于Windows。 |
CPU ram instance pool | 实例池中分配的内存量。 |
Frame Allocations | 每帧进行的分配数量。UNIGINE分配器在池中分配内存,这使得分配更快,更高效。 |
Live Allocations | 当前所做的分配数/运行时所做的最大分配数(峰值消耗)。 |
GPU vram free | 当前可用显存的数量。 |
GPU vram usage | GPU使用的VRAM量。此值由图形驱动程序提供。 |
GPU ram usage | GPU使用的RAM量。此值由图形驱动程序提供。 |
GPU alloc | 引擎在GPU上进行的分配数量。 |
GPU Frame Allocations | 每帧进行的显存分配数。 |
GPU Live Allocations | 当前所做的分配数/运行时所做的最大分配数(峰值消耗)。 |
内存分析器#
内存分析器已启用
除通用统计信息外,还显示以下统计信息:
当通过UnigineEditor接口(Tools -> Performance Profiler -> Rendering)启用时,本节中提供的内存统计信息在渲染分析器中可用。
但是,您可以使用show_profiler_memory 1控制台命令单独启用内存分析器。在这种情况下,只会显示内存统计信息。
但是,您可以使用show_profiler_memory 1控制台命令单独启用内存分析器。在这种情况下,只会显示内存统计信息。
GPU Allocator small pool size | 用于小分配的VRAM池的最大大小。 |
---|---|
GPU Allocator small pool usage | 小分配的显存池的实际使用情况。 |
GPU Allocator skinned | 为蒙皮网格分配的显存量。 |
GPU Allocator decals | 为贴花分配的显存量。 |
RAM ImagePool | 当前用于图像池的内存(RAM)量。 |
RAM StringPool | 当前用于存储重复字符串的全局字符串池的内存(RAM)量。字符串池提高了性能,因为它只存储一个字符串,而不是它的几个重复项。然而,这个池只在引擎关闭时被清除,所以在运行时保持足够的大小是很重要的。 |
RAM Sounds | 当前用于声音样本的内存(RAM),单位为兆字节。 |
RAM Terrain | 当前用于地形流的内存(RAM)量,以及为其设置的内存限制,以兆字节为单位。内存限制是可用于地形流的最大RAM量。 |
RAM Animations | 当前用于动画(存储在.anim文件中)的内存(RAM)量。 |
RAM Meshes Static All | 当前用于流式传输静态网格的RAM总量。
相同的静态网格将使用比VRAM更多的RAM,因为在RAM中生成额外的数据来计算碰撞,交叉点,空间树等。 |
RAM Meshes Static Active | 用于静态网格渲染的内存量。 |
RAM Meshes Static Cache | 用于缓存静态网格的RAM量。 |
RAM Meshes Skinned All | 当前用于流式蒙皮网格的RAM总量。 |
RAM Meshes Skinned Active | 用于蒙皮网格渲染的RAM数量。 |
RAM Meshes Skinned Cache | 用于缓存蒙皮网格的RAM量。 |
VRAM Render Buffers | 当前用于渲染缓冲区(Gbuffer,后期效果等)的VRAM数量,以兆字节为单位。 |
VRAM Particles | 当前用于粒子系统顶点的VRAM量,以及可用于它们的最大VRAM量,以兆字节为单位。 |
VRAM Meshes Static All | 当前用于流式传输静态网格的VRAM总量。 |
VRAM Meshes Static Active | 用于静态网格渲染的VRAM数量。 |
VRAM Meshes Static Cache | 用于缓存静态网格的VRAM量。 |
VRAM Meshes Skinned All | 当前用于蒙皮网格的VRAM总量。 |
VRAM Meshes Skinned Active | 用于蒙皮网格渲染的VRAM数量。 |
VRAM Meshes Skinned Cache | 用于缓存蒙皮网格体的VRAM量。 |
VRAM Textures All | 当前用于纹理的VRAM总量,以及可用于它们的最大VRAM量,以兆字节为单位。 |
VRAM Textures Active | 用于纹理渲染的VRAM量。 |
VRAM Textures Cache | 当前用于纹理缓存的VRAM量,以兆字节为单位。 |
VRAM Terrain Cache | 当前用于Landscape Terrain图块的VRAM缓存量,以兆字节为单位。 |
VRAM Terrain Virtual Texture | 当前用于Landscape Terrain虚拟纹理的VRAM量,以兆字节为单位。 |
VRAM Terrain Detail Textures | 当前用于Landscape Terrain详细信息的VRAM量,以兆字节为单位。 |
RAM Streaming need | 当前需要流式传输的RAM数量。 |
VRAM Streaming need | 当前需要流式传输的VRAM数量。 |
渲染分析器#
渲染分析器已启用
当通过UnigineEditor接口(Tools -> Performance Profiler -> Rendering)启用时,分析器还提供内存统计信息。
但是,如果使用show_profiler_render 1控制台命令启用它,则只会显示下面提供的统计信息。
但是,如果使用show_profiler_render 1控制台命令启用它,则只会显示下面提供的统计信息。
Terrain Reload Tiles | 修改后当前正在等待重新加载的Landscape Terrain 图块的数量。 |
---|---|
Terrain Reload Bounds | 导致重新加载图块的事件数(一个边界可能导致重新加载多个图块)。 |
Dynamic Reflections | 每帧绘制的动态反射的数量。对于立方体贴图反射,如果所有六个面都更新,则每帧渲染六个反射。 |
Lights | 每帧渲染的光通过数。这意味着计数器显示所有光源的数量,这些光源是当前可见的,并照亮视口中的某些东西。此值还包括用于在反射面中渲染光源的额外通道(如果使用动态反射)。一个普通的2D反射将渲染通道的数量乘以2,而基于立方体贴图的反射,每帧更新6个面,将渲染通道的数量乘以6。
每个光照都会重绘它所照亮的网格多边形。这就是为什么光源数量越多,显卡必须渲染的多边形数量就越多,性能就越低。例如,使用两个omni光源将使它们所照射的渲染几何体增加一倍。 |
Shadows | 每帧渲染的阴影通道数。每个光源都需要一个阴影通道来计算阴影。同样,如果有反射曲面的阴影绘制反射,这将增加阴影通过的数量。 |
Decals |
每帧渲染的贴花数(在所有渲染通道中)。如果一个贴花有任何额外的效果(透明、发光、光源照明或有任何其他视觉效果),涉及到这个贴花的额外渲染通道,这个贴花将在每个相应的通道中额外渲染,因此渲染的贴花总数将增加。 |
Surfaces |
每帧渲染的曲面数(在所有渲染通道中)。如果一个曲面有任何额外的效果(透明、发光、由光源照明或具有任何其他视觉效果),涉及该曲面的额外渲染通道,则该曲面将在每个相应的通道中额外渲染,因此渲染曲面的总数将增加。 |
Triangles All | 每帧渲染的三角形总数,包括当前在视口中可见的所有多边形以及在阴影渲染过程中渲染的多边形。 |
Triangles Shadows | 在阴影渲染过程中,每帧渲染的三角形数量。每个光源导致再次绘制它照亮的几何图形,增加渲染三角形的总数。为了避免GPU瓶颈,保持动态光源的数量和半径尽可能低。 |
Triangles Viewport | 每帧渲染的三角形数。这包括当前在视口中可见的所有多边形(几何)。 |
Primitives | 每帧渲染的几何图元数。这包括点、线、三角形和多边形。可视化工具和分析器本身也会添加到此计数器。如果使用镶嵌,这个值会有很大的不同。在这种情况下,Triangles报告粗网格中的三角形数量,而Primitives显示关于镶嵌图元数量的统计信息。 |
Dips | 绘制调用的数量。具有相同材质的相同网格曲面的数量越多,实例化就越有效(默认情况下启用)。这意味着,绘制调用的数量可以最大限度地减少cpu和GPU的负载。
您可以比较曲面的数量(Surfaces)和用于渲染它们的DIP的数量。例如,如果有30000个曲面和1000个DIP,这意味着每次绘制调用(Surfaces / Dips)渲染30个网格实例表面曲面。因此,实例化提供了性能提升。 |
Materials | 每帧设置的材质数量。(材质设置在每个渲染通道中。) |
Shaders | 每帧设置的着色器数量。(着色器在每个渲染通道中设置;因此,如果只使用一种材质,其着色器仍然需要设置几次。当没有任何东西是可见的并且屏幕是黑色的,即使在这种情况下,复合着色器仍然被使用。) |
Compiled PSO | 当前编译的PSO数量。 |
Loaded PSO | 当前加载的PSO数量。 |
Compiled Shaders | 当前编译的着色器数。 |
Loaded Shaders | 加载到RAM的着色器数量。 |
小于1Mb的值显示为0。
物理分析器#
此分析器显示物理半径内的统计信息。
您可以通过UnigineEditor接口(Tools -> Performance Profiler -> Physics)和show_profiler_physics 1控制台命令启用此分析器。
物理分析器已启用
除了通用统计信息外,还显示以下统计信息:
PIslands | 物理半径内可以单独计算的物理岛的数量。这个数字越低,多线程的效率就越低。 |
---|---|
PBodies | 物理半径内实体的数量。 |
PJoints | 物理半径内关节的数量。 |
PContacts | 物理半径内的总接触数;这包括体之间的接触(它们的形状)和体网格触点之间的触点。 |
PCollision | 当发现物体之间的碰撞时,物理模拟的碰撞检测阶段的持续时间。 |
PSimulation | 所有模拟阶段的持续时间加在一起. |
在我们的物理视频教程中观看物理分析器选项的概述。
世界管理分析器#
这个分析器显示了整个世界的统计数据。
在编辑器模式下,启用和禁用节点、物体或关节可以增加世界分析器计数器的值,因为为撤消/重做目的创建了(有限)数量的克隆。
世界管理分析器已启用
您可以通过UnigineEditor接口(Tools -> Performance Profiler -> World Management)和show_profiler_world 1控制台命令启用此分析器。
除了通用统计信息外,还显示以下统计信息:
WNodes | 世界节点总数(启用和禁用的)。 |
---|---|
WBodies | 世界里物体的总数。 |
WShapes | 世界里形状的总数。 |
WJoints | 世界里关节的总数。 |
WSpawn | 引擎在程序节点(如草,Clutter,世界层)中生成内容所花费的毫秒时间。 |
线程分析器#
线程分析器已启用
您可以通过UnigineEditor接口(Tools -> Performance Profiler -> Thread)和show_profiler_thread 1控制台命令启用此分析器。
除了通用统计信息外,还显示以下统计信息:
AsyncQueue | 异步加载资源(文件/网格/图像/节点)的时间,以毫秒为单位。 |
---|---|
Sound | 异步加载声音的时间,以毫秒为单位。 |
PathFind | 异步寻路计算的时间,以毫秒为单位。 |
CPUShaders Threads | 用于CPU着色器的内部引擎线程数。 |
最新更新:
2024-09-11
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)