Shader的调试有点蛋疼,最近在测试Image Effect中深度还原时,不知道输出的结论是否正确,后面就采取了这种策略。在物体上世界坐标位转换区间到[0,1],然后作为颜色进行输出。然后Image Effect shader中也采用类似的方式进行输出,通过颜色进行比较。需要注意的是:颜色区间,比如将世界坐标转换到颜色空间,可以按法线的方式先归一化转换到[-1,1],再转换到[0,1]。
类似的做法可以参考《Shader入门》第五章,,并且。
Shader "Unlit/ObjectTestColor"{ SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex object_vert #pragma fragment object_frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; }; struct v2f { float4 vertex : SV_POSITION; float4 clippos : TEXCOORD0; float4 worldPos : TEXCOORD1; float4 depth : TEXCOORD2; }; v2f object_vert (appdata v) { v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.clippos = o.vertex ; o.depth.x = COMPUTE_DEPTH_01; o.worldPos = mul(_Object2World, v.vertex); return o; } fixed4 object_frag (v2f i) : SV_Target { //NDC深度 //fixed4 ndc = i.clippos / i.clippos.w ; //float d = ndc * 0.5 + 0.5 ; //return fixed4(d,d,d,1); //View空间深度 //float viewdDepth = i.depth.x * 10; //return fixed4(viewdDepth,viewdDepth,viewdDepth,1) ; //世界坐标 float dis = length(i.worldPos.xyz); float3 worldPos2 = i.worldPos.xyz/dis; worldPos2 = worldPos2 * 0.5 + 0.5; return fixed4(worldPos2,1); } ENDCG } } FallBack "Diffuse"}