| | |
| | | #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; |
| | | } |
| | | #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;
|
| | | }
|