HBAO_Deinterleaving.cginc 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef HBAO_DEINTERLEAVING_INCLUDED
  2. #define HBAO_DEINTERLEAVING_INCLUDED
  3. #include "HBAO_Common.cginc"
  4. struct DeinterleavedOutput {
  5. float4 Z00 : SV_Target0;
  6. float4 Z10 : SV_Target1;
  7. float4 Z01 : SV_Target2;
  8. float4 Z11 : SV_Target3;
  9. };
  10. DeinterleavedOutput DeinterleaveDepth_Frag(Varyings input)
  11. {
  12. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
  13. DeinterleavedOutput o;
  14. float2 pos = floor(input.uv * _DeinterleavedAO_TexelSize.zw) * 4.0;
  15. float2 uv00 = (pos + _Deinterleave_Offset00 + 0.5) * _ReinterleavedAO_TexelSize.xy;
  16. float2 uv10 = (pos + _Deinterleave_Offset10 + 0.5) * _ReinterleavedAO_TexelSize.xy;
  17. float2 uv01 = (pos + _Deinterleave_Offset01 + 0.5) * _ReinterleavedAO_TexelSize.xy;
  18. float2 uv11 = (pos + _Deinterleave_Offset11 + 0.5) * _ReinterleavedAO_TexelSize.xy;
  19. o.Z00 = FetchRawDepth(uv00).rrrr;
  20. o.Z10 = FetchRawDepth(uv10).rrrr;
  21. o.Z01 = FetchRawDepth(uv01).rrrr;
  22. o.Z11 = FetchRawDepth(uv11).rrrr;
  23. return o;
  24. }
  25. DeinterleavedOutput DeinterleaveNormals_Frag(Varyings input)
  26. {
  27. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
  28. DeinterleavedOutput o;
  29. float2 pos = floor(input.uv * _DeinterleavedAO_TexelSize.zw) * 4.0;
  30. float2 uv00 = (pos + _Deinterleave_Offset00 + 0.5) * _ReinterleavedAO_TexelSize.xy;
  31. float2 uv10 = (pos + _Deinterleave_Offset10 + 0.5) * _ReinterleavedAO_TexelSize.xy;
  32. float2 uv01 = (pos + _Deinterleave_Offset01 + 0.5) * _ReinterleavedAO_TexelSize.xy;
  33. float2 uv11 = (pos + _Deinterleave_Offset11 + 0.5) * _ReinterleavedAO_TexelSize.xy;
  34. o.Z00 = float4(FetchViewNormals(uv00, _ReinterleavedAO_TexelSize.xy) * 0.5 + 0.5, 0);
  35. o.Z10 = float4(FetchViewNormals(uv10, _ReinterleavedAO_TexelSize.xy) * 0.5 + 0.5, 0);
  36. o.Z01 = float4(FetchViewNormals(uv01, _ReinterleavedAO_TexelSize.xy) * 0.5 + 0.5, 0);
  37. o.Z11 = float4(FetchViewNormals(uv11, _ReinterleavedAO_TexelSize.xy) * 0.5 + 0.5, 0);
  38. return o;
  39. }
  40. half4 ReinterleaveAO_Frag(Varyings input) : SV_Target
  41. {
  42. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
  43. float2 offset = fmod(floor(input.uv * _ReinterleavedAO_TexelSize.zw), 4.0);
  44. float2 uv = (floor(input.uv * _DeinterleavedAO_TexelSize.zw) + (offset * _DeinterleavedAO_TexelSize.zw) + 0.5) * _ReinterleavedAO_TexelSize.xy;
  45. return UNITY_SAMPLE_SCREENSPACE_TEXTURE(_MainTex, uv);
  46. }
  47. #endif // HBAO_DEINTERLEAVING_INCLUDED