legacyColorGrading.fx 1.2 KB

1234567891011121314151617181920212223242526
  1. vec4 colorGrades(vec4 color)
  2. {
  3. // Dynamic runtime calculations (dependent on input color)
  4. float sliceContinuous = color.z * vCameraColorGradingInfos.z;
  5. float sliceInteger = floor(sliceContinuous);
  6. // Note: this is mathematically equivalent to fract(sliceContinuous); but we use explicit subtract
  7. // rather than separate fract() for correct results near slice boundaries (matching sliceInteger choice)
  8. float sliceFraction = sliceContinuous - sliceInteger;
  9. // Calculate UV offset from slice origin (top-left)
  10. vec2 sliceUV = color.xy * vCameraColorGradingScaleOffset.xy + vCameraColorGradingScaleOffset.zw;
  11. // Calculate UV positions into overall texture for neighbouring slices
  12. // (to emulate trilinear filtering on missing 3D hardware texture support)
  13. sliceUV.x += sliceInteger * vCameraColorGradingInfos.w;
  14. vec4 slice0Color = texture2D(cameraColorGrading2DSampler, sliceUV);
  15. sliceUV.x += vCameraColorGradingInfos.w;
  16. vec4 slice1Color = texture2D(cameraColorGrading2DSampler, sliceUV);
  17. vec3 result = mix(slice0Color.rgb, slice1Color.rgb, sliceFraction);
  18. color.rgb = mix(color.rgb, result, vCameraColorGradingInfos.x);
  19. return color;
  20. }