性能分析器
性能分析器显示某个时间线内的性能数据。当帧对项目的各方面进行升级更新操作时,性能分析器会对用在每帧上的时间做出报告:视野中的渲染节点,更新节点状态,使用游戏逻辑执行脚本,计算物理等。
在性能分析器的帮助下,您可以:
- 检测应用程序的瓶颈
- 检测是否需要艺术要素优化
- 检测是否需要代码优化
- 在发生改变前及改变后,将分析结构进行比较
激活分析器
要打开分析器,点击Optimize -> Performance Profiler然后选择所需的分析器模式:
下列分析器模式可用:
- Generic profiler(通用型分析器)仅显示一般统计数据块。
- Rendering profiler(渲染分析器) 显示具体渲染统计数据及时间表。
- Physics profiler(物理分析器)显示与物理相关的具体统计数据(物理半径范围内的数据)和时间表。
- World Management profiler(世界管理分析器) 显示整个加载世界的统计数据。
- Thread profiler(线程分析器) 对线程资源在加载过程的统计数据进行显示。
为了显示游戏模式中的分析器统计数据,使用启用的分析器(通过在控制台中输入editor_quit的方式启用) 或者键入show_profiler命令并在控制台中选择一个从1到 5 的数值来退出UnigineEditor。 若是要禁用游戏模式中的分析器,在控制台中键入show_profiler 0 。
同样您也可以通过render_profiler控制台命令来启用额外的Renderer profiler(渲染器分析器)块。若是想此块得以显示,应启用基础分析器(任意模式中都可)。
Generic Profiler(通用型分析器)
Total(总计) | 帧在渲染及计算时所花费的总时间,此时间以毫秒进行计算。此时间为应用程序执行序列中主循环的持续时间。 如果您将Total(总)时间(CPU上的准备数据)和 Present(当前)时间(在GPU完成其自身渲染工作时)相加在一起,便可以计算应用程序的帧率: FPS = 1 / (Total + Present) x 1000 例如,Total时间为 5 ms ,Present时间也为5 ms地话,这样FPS就为100。 20 ms大体上意味着FPS为50 。当达到40-50 ms时,帧率就显得太低,此时需对应用程序进行优化。 |
---|---|
Update(更新) | 对应用逻辑进行更新的时间,包括执行世界脚本update()循环中所有功能的时间。也包括更新所有节点状态的时间(例如蒙皮动画的更新或对某个粒子系统的更新从而生成新的粒子)。总之,此为update loop(循环)的持续时间。
|
Render(渲染) | 对当前帧中的所有数据进行渲染准备所需花费的时间以及渲染命令从CPU到GPU所需的加料时间。如果渲染时间值太高,这标志着需要对艺术要素进行优化,例如:
|
Interface(接口) | 对所有GUI小部件进行渲染所需时间。 |
Physics(物理) | 执行所有物理计算所需花费的时间。 |
Present(当前) | 从完成CPU上的所有计算到GPU完成对帧渲染之间的时间。(参看illustration(插图))。此计数器在对应用性能瓶颈分析时十分有用。
|
Heap(大堆阵) | 为应用分配的所有内存池的尺寸大小。Unigine分佩符会对池中的内存池进行分配,这样可以使分佩速度更快,效率更高。(如果默认情况下使用了USE_MEMORY指令)。由于内存在池中得到分佩,因此会对计数器值逐步进行增加。 |
Memory(内存) | 所有按需分佩内存块的尺寸大小。此计数器会对应用资源在分配池中真正使用的内存数量作出报告。
|
System(系统) | 用于应用的RAM内存尺寸。 |
Allocations(分配) | 在帧期间调用的分配次数。(此计数器会对分配调用作出报告即使需要对数个字节进行分配)。 |
Meshes(网格) | 用于网格几何的内存尺寸大小。 |
Textures(纹理) | 用于材质中纹理的内存尺寸大小。 |
Samples(样本) | 用于声音样本的内存尺寸大小。 |
渲染分析器
下列统计数据会得以显示除开generic(通用型)统计数据:
RLights | 每帧中被渲染的 light passes(光线通道)数量。这意味着计数器会显示所有光源数量,可在观察口中看到这些光源当前正对某些物体照亮。此数值包括在反射面内用于对光线渲染的额外通道(如果使用了动态反射)。平面2D反射会将渲染通道数量乘以2,而使用六个面对每帧进行更新的基于立方体贴图的反射会将渲染通道的数量乘以6。
每种光线会对其照明的网格多边形进行重绘。这也正是为什么光源数量越多,显卡需渲染的多边形数量就越多且性能越低的原因。例如,使用两种全方位光线差不多会使光线照耀的渲染几何体加倍。 |
---|---|
RShadows | 每帧中被渲染的阴影通道数。每种光线都需要一个用来计算阴影的阴影通道。如果存在使用阴影反射的反射面,那么阴影通道数会增加。 |
RReflections | 每帧中被绘制的反射数量。如果是立方体贴图反射,六个面都得到了更新,那么六个反射会被渲染到每帧上。 |
RProcedurals | 每帧中渲染的程序纹理数。 需要考虑到运用到另一种程序纹理上的后期材质程序纹理。 |
RShaders | 每帧设置的着色器数量。(着色器被设置在每个渲染通路中,因此仅使用了一种材质,那么这种材质的着色器需被设置数次。当一切都不可见且屏幕为黑色时,将使用复合着色器。) |
RMaterials | 每帧设置的材质数量。(材质被设置在每个渲染通路中。) |
RTriangles | 每帧渲染的三角形数量,包括所有在观察口中可见的多边形。此外,每种光源不得不对其照亮的几何重新进行绘制,增加所有渲染三角形的数量。为了避免GPU瓶颈,维持动态光源数及尽可能保持其半径数为一个低值。 |
RPrimitives | 每帧中被渲染的几何图元数,包括点,线,三角形和多边形。观察仪和分析器其自身会添加到此计数器上。如果使用了曲面细分,那么数值会出现极大的不同。这样RTriangles会对粗网格中的三角形数量作出报告,而 RPrimitives 则显示对曲面细分图元数量的统计数据。
图元统计数据仅在DirectX 11下可用。 |
RSurfaces | 每帧渲染的表面数(所有渲染通路中的数量)。如果表面得以照亮,那么每种光源将会使表面数量成倍增加。 |
RDecals | 每帧渲染的印花数。(所有渲染通路中的数量)。 |
RDips | 调用绘图的数量。使用同一种材质的相同网格表面数越多,实例化的效果就越好(默认情况下启用)。这意味着对调用的绘图数量进行了最小化处理,卸载了CPU 以及GPU。 您可以将表面数量(RSurfaces) 与用来对表面进行渲染的DIPs数量进行比较。例如,有30000个面和1000个DIP,这就意味着网格30个实例化的面仅被渲染到每个绘图调用上(RSurfaces/RDdips)。因此,实例化会增加性能。 |
RMTris/sec | 每秒钟由显卡渲染成百上千万的三角形数量。 |
RKSurf/sec | 每秒钟由显卡渲染成千上万的表面数量。 |
RKDips/sec | 每秒钟显卡所调用的成千上万绘图数。 |
RSpawn | 引擎在加载网格和纹理时所用时间,这些时间以毫秒计。 |
物理分析器
此分析器显示物理半径内的统计数据。
- PUpdate
- PResponse
- PIntegrate
除了通用型统计数据外,下列统计数据会得到显示:
PIslands | 可被单独进行计算的物理半径范围内物理islands(岛屿)的数量。此数量值越少,如果启用了多线程,那么多线程的效率就越低。 |
---|---|
PBodies | 物理 半径范围内bodies(本体)的数量。 |
PJoints | 物理半径范围内 joints(关节)的数量。 |
PContacts | 物理半径范围内所有的接触数量,包括本体(形状)之间的接触以及本体网格间的接触。 |
PBroad | 当发现潜在碰撞物体时,物理仿真两步法碰撞检测的持续时间。 |
PNarrow | 当执行精确碰撞测试时,窄阶段的持续时间。 |
PUpdate | 在物体对其将被计算的碰撞反应做准备工作时,更新阶段的持续时间。 |
PResponse | 当碰撞反应得到计算,关节问题也得到解决时,反应阶段的持续时间。 |
PIntegrate | 当物理仿真结果运用到实体上时,集成阶段的持续时间。 |
PSimulation | 将所有仿真阶段添加到一起的持续时间。 |
世界管理分析器
此分析器展示对整个世界的统计数据。
除了通用型统计数据外,还可以展示下列统计数据:
WNodes | 世界中节点的总数(启用及禁用的都包含在内)。 |
---|---|
WBodies | 世界中 实体的总数。 |
WJoints | 世界中关节的总数。 |
WSpawn | 引擎在程序节点内用来生成内容时所需时间,以毫秒计 (例如草,杂乱的事物,世界层)。 |
线程分析器
除了通用型统计数据外,还可以展示下列统计数据:
World | 对当前节点序列进行异步加载所需时间,按毫秒计。 |
---|---|
Sound | 对声音进行异步加载所需时间,以毫秒计。 |
PathFind | 对路径查找进行异步计算的时间,以毫秒计。 |
FileSystem | 对文件进行异步加载的时间,以毫秒计。 |
额外的渲染器分析器
可以使用渲染器分析器来找出需要对美术内容中的哪些方面进行优化从而增加整体性能。但启用渲染器分析器会使负担过重从而使应用在剖绘时运行明显变慢。造成这种情况的原因是GPU与CPU同步测量每个渲染任务花费的时间。
如果用来对统计数据作出报告的渲染器选项未得到使用,那么就应当隐藏计数器。
RPIntersection | 使BSP tree下降并切断视锥体中当前不可见的所有节点所需时间。 |
---|---|
RPReflections | 对反射进行渲染所需时间。 |
RPUpdate | 准备用于渲染的表面所需时间,包括设置alpha混合衰减及曲面细分转换所需时间。 |
RPSort | 以正确次序对所有将被渲染的多边形进行分类所需时间。 |
RPDeferred | The duration of the 延迟 通路的持续时间。 |
RPQueries | 使用Query标记对节点进行渲染所需时间。 |
RPDeferredLight | 延迟灯光通路的持续时间。 |
RPOpacityAmbient | 用于不透明物体的环境通路。 |
RPOpacityLight | 用于不透明物体光线 通路的持续时间。 |
RPDecalsAmbient | 用于印花的环境通路的持续时间。 |
RPDecalsLight | 用于印花的光线通路的持续时间。 |
RPDeferredLightProb | 对使用探测光而创建的全局照明进行渲染的通路持续时间。 |
RPTransparent | 对透明物体进行渲染的通路的持续时间。 |
RPScattering | 对 光散射通路进行渲染所需的时间。 |
RPVolumetric | 对体积阴影进行渲染所需时间。 |
RPDOF | 对效果景深 进行渲染所需时间。 |
RPComposite | 在复合着色器中生成最终视窗图像所需时间(在后期处理之前)。 |
RPRefraction | 对折射材质进行渲染所需时间。 |
RPOcclusion | 对环境遮挡及全局照明进行渲染所需时间。 |
RPRender | 对Render后期处理材质进行渲染时所需时间。 |
RPPost | 对Post 后期处理材质进行渲染所需时间。 |
RPHDR | 对HDR效果进行渲染所需时间。 |
RPGlow | 对发光效果进行渲染所需时间。 |
RPVelocity | 对使用移动物体造成运动模糊效果的速度缓存模块进行渲染所需时间。 |
RPAuxiliary | 对辅助通路进行渲染所需的时间。 |
RPShadowWorldIntersection | 找到从 世界光源进行阴影投射且在当前视见体中可见的物体所需时间。 |
RPShadowWorldRender | 若有地话,对来自 世界光 源的阴影贴图进行渲染所需时间。 |
RPShadowProjIntersection | 找到从 投影光源进行阴影投射且在当前视见体中可见的物体所需时间。 |
RPShadowProjRender | 若有地话,对来自 投影光 源的阴影贴图进行渲染所需时间。 |
RPShadowOnmiIntersection | 找到从 全方位光源进行阴影投射且在当前视见体中可见的物体所需时间。 |
RPShadowOmniRender | 若有地话,对来自 全方位光 源的阴影贴图进行渲染所需时间。 |