VS2017下用Graphics Debugger调试UnityShader

来源:互联网 发布:js冒泡事件是什么意思 编辑:程序博客网 时间:2024/06/06 02:28


第一步,为shader加特殊代码

为需要断点的Shader加上 “#pragma enable_d3d11_debug_symbols”,如下所示:
Shader "Unlit/NewUnlitShader"{Properties{_MainTex ("Texture", 2D) = "white" {}}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag// make fog work#pragma multi_compile_fog#pragma enable_d3d11_debug_symbols  //需要断点调试的Shader加上的#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;UNITY_FOG_COORDS(1)float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;v2f vert (appdata v){v2f o;o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);UNITY_TRANSFER_FOG(o,o.vertex);return o;}fixed4 frag (v2f i) : SV_Target{// sample the texturefixed4 col = tex2D(_MainTex, i.uv);// apply fogUNITY_APPLY_FOG(i.fogCoord, col);return col;}ENDCG}}}




第二步,打包程序到PC平台,变为 exe 执行文件







第三步,打开VS2017,新建一个C++空项目,然后点击: 文件->打开->项目/解决方案,直接打开刚才打包出来的 test.exe 文件,得到的如下所示:





第四步,点击VS2017的开始调试图形功能,也就是:  调试->图形->启动图形调试(Alt+F5),得到下面的




然后点击开始的按钮,等进入游戏后,进行截屏,可以直接用截屏按钮或者点击捕获帧数,得到如下所示:




双击 10:35:47 的那帧画面,进入 debug 界面,如下所示:




在“呈现目标”面板选中一个像素,然后点击“”像素历史记录“”的面板的小绿色三角形按钮,可以进入VertexShader或者PixelShader 来断点查看具体的参数,如下所示:







最后还需要强调的问题

(1)注意打包的 exe 执行程序是在PC平台上的,因为PC平台上运行的是Directx11,而VS的Graphics Debugger就是为 Directx 的调试专用的。
(2)注意在需要断点调试的Shader加上 “‘#pragma enable_d3d11_debug_symbols”,不加的话,会在查看VertexShader或者PixelShader的具体参数时跳出下面这个异常:



这跟我的另外一篇博客其实是一个样(VS2015环境下)用Visual Studio Graphics Debugger调试Shader。

以后可能会很少写博客了,因为太浪费时间了。
原创粉丝点击