Shader的調試有點蛋疼,最近在測試Image Effect中深度還原時,不知道輸出的結論是否正確,後面就採起了這種策略。在物體上世界座標位轉換區間到[0,1],而後做爲顏色進行輸出。而後Image Effect shader中也採用相似的方式進行輸出,經過顏色進行比較。須要注意的是:顏色區間,好比將世界座標轉換到顏色空間,能夠按法線的方式先歸一化轉換到[-1,1],再轉換到[0,1]。git
相似的作法能夠參考《Shader入門》第五章,shader源碼,而且提供了一個工具,用於顏色抓取。github
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" }