profiler-RenderDoc使用之unity篇

调试 unity 的渲染. 使用第三方工具 RenderDoc, 这是一个 MIT 开源协议的开源项目.
可以调试查看 某个 vertex, fragment 的 汇编指令 及 一些变量值.
以及查看 渲染 管线各个阶段的一些数据, 非常强大.


前篇


安装使用

  1. 先去官网下 RenderDoc 安装, 传送门: https://renderdoc.org/builds. 这里我下载 安装版的 Installer

  2. 重新打开unity项目, 在 game 或 scene 窗口中右键 load render doc. 会在该窗口的 tool bar 中多一个 renderdoc 的 icon

  3. 点击 icon. 就完成了一帧的抓取

  4. 然后双击抓到的帧, 就可以进去调试了. 参考: 抓帧分析


抓帧分析

  1. 找到 主摄像 渲染的节点

    上面这一栏也可以找到, 这里找感觉比较快点

  2. 这里可以分 像素调试 和 顶点调试

    找到要调试 批次, 在中间窗口 ( 这个其实是右边 outputs 中点击后出现的 ) 可以看到该批次执行后 帧缓存 的效果.

    • 像素调试, 在 texture viewer 中.

      右键 会选着一个像素, 然后点击 debug 调试该像素.

      这一栏是调试栏

      • run backwards ( shift + f5 ) : 回到调试第一步
      • step back ( shift + f10 ) : 回到上一步
      • step next ( f10 ) : 往下走一步
      • run forwards ( f5) : 直接走到最后一步结算此处调试
      • run to cursor : 走到当前 光标 所在的步
      • f9 键可以在当前步 设置/取消 断点

      这些快捷键都和 vs 调试一样.

    • 顶点调试, 在 mesh viewer 中,

      选中一个顶点, 右键 debug this vertex 进行调试


实例测试

参考总结: unity-shader-GPU优化.md

测试一个 if 分支的编译后的指令

1
2
3
4
5
6
7
8
const float _ConstHeight = -1;
float a = 0.2;
// if (a < _ConstHeight) { // 完全静态
if (i.uv.y < _ConstHeight) { // 动静态
col *= fixed4(1, 0, 0, 1);
} else {
col *= fixed4(0, 1, 0, 1);
}

左边是 完全静态 分支, 右边是 动静态 分支 ( 使用的是 RenderDoc )

可以看出, 动态分支 会把所有的分支代码都跑一边, 而 静态分支 只跑符合 true 条件的分支.