@@ -8,8 +8,8 @@ Shader "Hidden/VXGI/Voxelization"
88 Tags { "LightMode" ="Voxelization" }
99
1010 Cull Off
11- ZWrite Off
1211 ZTest Always
12+ ZWrite Off
1313
1414 HLSLPROGRAM
1515 #pragma require geometry
@@ -18,6 +18,7 @@ Shader "Hidden/VXGI/Voxelization"
1818 #pragma geometry geom
1919 #pragma fragment frag
2020 #pragma shader_feature _EMISSION
21+ #pragma shader_feature_local _METALLICGLOSSMAP
2122
2223 #include "UnityCG.cginc"
2324 #include "Packages/com.looooong.srp.vxgi/ShaderLibrary/Variables.cginc"
@@ -29,18 +30,14 @@ Shader "Hidden/VXGI/Voxelization"
2930
3031 CBUFFER_START (UnityPerMaterial)
3132 half4 _Color;
33+ half3 _EmissionColor;
3234 float4 _MainTex_ST;
3335 half _Metallic;
34- half3 _EmissionColor;
3536 CBUFFER_END
3637
38+ sampler2D _EmissionMap;
3739 sampler2D _MainTex;
3840 sampler2D _MetallicGlossMap;
39- sampler2D _EmissionMap;
40-
41- // Map depth [0, 1] to Z coordinate [0, Resolution)
42- static float DepthResolution = Resolution * 0.99999999 ;
43- float4x4 VoxelToProjection;
4441
4542 AppendStructuredBuffer <VoxelData> VoxelBuffer;
4643
@@ -62,9 +59,14 @@ Shader "Hidden/VXGI/Voxelization"
6259 v2g vert (appdata_base v)
6360 {
6461 v2g o;
65- o.vertex = mul (WorldToVoxel, mul ( unity_ObjectToWorld , v.vertex) );
62+ o.vertex = UnityObjectToClipPos ( v.vertex);
6663 o.normal = UnityObjectToWorldNormal (v.normal);
6764 o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
65+
66+ #ifdef UNITY_REVERSED_Z
67+ o.vertex.z = mad (o.vertex.z, -2.0 , 1.0 );
68+ #endif
69+
6870 return o;
6971 }
7072
@@ -107,11 +109,15 @@ Shader "Hidden/VXGI/Voxelization"
107109 for (int j = 0 ; j < 3 ; j++) {
108110 g2f o;
109111
110- o.position = mul (VoxelToProjection, float4 (SwizzleAxis (i[j].vertex, axis), 1.0 ) );
112+ o.position = float4 (SwizzleAxis (i[j].vertex, axis), 1.0 );
111113
112- #if defined (UNITY_REVERSED_Z )
113- o.position.z = 1.0 - o.position.z;
114- #endif
114+ #ifdef UNITY_UV_STARTS_AT_TOP
115+ o.position.y = -o.position.y;
116+ #endif
117+
118+ #ifdef UNITY_REVERSED_Z
119+ o.position.z = mad (o.position.z, 0.5 , 0.5 );
120+ #endif
115121
116122 o.normal = i[j].normal;
117123 o.axis = axis;
@@ -145,23 +151,25 @@ Shader "Hidden/VXGI/Voxelization"
145151
146152 fixed frag (g2f i) : SV_TARGET
147153 {
148- #ifdef _METALLICGLOSSMAP
149- float metallic = tex2D (_MetallicGlossMap, i.uv).r;
150- #else
151- float metallic = _Metallic;
152- #endif
154+ #ifdef _METALLICGLOSSMAP
155+ float metallic = tex2D (_MetallicGlossMap, i.uv).r;
156+ #else
157+ float metallic = _Metallic;
158+ #endif
153159
154160 i.normal = normalize (i.normal);
155161
156- #ifdef _EMISSION
157- float3 emission = _EmissionColor * tex2Dlod (_EmissionMap, float4 (i.uv, 0.0 , 0.0 ));
158- #else
159- float3 emission = 0.0 ;
160- #endif
162+ #ifdef _EMISSION
163+ float3 emission = _EmissionColor * tex2Dlod (_EmissionMap, float4 (i.uv, 0.0 , 0.0 ));
164+ #else
165+ float3 emission = 0.0 ;
166+ #endif
167+
168+ float3 voxelPosition = float3 (i.position.xy, i.position.z * Resolution);
161169
162170 VoxelData d;
163171 d.Initialize ();
164- d.SetPosition (RestoreAxis (float3 (i.position.xy, i.position.z * DepthResolution) , i.axis));
172+ d.SetPosition (RestoreAxis (voxelPosition , i.axis));
165173 d.SetNormal (i.normal);
166174 d.SetColor (mad (-0.5 , metallic, 1.0 ) * _Color * tex2Dlod (_MainTex, float4 (i.uv, 0.0 , 0.0 )));
167175 d.SetEmission (emission + ShadeSH9 (float4 (i.normal, 1.0 )));
0 commit comments