diff options
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl index 32d27838da3..54825303b5d 100644 --- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl @@ -583,6 +583,9 @@ struct Closure { float opacity; #ifdef USE_SSS vec4 sss_data; +#ifdef USE_SSS_ALBEDO + vec3 sss_albedo; +#endif #endif vec4 ssr_data; vec2 ssr_normal; @@ -594,7 +597,11 @@ struct Closure { #define REFRACT_CLOSURE_FLAG -3 #ifdef USE_SSS +#ifdef USE_SSS_ALBEDO +#define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec3(0.0), vec4(0.0), vec2(0.0), -1) +#else #define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec4(0.0), vec2(0.0), -1) +#endif #else #define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec2(0.0), -1) #endif @@ -608,6 +615,9 @@ Closure closure_mix(Closure cl1, Closure cl2, float fac) #ifdef USE_SSS cl.sss_data.rgb = mix(cl1.sss_data.rgb, cl2.sss_data.rgb, fac); cl.sss_data.a = (cl1.sss_data.a > 0.0) ? cl1.sss_data.a : cl2.sss_data.a; +#ifdef USE_SSS_ALBEDO + cl.sss_albedo = (cl1.sss_data.a > 0.0) ? cl1.sss_albedo : cl2.sss_albedo; +#endif #endif if (cl1.ssr_id == outputSsrId) { @@ -637,6 +647,9 @@ Closure closure_add(Closure cl1, Closure cl2) Closure cl = (cl1.ssr_id == outputSsrId) ? cl1 : cl2; #ifdef USE_SSS cl.sss_data = (cl1.sss_data.a > 0.0) ? cl1.sss_data : cl2.sss_data; +#ifdef USE_SSS_ALBEDO + cl.sss_albedo = (cl1.sss_data.a > 0.0) ? cl1.sss_albedo : cl2.sss_albedo; +#endif #endif cl.radiance = cl1.radiance + cl2.radiance; cl.opacity = cl1.opacity + cl2.opacity; @@ -646,13 +659,20 @@ Closure closure_add(Closure cl1, Closure cl2) #if defined(MESH_SHADER) && !defined(USE_ALPHA_HASH) && !defined(USE_ALPHA_CLIP) && !defined(SHADOW_SHADER) && !defined(USE_MULTIPLY) layout(location = 0) out vec4 fragColor; #ifdef USE_SSS +#ifdef USE_SSS_ALBEDO +layout(location = 1) out vec4 sssData; +layout(location = 2) out vec4 sssAlbedo; +layout(location = 3) out vec4 ssrNormals; +layout(location = 4) out vec4 ssrData; +#else layout(location = 1) out vec4 sssData; layout(location = 2) out vec4 ssrNormals; layout(location = 3) out vec4 ssrData; +#endif /* USE_SSS_ALBEDO */ #else layout(location = 1) out vec4 ssrNormals; layout(location = 2) out vec4 ssrData; -#endif +#endif /* USE_SSS */ Closure nodetree_exec(void); /* Prototype */ @@ -678,6 +698,9 @@ void main() ssrData = cl.ssr_data; #ifdef USE_SSS sssData = cl.sss_data; +#ifdef USE_SSS_ALBEDO + sssAlbedo = cl.sss_albedo.rgbb; +#endif #endif } |