Merge pull request #69828 from clayjohn/SSR-roughness

Fade out SSR with roughness so that it doesn't show at high roughness amounts
This commit is contained in:
Rémi Verschelde 2022-12-13 10:10:56 +01:00
commit 4bfd21b515
No known key found for this signature in database
GPG key ID: C3336907360768E1

View file

@ -212,6 +212,9 @@ void main() {
float grad = (steps_taken + 1.0) / float(params.num_steps); float grad = (steps_taken + 1.0) / float(params.num_steps);
float initial_fade = params.curve_fade_in == 0.0 ? 1.0 : pow(clamp(grad, 0.0, 1.0), params.curve_fade_in); float initial_fade = params.curve_fade_in == 0.0 ? 1.0 : pow(clamp(grad, 0.0, 1.0), params.curve_fade_in);
float fade = pow(clamp(1.0 - grad, 0.0, 1.0), params.distance_fade) * initial_fade; float fade = pow(clamp(1.0 - grad, 0.0, 1.0), params.distance_fade) * initial_fade;
// This is an ad-hoc term to fade out the SSR as roughness increases. Values used
// are meant to match the visual appearance of a ReflectionProbe.
float roughness_fade = smoothstep(0.4, 0.7, 1.0 - normal_roughness.w);
final_pos = pos; final_pos = pos;
vec4 final_color; vec4 final_color;
@ -246,7 +249,7 @@ void main() {
#endif // MODE_ROUGH #endif // MODE_ROUGH
final_color = vec4(imageLoad(source_diffuse, ivec2(final_pos - 0.5)).rgb, fade * margin_blend); final_color = vec4(imageLoad(source_diffuse, ivec2(final_pos - 0.5)).rgb, fade * margin_blend * roughness_fade);
// Schlick term. // Schlick term.
float metallic = texelFetch(source_metallic, ssC << 1, 0).w; float metallic = texelFetch(source_metallic, ssC << 1, 0).w;