Rendering Profiler 显示有关 CPU 和 GPU 为渲染场景完成的工作的渲染统计信息和信息。您可以使用这些统计信息来衡量场景不同区域的资源强度,这对优化很有用。
该图表显示您的应用程序渲染的批次 (Batches)、SetPass 调用 (SetPass Calls)、三角形 (Triangles) 和顶点 (Vertices) 的数量。下方的面板将显示更多渲染统计信息,这些统计信息与 GameView Rendering Statistics 窗口中显示的统计信息一致。
。
Rendering Profiler 模块的图表分为四个类别:
图表 | 描述 |
---|---|
Batches Count | Unity 在一帧内处理的批次数。 |
SetPass Calls Count | Unity 在一帧中切换用于渲染游戏对象的着色器通道的次数。一个着色器可能包含多个着色器通道,每个通道以不同的方式渲染场景中的游戏对象。 |
Triangles Count | Unity 在一帧内处理的三角形数。 |
Vertices Count | Unity 在一帧内处理的顶点数。 |
当您单击 Rendering Profiler 模块时,窗口下半部分的详细信息窗格会显示详细的渲染统计信息。这些统计数据类似于 Rendering Statistics 窗口中显示的内容。
在详细信息窗格的左上角,选择 Open Frame Debugger 以打开帧调试器,它为您提供有关渲染帧的各个绘制调用的信息。
这些统计信息也可通过 ProfilerRecorder API 及 Profiler Module Editor 获得,因此您可以将它们添加到自定义性能分析器模块中。
统计信息 | 描述 | 在发行版播放器中可访问 |
---|---|---|
SetPass Calls Count | Unity 在一帧中切换用于渲染游戏对象的着色器通道的次数。一个着色器可能包含多个着色器通道,每个通道以不同的方式渲染场景中的游戏对象。 | 是 |
Draw Calls Count | Unity 在一帧内发出的绘制调用总数。Unity 在将游戏对象渲染到屏幕时发出绘制调用。这个数字包括非批量绘制调用以及动态和静态批量绘制调用。 | 是 |
Total Batches Count | Unity 在一帧内处理的批次总数。这个数字包括静态和动态批次。 | 是 |
Triangles Count | Unity 在一帧内处理的三角形数。 | 是 |
Vertices Count | Unity 在帧期间处理的顶点数。 | 是 |
(Dynamic Batching) | 本部分包含有关动态批处理的统计数据。 | 否 |
Dynamic Batched Draw Calls Count | Unity 合并为动态批次的绘制调用数。 | 否 |
Dynamic Batches Count | Unity 在帧期间处理的动态批次数。 | 否 |
Dynamic Batched Triangles Count | 动态批次中包含的游戏对象中的三角形数。 | 否 |
Dynamic Batched Vertices Count | 动态批次中包含的游戏对象中的顶点数。 | 否 |
Dynamic Batching Time | Unity 创建动态批处理结构所花费的时间。 | 否 |
(Static Batching) | 本部分包含有关静态批处理的统计数据。 | 否 |
Static Batched Draw Calls Count | Unity 合并为静态批次的绘制调用数。 | 否 |
Static Batches Count | Unity 在一帧内处理的静态批次数。 | 否 |
Static Batched Triangles Count | 静态批次中包含的游戏对象中的三角形数。 | 否 |
Static Batched Vertices Count | 静态批次中包含的游戏对象中的顶点数。 | 否 |
(Instancing) | 本部分包含有关 GPU 实例化的统计数据。 | 否 |
Instanced Batched Draw Calls Count | Unity 合并为实例化批次的绘制调用数。 | 否 |
Instanced Batches Count | Unity 在一帧内渲染实例化游戏对象的处理批次数。 | 否 |
Instanced Batched Triangles Count | 实例化游戏对象中的三角形数。 | 否 |
Instanced Batched Vertices Count | 实例化游戏对象中的顶点数。 | 否 |
Used Textures Count Used Textures Bytes |
Unity 在帧期间使用的纹理数以及纹理使用的内存量。 | 否 |
Render Textures Count Render Textures Bytes |
Unity 在帧期间使用的 RenderTextures 数以及 RenderTextures 使用的内存量。 | 是 |
Render Textures Changes Count | Unity 在帧期间将一个或多个 RenderTextures 设置为渲染目标的次数。 | 是 |
Used Buffers Count Used Buffers Bytes |
所使用的 GPU 缓冲区和内存的总数。这包括顶点、索引和计算缓冲区以及渲染所需的所有内部缓冲区。 | 是 |
Vertex Buffer Upload In Frame Count Vertex Buffer Upload In Frame Bytes |
CPU 在帧中上传到 GPU 的几何体数量。这代表顶点/法线/ texcoord 数据。GPU 上可能已经有一些几何体。此统计信息仅包括 Unity 在帧中传输的几何体。 | 是 |
Index Buffer Upload In Frame Count Index Buffer Upload In Frame Bytes |
CPU 在帧中上传到 GPU 的几何体数量。这表示三角形索引数据。GPU 上可能已经有一些几何体。此统计信息仅包括 Unity 在帧中传输的几何体。 | 是 |
Shadow Casters Count | 在一帧中投射阴影的游戏对象的数量。如果一个游戏对象投射多个阴影(因为多个光源照亮它),该对象投射的每个阴影都有一个条目。 | 是 |
Rendering 模块的 Profiler 计数器也可在播放器中使用。使用 ProfilerRecorder API 访问播放器中的 Render Profiler 模块信息。发行版播放器中还提供了高级计数器。
以下示例包含一个简单的脚本,该脚本收集“SetPass Calls Count”、“Draw Calls Count” 和 “Vertices Count”指标并将其显示为 TextArea。
using System.Text;
using Unity.Profiling;
using UnityEngine;
public class RenderStatsScript : MonoBehaviour
{
string statsText;
ProfilerRecorder setPassCallsRecorder;
ProfilerRecorder drawCallsRecorder;
ProfilerRecorder verticesRecorder;
void OnEnable()
{
setPassCallsRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "SetPass Calls Count");
drawCallsRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "Draw Calls Count");
verticesRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Render, "Vertices Count");
}
void OnDisable()
{
setPassCallsRecorder.Dispose();
drawCallsRecorder.Dispose();
verticesRecorder.Dispose();
}
void Update()
{
var sb = new StringBuilder(500);
if (setPassCallsRecorder.Valid)
sb.AppendLine($"SetPass Calls: {setPassCallsRecorder.LastValue}");
if (drawCallsRecorder.Valid)
sb.AppendLine($"Draw Calls: {drawCallsRecorder.LastValue}");
if (verticesRecorder.Valid)
sb.AppendLine($"Vertices: {verticesRecorder.LastValue}");
statsText = sb.ToString();
}
void OnGUI()
{
GUI.TextArea(new Rect(10, 30, 250, 50), statsText);
}
}
Rendering Profiler 模块信息属于 ProfilerCategory.Render 性能分析器类别。
如果要在自定义模块中突出显示选定的渲染计数器,请使用 Module Editor 配置图表及详细视图。