Unity Shader调试

        Shader可以选择的调试方法非常有限,甚至连简单的输出都不行,一下是一些调试的方法。

        假彩色图像:指用假彩色技术生成的一种图像,把需要调试的变量映射到[0,1]之间,把它们作为颜色输出到屏幕上,然后通过屏幕上显示的像素颜色来判断这个值是否正确。

Shader "Unlit/False Color" {
	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(0.5, 0.5, 0.5), 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
		}
	}
}

        或者可以利用Visual Studio中的Graphics Debugger,可以查看每个像素的最重颜色、位置等信息,还可以对顶点着色器和片元着色器进行单步调试。


         还有一个新的针对渲染的调试器——帧调试器。与其他调试工具的复杂性相比,Unity原生的帧调试器非常简单快捷。我们可以使用它来看到游戏图像的某一帧是如何一步步渲染出来的。

        在Window-Analysis-Frame Debugger打开窗口,点击Enable打开调试功能,通过窗口最上方的滑动条可以重放渲染事件;左侧的区域显示了所有事件的树状图,每个父节点的右侧显示了该节点下的事件数目,当单击某个事件之后,右侧窗口就会出现该事件的细节,例如几何图形的细节以及使用了哪个Shader等。

猜你喜欢

转载自blog.csdn.net/weixin_45081191/article/details/129205188
今日推荐