diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-06-05 13:17:37 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-06-05 13:20:49 +0300 |
commit | 98cea7edcefa58d5eb7e2350461b8efe33fe7d9e (patch) | |
tree | d7bfb1d88d07ddc954560e3df29f23c9e8b391de /source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl | |
parent | cd1ac4d908a89e4eb5c3da50bbe748aec2b36692 (diff) |
Fix T65298 Eevee: Principled BSDF doesn't use specular with metals
This does add some more register pressure as it passes a new vec3 down
the shading function. But for now we care more about accuracy than
efficiency.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl index fe3225b1086..e96667c0488 100644 --- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl @@ -119,6 +119,7 @@ void CLOSURE_NAME(vec3 N #ifdef CLOSURE_GLOSSY , vec3 f0, + vec3 f90, int ssr_id #endif #if defined(CLOSURE_GLOSSY) || defined(CLOSURE_REFRACTION) @@ -264,12 +265,12 @@ void CLOSURE_NAME(vec3 N #ifdef CLOSURE_GLOSSY vec2 brdf_lut_lights = texture(utilTex, vec3(lut_uv, 1.0)).ba; - out_spec *= F_area(f0, brdf_lut_lights.xy); + out_spec *= F_area(f0, f90, brdf_lut_lights.xy); #endif #ifdef CLOSURE_CLEARCOAT vec2 brdf_lut_lights_clear = texture(utilTex, vec3(lut_uv_clear, 1.0)).ba; - out_spec_clear *= F_area(vec3(0.04), brdf_lut_lights_clear.xy); + out_spec_clear *= F_area(vec3(0.04), vec3(1.0), brdf_lut_lights_clear.xy); out_spec += out_spec_clear * C_intensity; #endif @@ -454,7 +455,7 @@ void CLOSURE_NAME(vec3 N /* This factor is outputted to be used by SSR in order * to match the intensity of the regular reflections. */ - ssr_spec = F_ibl(f0, brdf_lut); + ssr_spec = F_ibl(f0, f90, brdf_lut); float spec_occlu = specular_occlusion(NV, final_ao, roughness); /* The SSR pass recompute the occlusion to not apply it to the SSR */ @@ -475,7 +476,8 @@ void CLOSURE_NAME(vec3 N NV = dot(C_N, V); vec2 C_uv = lut_coords(NV, C_roughness); vec2 C_brdf_lut = texture(utilTex, vec3(C_uv, 1.0)).rg; - vec3 C_fresnel = F_ibl(vec3(0.04), C_brdf_lut) * specular_occlusion(NV, final_ao, C_roughness); + vec3 C_fresnel = F_ibl(vec3(0.04), vec3(1.0), C_brdf_lut) * + specular_occlusion(NV, final_ao, C_roughness); out_spec += C_spec_accum.rgb * C_fresnel * C_intensity; #endif |