Fix missing sRGB conversion for dithering non-HDR pipelines (#6707)
# Objective - Fixes #6706 Zoom in on the shadow in the following images: ## Current bevy/main ### HDR On - correct  ### HDR Off - incorrect  ## This PR ### HDR On - correct  ### HDR Off - corrected  ## Close-up comparison ### New  ### Old  ## Solution - It turns out there was an outright missing sRGB conversion for dithering non-HDR cameras. - I also tried using a precise sRGB conversion, but it had no apparent effect on the final image. --- ## Changelog - Fix deband dithering intensity for non-HDR pipelines.
This commit is contained in:
parent
cf46dd2e7e
commit
c069c544a7
@ -34,4 +34,4 @@ fn screen_space_dither(frag_coord: vec2<f32>) -> vec3<f32> {
|
||||
var dither = vec3<f32>(dot(vec2<f32>(171.0, 231.0), frag_coord)).xxx;
|
||||
dither = fract(dither.rgb / vec3<f32>(103.0, 71.0, 97.0));
|
||||
return (dither - 0.5) / 255.0;
|
||||
}
|
||||
}
|
||||
|
@ -99,7 +99,13 @@ fn fragment(in: FragmentInput) -> @location(0) vec4<f32> {
|
||||
output_color = tone_mapping(output_color);
|
||||
#endif
|
||||
#ifdef DEBAND_DITHER
|
||||
output_color = dither(output_color, in.frag_coord.xy);
|
||||
var output_rgb = output_color.rgb;
|
||||
output_rgb = pow(output_rgb, vec3<f32>(1.0 / 2.2));
|
||||
output_rgb = output_rgb + screen_space_dither(in.frag_coord.xy);
|
||||
// This conversion back to linear space is required because our output texture format is
|
||||
// SRGB; the GPU will assume our output is linear and will apply an SRGB conversion.
|
||||
output_rgb = pow(output_rgb, vec3<f32>(2.2));
|
||||
output_color = vec4(output_rgb, output_color.a);
|
||||
#endif
|
||||
return output_color;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user