diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-11-13 23:56:49 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-11-14 00:09:12 +0300 |
commit | ab013224adf5bb07c1467637592cd8c7bb5cb2fe (patch) | |
tree | 42a5c4e396b795f3e196e0fd67103f15c01d7aa1 /source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl | |
parent | f4beb64020dec7729b298bd6660e19a02b89e948 (diff) |
GPUMaterial : Add sss_data to Closure struct.
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 | 13 |
1 files changed, 13 insertions, 0 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 b2c72126c40..bbb69d557c4 100644 --- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl @@ -580,6 +580,9 @@ Closure closure_add(Closure cl1, Closure cl2) struct Closure { vec3 radiance; float opacity; +#ifdef USE_SSS + vec4 sss_data; +#endif vec4 ssr_data; vec2 ssr_normal; int ssr_id; @@ -589,13 +592,22 @@ struct Closure { #define TRANSPARENT_CLOSURE_FLAG -2 #define REFRACT_CLOSURE_FLAG -3 +#ifdef USE_SSS +#define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec4(0.0), vec2(0.0), -1) +#else #define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec2(0.0), -1) +#endif uniform int outputSsrId; Closure closure_mix(Closure cl1, Closure cl2, float fac) { Closure cl; + +#ifdef USE_SSS + cl.sss_data = mix(cl1.sss_data, cl2.sss_data, fac); +#endif + if (cl1.ssr_id == outputSsrId) { cl.ssr_data = mix(cl1.ssr_data.xyzw, vec4(vec3(0.0), cl1.ssr_data.w), fac); /* do not blend roughness */ cl.ssr_normal = cl1.ssr_normal; @@ -603,6 +615,7 @@ Closure closure_mix(Closure cl1, Closure cl2, float fac) } else { cl.ssr_data = mix(vec4(vec3(0.0), cl2.ssr_data.w), cl2.ssr_data.xyzw, fac); /* do not blend roughness */ + cl.ssr_data = mix(vec4(vec3(0.0), cl2.ssr_data.w), cl2.ssr_data.xyzw, fac); /* do not blend roughness */ cl.ssr_normal = cl2.ssr_normal; cl.ssr_id = cl2.ssr_id; } |