VS2017下用Graphics Debugger调试UnityShader


第一步,为shader加特殊代码

为需要断点的Shader加上 “#pragma enable_d3d11_debug_symbols”,如下所示:
Shader "Unlit/NewUnlitShader"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
	}
	SubShader
	{
		Tags { "RenderType"="Opaque" }
		LOD 100

		Pass
		{
			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 texture
				fixed4 col = tex2D(_MainTex, i.uv);
				// apply fog
				UNITY_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

以后可能会很少写博客了,因为太浪费时间了。

猜你喜欢

转载自blog.csdn.net/qq_29523119/article/details/78409811
今日推荐