【Unity Shader】(0)超详细】Unity Shader 的三种调试方法 Graphics Debugger 与 帧调试器

Unity Shader 的三种调试方法

  • 假色彩图像(false-color image)法

  • Graphics Debugger

  • 帧调试器



假彩色图像法

(与之对应的是真彩色图像(true-color image))

  • 使用一张假彩色图像用于可视化数据。由于颜色的分量区间为[ 0 , 1],且当颜色分量小于0时,会被设置为0,颜色分量大于1时,会被设置为1。因此我们需要不断尝试,最后是得我们的颜色能够出现在 [ 0 , 1] 的区间内。

  • 当调试一维数据时,可以选择单独的颜色分量进行输出,而把其他颜色的分量设置为0。
  • 当调试多维数据时,可以选择对它的一个或多个分量进行单独调试。

假颜色图像法的实例代码:

Shader"DebuggerShader/Debugger_FalseColor"{
	SubShader{
		Pass{
			CGPROGRAM

			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			struct v2f {
				float4 pos : SV_POSITION;
				fixed4 color : COLOR0;
			};
			v2f vert(appdata_full v) {
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
				//可视化法线
				o.color = fixed4(v.normal * 0.5 + fixed3(1, 1, 1), 1.0);
				//可视化切线
				o.color = fixed4(v.tangent.xyz * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);
				//可视化副切线
				fixed3 binormal = cross(v.normal, v.tangent.xyz) * v.tangent.w;
				o.color = fixed4(binormal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);
				//可视化第一组纹理坐标
				o.color = fixed4(v.texcoord.xy, 0.0, 1.0);
				//可视化第二组纹理坐标
				o.color = fixed4(v.texcoord1.xy, 0.0, 1.0);

				//可视化第一组纹理坐标的小数部分
				o.color = frac(v.texcoord);
				if (any(saturate(v.texcoord) - v.texcoord))
				o.color.b = 0.5;
				o.color.a = 1.0;

				//可视化第二组纹理坐标的小数部分
				o.color = frac(v.texcoord1);
				if (any(saturate(v.texcoord1) - v.texcoord1))
					o.color.b = 0.5;
				o.color.a = 1.0;

				//可视化顶点颜色
				//o.color = v.color;
				return o;
			}

			fixed4 frag(v2f i) : SV_Target{
				return i.color;
			}

			ENDCG
		}
	}
}


Graphics Debugger

1、编译C#,并配合VS对Unity的shader进行调试,需要先在VS Installer之中安装关于DirectX的独立组件:

gd

2、使用VS新建一个C++的空项目
3、点击该项目中的属性→配置属性→调试
2
在该图中的④中,有两个需要更改的值。
一个是 需要调试的Unity版本,是当前的版本Unity,而不是要调试的某个项目。
二个是 将-force-d3d11填入到 命令参数

4、在VS中点击调试→图形→启动图形调试

3
要注意: 这里新建的是一个C++ 的空项目,而这个项目仅仅只是用来当作DirectX Graphics Debugger的启动窗口兼调试窗口

5、选择需要调试的项目

当得到了这个窗口后,选择Open project

4

6、查看打开的Unity窗口中是否存在如下字样:

45
如果有,那么就已经成功接入该项目。

7、重新编辑本文开头中假彩色图像法的代码进一步测试,添加#pragma enable_d3d11_debug_symbols

如图

8

8、点击键盘上的PrtSc键进行屏幕捕获(笔记本可能需要按住Fn + PrtSc组合键)

6

最终捕获到上图 的左下角的图 双击进入

9、左键选择图像进行调试

9
点击调试 当前顶点

10、此步骤可能存在 反汇编 的问题

10

然后再重新调试

11、Debug Begin!
11




帧调试器

11

打开之后便可以开始调试

12
此处也可以调整Unity的渲染次序。



参考:https://docs.unity3d.com/2019.1/Documentation/Manual/SL-DebuggingD3D11ShadersWithVS.html
参考书籍:《Unity Shader入门精要》人民邮电出版社 冯乐乐著

猜你喜欢

转载自blog.csdn.net/weixin_46840974/article/details/123962713