EnviroVolumetricCloudsDepth.shader 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. Shader "Hidden/EnviroVolumetricCloudsDepth"
  2. {
  3. Properties
  4. {
  5. //_MainTex ("Texture", any) = "white" {}
  6. }
  7. SubShader
  8. {
  9. Tags { "RenderType"="Opaque" }
  10. LOD 100
  11. //Pass 1 downsample
  12. Pass
  13. {
  14. Cull Off ZWrite Off ZTest Always
  15. CGPROGRAM
  16. #pragma vertex vert
  17. #pragma fragment frag
  18. #pragma multi_compile __ ENVIROURP
  19. #include "UnityCG.cginc"
  20. UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
  21. float4 _CameraDepthTexture_TexelSize;
  22. struct appdata
  23. {
  24. float4 vertex : POSITION;
  25. float2 uv : TEXCOORD0;
  26. UNITY_VERTEX_INPUT_INSTANCE_ID
  27. };
  28. struct v2f
  29. {
  30. float2 uv : TEXCOORD0;
  31. float2 uv00 : TEXCOORD1;
  32. float2 uv10 : TEXCOORD2;
  33. float2 uv01 : TEXCOORD3;
  34. float2 uv11 : TEXCOORD4;
  35. float4 vertex : SV_POSITION;
  36. UNITY_VERTEX_OUTPUT_STEREO
  37. };
  38. v2f vert(appdata v)
  39. {
  40. v2f o;
  41. UNITY_SETUP_INSTANCE_ID(v);
  42. UNITY_INITIALIZE_OUTPUT(v2f, o);
  43. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  44. #if defined(ENVIROURP)
  45. o.vertex = float4(v.vertex.xyz,1.0);
  46. #if UNITY_UV_STARTS_AT_TOP
  47. o.vertex.y *= -1;
  48. #endif
  49. #else
  50. o.vertex = UnityObjectToClipPos(v.vertex);
  51. #endif
  52. o.uv = v.uv;
  53. o.uv00 = v.uv - 0.5 * _CameraDepthTexture_TexelSize.xy;
  54. o.uv10 = o.uv00 + float2(_CameraDepthTexture_TexelSize.x, 0.0);
  55. o.uv01 = o.uv00 + float2(0.0, _CameraDepthTexture_TexelSize.y);
  56. o.uv11 = o.uv00 + _CameraDepthTexture_TexelSize.xy;
  57. return o;
  58. }
  59. float frag(v2f i) : SV_Target
  60. {
  61. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
  62. float4 depth;
  63. depth[0] = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,UnityStereoTransformScreenSpaceTex(i.uv00));
  64. depth[1] = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,UnityStereoTransformScreenSpaceTex(i.uv10));
  65. depth[2] = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,UnityStereoTransformScreenSpaceTex(i.uv01));
  66. depth[3] = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,UnityStereoTransformScreenSpaceTex(i.uv11));
  67. return max(depth[0], max(depth[1], max(depth[2], depth[3])));
  68. }
  69. ENDCG
  70. }
  71. //Pass 2 Copy
  72. Pass
  73. {
  74. Cull Off ZWrite Off ZTest Always
  75. CGPROGRAM
  76. #pragma vertex vert
  77. #pragma fragment frag
  78. #pragma multi_compile __ ENVIROURP
  79. #include "UnityCG.cginc"
  80. UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
  81. struct appdata
  82. {
  83. float4 vertex : POSITION;
  84. float2 uv : TEXCOORD0;
  85. UNITY_VERTEX_INPUT_INSTANCE_ID
  86. };
  87. struct v2f
  88. {
  89. float2 uv : TEXCOORD0;
  90. float4 vertex : SV_POSITION;
  91. UNITY_VERTEX_OUTPUT_STEREO
  92. };
  93. v2f vert(appdata v)
  94. {
  95. v2f o;
  96. UNITY_SETUP_INSTANCE_ID(v);
  97. UNITY_INITIALIZE_OUTPUT(v2f, o);
  98. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  99. #if defined(ENVIROURP)
  100. o.vertex = float4(v.vertex.xyz,1.0);
  101. #if UNITY_UV_STARTS_AT_TOP
  102. o.vertex.y *= -1;
  103. #endif
  104. #else
  105. o.vertex = UnityObjectToClipPos(v.vertex);
  106. #endif
  107. o.uv = v.uv;
  108. return o;
  109. }
  110. float frag(v2f i) : SV_Target
  111. {
  112. UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
  113. return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,UnityStereoTransformScreenSpaceTex(i.uv));
  114. }
  115. ENDCG
  116. }
  117. }
  118. }