[Bf-blender-cvs] [457d537fe4f] blender-v2.91-release: Fix T82673: Cycles crash with zero emission strength and linked emission color

Brecht Van Lommel noreply at git.blender.org
Mon Nov 16 19:30:21 CET 2020


Commit: 457d537fe4f33cfb16e5672404aa9f87797d9d23
Author: Brecht Van Lommel
Date:   Mon Nov 16 19:28:58 2020 +0100
Branches: blender-v2.91-release
https://developer.blender.org/rB457d537fe4f33cfb16e5672404aa9f87797d9d23

Fix T82673: Cycles crash with zero emission strength and linked emission color

===================================================================

M	intern/cycles/render/nodes.cpp

===================================================================

diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index fa6096ff39b..5e21ad15cc8 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -2785,7 +2785,7 @@ void PrincipledBsdfNode::expand(ShaderGraph *graph)
   ShaderInput *emission_strength_in = input("Emission Strength");
   if ((emission_in->link || emission != make_float3(0.0f, 0.0f, 0.0f)) &&
       (emission_strength_in->link || emission_strength != 0.0f)) {
-    /* Create add closure and emission. */
+    /* Create add closure and emission, and relink inputs. */
     AddClosureNode *add = graph->create_node<AddClosureNode>();
     EmissionNode *emission_node = graph->create_node<EmissionNode>();
     ShaderOutput *new_out = add->output("Closure");
@@ -2801,6 +2801,16 @@ void PrincipledBsdfNode::expand(ShaderGraph *graph)
 
     principled_out = new_out;
   }
+  else {
+    /* Disconnect unused links if the other value is zero, required before
+     * we remove the input from the node entirely. */
+    if (emission_in->link) {
+      emission_in->disconnect();
+    }
+    if (emission_strength_in->link) {
+      emission_strength_in->disconnect();
+    }
+  }
 
   ShaderInput *alpha_in = input("Alpha");
   if (alpha_in->link || alpha != 1.0f) {
@@ -2818,6 +2828,7 @@ void PrincipledBsdfNode::expand(ShaderGraph *graph)
   }
 
   remove_input(emission_in);
+  remove_input(emission_strength_in);
   remove_input(alpha_in);
 }



More information about the Bf-blender-cvs mailing list