跳转到内容

帧调试器

帧调试器回答“这一帧为什么有这么多 draw call”。它捕获一帧,按顺序列出每个 draw call, 并给出每个 draw 为什么开了新批——着色器、混合模式、材质、纹理、裁剪矩形不同等等。 它是 SDK 在性能剖析与诊断里那套帧捕获的编辑器视图。

用 窗口 → 帧调试器 打开,或在命令面板里搜帧调试器。它停靠在性能分析器旁边。

  1. 选捕获对象:视口(编辑器自己的画面)、运行中的游戏(Play 时)、设备(已连接的设备预览)。
  2. 点捕获一帧。面板把这一帧列成一个或多个 pass——每台相机一个相机 pass, 再加一个画在最上面的屏幕叠加层 pass——并显示各自的 draw 数。

捕获是快照。之后场景变了,面板会提示;重新捕获即可看新的一帧。

每一行是一个 draw call:

列 含义
类型 画的是什么——精灵、文字、网格、瓦片块、特效……
断批原因 这个 draw 为什么没能并进上一个。
内容 画了什么:材质、着色器、纹理。
三角形 三角形数。

列表上方的断批原因标签可以只看某一种原因。常见的有:

  • 所在 pass 的第一个 draw——没东西可合;每个 pass 都有一个。
  • 着色器 / 材质 / 混合模式——相邻 draw 用了不同的。把同类 draw 排在一起,或共用材质,可以消除。
  • 纹理槽位——上一个 draw 已用满纹理槽。把精灵打进更少的图集有帮助。
  • 裁剪 / 模板——两个 draw 之间 UI 遮罩或裁剪区域变了。
  • 深度 / 剔除 / 渲染状态——深度测试、背面剔除或自定义状态不同。
  • 顶点布局 / 索引不连续——几何体种类不同,放不进同一段缓冲。

点一行,或用上一个 draw / 下一个 draw 逐个走,可以看到它的详情:材质、着色器、纹理、 三角形、实例数、层、裁剪矩形和模板,以及它画的实体(在大纲中选中可以跳到该实体)。 没有实体的 draw——文字、辅助图形、特效——会明说。

视口还能把画面重放到所选 draw,让你看到画到那一步时的样子。draw 无法重放时,面板会告诉你, 而不是给出一张错误的图。

  • 捕获繁忙的一帧而不是空闲帧,先看标签——通常一种原因占大头。
  • UI 画布的 pass 里一大串混合模式和材质断批,说明不同种类的控件交错排列;调整兄弟节点顺序或合并材质。
  • 配合性能分析器和静态合并: 帧调试器告诉你 draw 为什么拆开,其余的告诉你有多少、合并省了多少。