FXVVolumeFog.shader 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. Shader "FXV/FXVVolumeFog"
  2. {
  3. Properties
  4. {
  5. [HideInInspector] _FogType("__fogtype", Float) = 0.0
  6. [HideInInspector] _FogFalloffType("__fogfallofftype", Float) = 0.0
  7. [HideInInspector] _FogFalloff("__fogfalloff", Float) = 1.0
  8. [HideInInspector] _FogMeshType("__fogmeshtype", Float) = 0.0
  9. [HideInInspector] _FogClipping("__fogclipping", Float) = 0.0
  10. [HideInInspector][Toggle] _InAirEnabled("__inairenabled", Int) = 0
  11. [HideInInspector] _BlendMode("__mode", Float) = 0.0
  12. [HideInInspector] _SrcBlend("__src", Float) = 1.0
  13. [HideInInspector] _DstBlend("__dst", Float) = 0.0
  14. [HideInInspector] _ZWrite("__zw", Float) = 1.0
  15. [HideInInspector][Toggle] _AxisFadeEnabled("__axisfade", Float) = 0.0
  16. }
  17. SubShader
  18. {
  19. Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
  20. LOD 300
  21. Blend[_SrcBlend][_DstBlend]
  22. ZWrite[_ZWrite]
  23. Pass
  24. {
  25. HLSLPROGRAM
  26. #pragma vertex vert
  27. #pragma fragment frag
  28. #pragma target 3.5
  29. #pragma shader_feature_local FXV_FOGTYPE_VIEWALIGNED FXV_FOGTYPE_SPHERICALPOS FXV_FOGTYPE_SPHERICALDIST FXV_FOGTYPE_BOXPOS FXV_FOGTYPE_BOXDIST FXV_FOGTYPE_BOXEXPERIMENTAL FXV_FOGTYPE_HEIGHT FXV_FOGTYPE_HEIGHTXBOX FXV_FOGTYPE_INVERTEDSPHERICAL FXV_FOGTYPE_INVERTEDSPHERICALXHEIGHT FXV_FOGTYPE_HEIGHTXVIEW FXV_FOGTYPE_BOXXVIEW
  30. #pragma shader_feature_local FXV_IN_AIR_FOG __
  31. #pragma shader_feature_local FXV_LINEAR_FALLOFF FXV_SMOOTHED_FALLOFF FXV_EXP_FALLOFF FXV_EXP2_FALLOFF
  32. #pragma shader_feature_local FXV_FOG_CUSTOM_MESH __
  33. #pragma shader_feature_local FXV_FOG_CLIP_SKYBOX FXV_FOG_CLIP_BOUNDS __
  34. #pragma multi_compile_fog
  35. #pragma multi_compile_instancing
  36. #define FXV_VOLUMEFOG_BUILTIN
  37. #if defined(FXV_VOLUMEFOG_URP)
  38. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  39. #else
  40. #include "UnityCG.cginc"
  41. #endif
  42. #include "FXVVolumeFog.cginc"
  43. struct appdata
  44. {
  45. FXV_VOLUMETRIC_FOG_APPDATA
  46. };
  47. struct v2f
  48. {
  49. FXV_VOLUMETRIC_FOG_V2F_COORDS
  50. };
  51. v2f vert(appdata v)
  52. {
  53. v2f o;
  54. FXV_VOLUMETRIC_FOG_VERTEX_DEFAULT(v, o);
  55. return o;
  56. }
  57. struct fragOutput
  58. {
  59. float4 color0 : SV_Target;
  60. };
  61. fragOutput frag(v2f i)
  62. {
  63. FXV_VOLUMETRIC_FOG_FRAGMENT_DEFAULT(i);
  64. float3 viewDirWS;
  65. float3 viewDirOriginWS;
  66. _FXV_GetViewRayOriginAndDirWS_fromPositionWS(i.positionWS, viewDirOriginWS, viewDirWS);
  67. fxvFogData fogData = _FXV_CalcVolumetricFog(i.positionWS, viewDirOriginWS, viewDirWS, i.depth, i.screenPosition);
  68. fragOutput o;
  69. float4 color = UNITY_ACCESS_INSTANCED_PROP(Props, _Color);
  70. o.color0.rgb = color.rgb;
  71. o.color0.a = color.a * fogData.fogT;
  72. return o;
  73. }
  74. ENDHLSL
  75. }
  76. }
  77. FallBack "Diffuse"
  78. CustomEditor "FXV.fxvVolumeFogShaderInspector"
  79. }