FogDistance.cginc 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. #ifndef VOLUMETRIC_FOG_2_FOG_DISTANCE
  2. #define VOLUMETRIC_FOG_2_FOG_DISTANCE
  3. float4 _DistanceData;
  4. TEXTURE2D(_DepthGradientTex);
  5. SAMPLER(_depthGradient_linear_clamp_sampler);
  6. TEXTURE2D(_HeightGradientTex);
  7. SAMPLER(_heightGradient_linear_clamp_sampler);
  8. inline half ApplyFogDistance(float3 rayStart, float3 wpos) {
  9. float3 vd = rayStart - wpos;
  10. float voidDistance = dot(vd, vd) * _DistanceData.w;
  11. half alpha = saturate(voidDistance - _DistanceData.y);
  12. return alpha;
  13. }
  14. inline half4 ApplyDepthGradient(float3 rayStart, float3 wpos) {
  15. float2 vd = rayStart.xz - wpos.xz;
  16. float depthGradientCoord = dot(vd, vd) * _DistanceData.z;
  17. half4 depthColor = SAMPLE_TEXTURE2D_LOD(_DepthGradientTex, _depthGradient_linear_clamp_sampler, float2(depthGradientCoord, 0), 0);
  18. return depthColor;
  19. }
  20. inline half4 ApplyHeightGradient(float3 wpos) {
  21. float heightGradientCoord = saturate( (wpos.y - BOUNDS_BOTTOM) / BOUNDS_SIZE_Y );
  22. half4 heightColor = SAMPLE_TEXTURE2D_LOD(_HeightGradientTex, _heightGradient_linear_clamp_sampler, float2(heightGradientCoord, 0), 0);
  23. return heightColor;
  24. }
  25. #endif