123456789101112131415161718192021222324252627282930313233343536373839 |
- #include "ColorGrading.cginc"
- // Grain
- half2 _Grain_Params1; // x: lum_contrib, y: intensity
- half4 _Grain_Params2; // x: xscale, h: yscale, z: xoffset, w: yoffset
- sampler2D _GrainTex;
- // Dithering
- sampler2D _DitheringTex;
- float4 _DitheringCoords;
- float3 UberSecondPass(half3 color, float2 uv)
- {
- // Grain
- #if GRAIN
- {
- float3 grain = tex2D(_GrainTex, uv * _Grain_Params2.xy + _Grain_Params2.zw).rgb;
- // Noisiness response curve based on scene luminance
- float lum = 1.0 - sqrt(AcesLuminance(color));
- lum = lerp(1.0, lum, _Grain_Params1.x);
- color += color * grain * _Grain_Params1.y * lum;
- }
- #endif
- // Blue noise dithering
- #if DITHERING
- {
- // Symmetric triangular distribution on [-1,1] with maximal density at 0
- float noise = tex2D(_DitheringTex, uv * _DitheringCoords.xy + _DitheringCoords.zw).a * 2.0 - 1.0;
- noise = sign(noise) * (1.0 - sqrt(1.0 - abs(noise))) / 255.0;
- color += noise;
- }
- #endif
- return color;
- }
|