Renderdoc调试总结
Renderdoc调试总结
https://www.jianshu.com/p/7587dc0a42f4
renderdoc调试总结
http://aicdg.com/renderdoc-hlsl/
λ
- 1
- /renderdoc-hlsl/
- ⌘ blogspace λ
- * Menu
- utf-8
- web
- .html
- 1 home
- 2 my posts
- 3 categories
- 4 tags
- 5 about me
- g github
- o old blog
- s search
- f blogroll
- H He-tao's blog
- C Mictus's website
- K Rainbow's blog
03 Aug 2018
renderdoc调试总结
- renderdoc 调试 UE4 shader
- renderdoc 分析应用程序
- renderdoc 分析 directx11
- renderdoc 分析 openGL
- renderdoc 分析 vulkan
- renderdoc 调试 unity shaderlab
最近抽时间研究了一下 renderdoc 单步调试 HLSL 的方法。然后为了解决升级 UE4.20 后某些材质变得诡异的问题,又研究了一下如何调试 UE shader 的方法,真的把自己折腾的够呛,很感谢天美的一位前辈的指点,让我茅塞顿开。
renderdoc 调试 UE4 shader
renderdoc调试HLSL是支持单步调试的,但是调试UE4的时候很多人只能看到汇编(DXBC),不能看到源码,这是因为UE4 ShaderCompileWorker默认是生成优化且不保存调试符号的DXBC文件,只要调整配置将HLSL调试信息保留且取消编译器优化即可。
首先编辑 引擎目录 下的 Config/ConsoleVariable.ini
文件。
仔细阅读注释说明,保留HLSL调试信息并关闭HLSL编译器优化。
之后打开UE4内置的 renderdoc 插件。在 Edit -> Plugins 的内置插件(Built-in)中搜索 renderdoc 插件。
开启后重启并编译插件,之后可以在Editor viewer的右上角发现renderdoc的图标。
点击该图标,即可完成抓帧。在Event brower中定位到需要分析的drawCall。
在tone mapping之前颜色偏暗看不清,可以重新映射颜色范围。
用鼠标右键在 Texture Viewer 的 Output 中定位到要调试的像素,然后点击 Pixel Context 中的 debug 按钮即可开始调试(请务必确保该 drawcall 影响该 pixel,否则还是会显示该pixel的pixel history)
之后即可开始单步调试HLSL。调试非常方便,不仅可以step forward,还可以step backward。并且存在超方便的功能run to cursor,只要鼠标定位到要执行到的行数即可,连断点都可以不打。双击寄存器可以在变量(Variables面板中高亮变量),当然悬停也可以显示变量值。
其实不仅可以调试,还可以实时修改 shader,之后刷新就能看到效果。比如我把绘制人物的shader改为直接显示红色。
dx11(sm5)下默认使用延迟渲染,OutTarget0是color attachment
人物材质被修改后的效果可以在Texture viewer中查看。这个功能很便于开发shader,避免反复编译/重启游戏浪费时间。
renderdoc 分析应用程序
很多时候需要用 renderdoc 分析自己或别人的程序。我把 UE4 的 ThirdPerson demo 做了个二进制包,使用 dx11(sm5), openGL(es31),vulkan(es31)
renderdoc 分析 directx11
renderdoc选择应用程序,然后点击Launch运行。
寻找要 debug 的 pixel 和 drawCall。可以通过线选择要debug的pixel,然后通过pixel history快速定位到要debug的drawCall
然后点击 Pixel Context 中的 debug 按钮即可开始调试。
可以在右上角的 Debug in Assembly 和 Debug in HLSL 之间切换来选择单步调试的方式。
renderdoc 分析 openGL
renderdoc选择应用程序,然后运行。UE4的项目可以命令行参数 -opengl
强制使用openGL渲染。
抓一帧进行分析。
如果贴图上下颠倒可以参考 renderdoc 调试 unity shaderlab
renderdoc是不能单步调试GLSL的。。。
GLSL不支持单步调试,但是实时修改用假彩色图像调试的方法还是支持的。在Pipeline State中点击Fragment Shader然后点Edit。
修改shader,按refresh或者直接按f5刷新
在Texture viewer中查看
renderdoc 分析 vulkan
renderdoc选择应用程序,然后运行。UE4的项目可以命令行参数 -vulkan
强制使用Vulkan渲染。
renderdoc也不支持spir-v的调试,但是支持将spir-v反编译为glsl方便查看。也就是说vulkan也能使用类似openGL的分析方法。
renderdoc 调试 unity shaderlab
之前说过renderdoc支持调试HLSL,unity shaderlab使用的表面上是CG,实质上是HLSL,所以当然可以用renderdoc单步调试unity shaderlab。
虽然unity也内置了帧分析器,但是感觉还是不够强大,除了replay功能之外缺失还是太多。
要在unity中启用renderdoc支持,首先要在game窗口上右键,选择 load renderdoc
之后再game窗口右上角可以看见renderdoc的图标
点击图标完成抓帧,其中Camera.Render是game窗口的内容
定位到具体的drawCall,如果发现texture output上下颠倒可以使用 Flip the texture in the Y axis。
UE4 以 dx 的窗口系为标准,所以 openGL 模式下上下颠倒。Unity则相反,以 openGL 窗口为标准,在 DX 下会上下颠倒。
用鼠标右键在 Texture Viewer 的 Output 中定位到要调试的像素,
然后点击 Pixel Context 中的 debug 按钮即可开始愉快的单步调试
如果发现 debug 的shader只有汇编(DXBC)没有源代码(HLSL),这是因为 shaderlab 编译时没有保存调试符号,在shader文件的 CGPROGRAM
块中键入:
#pragma enable_d3d11_debug_symbols
Share
Comments
Made with
Renderdoc调试总结相关推荐
- 使用 RenderDoc 调试 Vulkan 程序
前言 在 RenderDoc 出现之前,我们很难有一个好的方法来调试 Shader 程序,传统的做法是将一些调试信息以纹理的形式渲染到屏幕空间来供我们检查,例如将将坐标信息映射成 RGB. 但是这种做 ...
- RenderDoc 调试web
由于学习闫老师的GAMES202 用到了webgl所以需要webgl抓帧调试一下~ 配置: 会弹出小窗口,记住PID: 然后files->inject into process 输进去刚刚小窗口 ...
- RenderDoc[01] 使用RenderDoc 分析Android游戏(免Root)
1.背景 这几天玩了一个美术表现不错的游戏,忍不住想扒点模型资源和效果. 直接用UnityStudio解包拿到fbx. 但是一起解压出来的三张贴图,一张普通贴图,一张法线,还有一张就难住我了. 这个绿 ...
- Unity shader build 打包android和PC机显示效果不一样
做了一个次表面皮肤SSSS效果,发现PC正常,打包到andoird机上这个功能就消失了,很奇怪,下面写一个一一排除的过程 CPU代码方面 一开始以为是rendertexture dont care的问 ...
- unity升级版本后华为手机特效问题
最近参与的一个旧项目由5.5升级到了2020,遇到了一些问题,主要是特效的,稍微记录一下. 一.材质球丢失问题 这个很经典,就不讲了,找美术重新拖一下就行. 二.场景变暗了 这个查了下网上说是因为un ...
- Vulkan_渲染可视化调试(VK_EXT_debug_marker与RenderDoc离线图形调试)
在使用vulkan实现各项渲染工作的时候,我们经常会因为各种不经意的坑导致渲染失败,所以调试工作就尤为重要,所以今天我们就来说一下如何可视化vulkan的各项进程来调试程序. 一.简介 首先我们来说一 ...
- OpenGL——调试软件RenderDoc的使用
调试工具对OpenGL函数使用进行性能测试,寻找瓶颈,检查缓冲内存,显示纹理和帧缓冲区附件,这对开发过程中是非常有用的. RenderDoc Renderdoc™是一款独立程序,它可以在任何使用Dir ...
- Renderdoc 帧调试器
注意,本文只适用于分析/Debug 自己的应用 https://renderdoc.org/docs/window/event_browser.html#browsing-the-frame http ...
- OpenGL 调试Debugging
OpenGL调试Debugging 调试Debugging简介 glGetError() 调试输出 GLFW中的调试输出 过滤调试输出 回溯调试错误源 调试着色器输出 OpenGL GLSL参考编译器 ...
- OpenGL基础56:OpenGL简单调试
图形编程想要调试并不是一件容易的事,有的时候渲染出全黑的结果基本上只能凭经验来查错,特别是对于着色器,断点日志都是无效的,因此想办法掌握一些调试方法还是有必要的,不然找错误的源头可能真的会非常困难 一 ...
最新文章
- java 顺序栈_java用顺序栈实现数制转换 求完整程序!!
- 安装包镜像_创建 macOS Catalina cdr格式镜像安装包
- 简单的启动代码 IMPORT |Image$$RO$$Limit|
- 判定重大风险有哪几种_化工生产安全管理信息化平台可以解决哪些重大问题
- numpy 读取txt为array 一行搞定
- JNDI的XML相关配置(context.xml和web.xml)
- Qt 常用类——QStandardItemModel
- “左手5G右手AI”,任正非推崇的王喜文在华为这样说
- LintCode-244.删除字符
- ios9 字符串与UTF-8 互相转换
- JSON对象中的JSONObject和JSONArray以及与Map、String、数组的转化
- 调用feign接口时,如何往header中添加参数
- oracle 11g rac 环境(1)
- CABasicAnimation 按home键后台之后,再切回来动画就停止
- java 数学基础_Java中的基础数学
- 同花顺python_同花顺有python接口_基于python的炒股软件
- 《SiamFC++:Towards Robust and Accurate Visual Tracking with Target Estimation Guidelines》论文笔记
- hivesql解析json格式的key与value
- 如何测试工业以太网线缆(利用FLUKE DSX-8000)?
- 计算机无法更改开机密码,不能修改win7电脑开机密码是怎么回事