unity中使用调试shader工具RenderDoc

shader veyvin 4606℃ 0评论
文章目录[隐藏]
本文最后更新于2020年8月2日 13:12,如果文章内容失效,请反馈给我们,谢谢!

RenderDoc是Cryengine团队的作品,包含在cry引擎中.作用是用来调试shader的,目前(0.34)支持 Vulkan, D3D11, D3D12, windows ?和linux上的 OpenGL .

RenderDoc工作原理

捕获日志

以下是不可视的数据

  • 我们设置好unity的图形API,当我们切换到dx11时,相当于初始化dx11驱动
  • 这是驱动会hook图形API,
  • 运行程序,按下RenderDoc的捕获按钮,驱动会记录下一帧的API调用情况
  • 将数据存储下来

重放和分析日志

以下这些数据是我们在RenderDoc中可视化的数据

  • 载入存储下来的数据(一帧的图形API调用数据)
  • 分析依赖关系,并检查每次调用时使用哪个资源来读取写入
  • 重新对事件进行重新处理
  • 从帧开始重新播放,将所有的资源初始化,恢复初始的渲染管道状态
  • 因为重现了这一帧的调用,因此我们可以修改这一帧调用API(比如将一个红色物体改为蓝色)

windbg验证

Windbg数据

红色为驱动程序的初始化,和hook图形API

蓝色为抓取一帧的渲染数据

橙色表示序列化抓到的数据

绿色表示压缩序列化后的数据,并保存在硬盘

粉色表示启动renderDoc程序

双击捕获数据,开始解压缩,并读取数据

我们的视图中有浏览图片的,一帧分为很多个事件,事件从初始化开始

首先分配显存空间

EID为事件的ID,选中事件后在 缓存 纹理 mesh pipeline视图显示当前事件所做的工作

在事件下面我们还可以看到当前事件调用的图形API

在319事件的时候 显存全被绘制了一边, 之后还有混合,深度 显存里的数据会有所改变

选择事件后在渲染管线视图可以看到当前渲染用到的hlsl文件

总结

我们在unity选择vulkan opengl dx12(命令行强制开启) 事件所调用的API就变成了相应驱动后的图形API,通过工具我们可以清楚的看到渲染的流程,熟悉了结图形学的原理.

转载请注明:veyvin » unity中使用调试shader工具RenderDoc

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址