Eevee : Fix bug with SSS and SSR active node selection
authorClément Foucault <foucault.clem@gmail.com>
Sat, 18 Nov 2017 21:14:53 +0000 (22:14 +0100)
committerClément Foucault <foucault.clem@gmail.com>
Sat, 18 Nov 2017 21:15:08 +0000 (22:15 +0100)
The bug was affecting the ability to correctly edit the expected SSS profile.

source/blender/draw/engines/eevee/eevee_materials.c
source/blender/nodes/shader/node_shader_tree.c
source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c
source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c

index 23057bd91c0aa466f7841763ded3bdf112deaef3..b0e30109a7f2f14bce14f633f53703de48524ae2 100644 (file)
@@ -763,7 +763,7 @@ static struct DRWShadingGroup *EEVEE_default_shading_group_create(
         bool is_hair, bool is_flat_normal, bool use_blend, bool use_ssr, int shadow_method)
 {
        static int ssr_id;
-       ssr_id = (use_ssr) ? 0 : -1;
+       ssr_id = (use_ssr) ? 1 : -1;
        int options = VAR_MAT_MESH;
 
        if (is_hair) options |= VAR_MAT_HAIR;
@@ -791,7 +791,7 @@ static struct DRWShadingGroup *EEVEE_default_shading_group_get(
         bool is_hair, bool is_flat_normal, bool use_ssr, int shadow_method)
 {
        static int ssr_id;
-       ssr_id = (use_ssr) ? 0 : -1;
+       ssr_id = (use_ssr) ? 1 : -1;
        int options = VAR_MAT_MESH;
 
        if (is_hair) options |= VAR_MAT_HAIR;
index 18229db384ff53b960e6d7aa8b0e7c84a7aeffeb..5bc144e8e072e9a0c7ff742b13252687c2e82e73 100644 (file)
@@ -439,7 +439,7 @@ static void ntree_shader_link_builtin_normal(bNodeTree *ntree,
 static void ntree_shader_relink_displacement(bNodeTree *ntree,
                                              short compatibility)
 {
-       if (compatibility != NODE_NEW_SHADING) {
+       if ((compatibility & NODE_NEW_SHADING) == 0) {
                /* We can only deal with new shading system here. */
                return;
        }
@@ -511,7 +511,7 @@ static bool ntree_tag_ssr_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *
  */
 static void ntree_shader_tag_ssr_node(bNodeTree *ntree, short compatibility)
 {
-       if (compatibility & NODE_NEWER_SHADING) {
+       if ((compatibility & NODE_NEWER_SHADING) == 0) {
                /* We can only deal with new shading system here. */
                return;
        }
@@ -523,8 +523,8 @@ static void ntree_shader_tag_ssr_node(bNodeTree *ntree, short compatibility)
        /* Make sure sockets links pointers are correct. */
        ntreeUpdateTree(G.main, ntree);
 
-       int lobe_count = 0;
-       nodeChainIter(ntree, output_node, ntree_tag_ssr_bsdf_cb, &lobe_count, true);
+       float lobe_id = 1;
+       nodeChainIter(ntree, output_node, ntree_tag_ssr_bsdf_cb, &lobe_id, true);
 }
 
 static bool ntree_tag_sss_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *userdata, const bool UNUSED(reversed))
@@ -546,7 +546,7 @@ static bool ntree_tag_sss_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *
  */
 static void ntree_shader_tag_sss_node(bNodeTree *ntree, short compatibility)
 {
-       if (compatibility & NODE_NEWER_SHADING) {
+       if ((compatibility & NODE_NEWER_SHADING) == 0) {
                /* We can only deal with new shading system here. */
                return;
        }
@@ -558,8 +558,8 @@ static void ntree_shader_tag_sss_node(bNodeTree *ntree, short compatibility)
        /* Make sure sockets links pointers are correct. */
        ntreeUpdateTree(G.main, ntree);
 
-       int sss_count = 0;
-       nodeChainIter(ntree, output_node, ntree_tag_sss_bsdf_cb, &sss_count, true);
+       float sss_id = 1;
+       nodeChainIter(ntree, output_node, ntree_tag_sss_bsdf_cb, &sss_id, true);
 }
 
 /* EEVEE: Find which material domain are used (volume, surface ...).
index 7ebfc12e14307d4649415a80e9c05d89f816d0c9..aa2b3bbfc321455d7bcc0fa097d64a876e8030bf 100644 (file)
@@ -99,7 +99,7 @@ static int node_shader_gpu_bsdf_principled(GPUMaterial *mat, bNode *node, bNodeE
        }
 
        /* SSS Profile */
-       if (node->sss_id == 0) {
+       if (node->sss_id == 1) {
                static short profile = SHD_SUBSURFACE_BURLEY;
                bNodeSocket *socket = BLI_findlink(&node->original->inputs, 2);
                bNodeSocketValueRGBA *socket_data = socket->default_value;
index 7d03eb8805babd6e89960a45a0fbefc98c7fdc5e..116825ff0dab7c86ecc940b06204c72986832b59 100644 (file)
@@ -54,7 +54,7 @@ static int node_shader_gpu_subsurface_scattering(GPUMaterial *mat, bNode *node,
        if (!in[5].link)
                GPU_link(mat, "world_normals_get", &in[5].link);
 
-       if (node->sss_id == 0) {
+       if (node->sss_id == 1) {
                bNodeSocket *socket = BLI_findlink(&node->original->inputs, 2);
                bNodeSocketValueRGBA *socket_data = socket->default_value;
                bNodeSocket *socket_sharp = BLI_findlink(&node->original->inputs, 3);