Lux_Camera_Fade.hlsl 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. float Dither32(float2 Pos) {
  2. float Ret = dot( float3(Pos.xy, 0.5f), float3(0.40625f, 0.15625f, 0.46875f ) );
  3. return frac(Ret);
  4. }
  5. void CameraFade_float(
  6. // Base inputs
  7. float4 positionSS,
  8. float3 positionWS,
  9. float CameraInversFadeRange,
  10. float CameraFadeDist,
  11. half AlphaIN,
  12. out half Alpha
  13. ) {
  14. Alpha = AlphaIN;
  15. #if !defined(SHADERGRAPH_PREVIEW)
  16. float dither = Dither32(positionSS.xy / positionSS.w * _ScreenParams.xy );
  17. // URP 10.1: We have to somehow identify the shadowcaster pass.
  18. // float4x4 projection = GetViewToHClipMatrix(); //UNITY_MATRIX_P;
  19. // projection._m11 = -1 * projection._m00!
  20. // We use a little threshold here
  21. //if( (projection._m00 + projection._m11) < 0.001 ) {
  22. // URP 10.2
  23. #if (SHADERPASS == SHADERPASS_SHADOWCASTER)
  24. #if defined(FADESHADOWS_ON)
  25. float distanceToCam = distance(positionWS, GetCameraPositionWS() );
  26. Alpha = AlphaIN * saturate( (distanceToCam - CameraFadeDist) * CameraInversFadeRange - dither );
  27. #else
  28. Alpha = AlphaIN;
  29. #endif
  30. #else
  31. Alpha = AlphaIN * saturate( (positionSS.w - CameraFadeDist) * CameraInversFadeRange - dither );
  32. #endif
  33. #endif
  34. }