Commit: 293d5db8956ee87a4ea2dfdaad0dd34216b7a47f
Author: Mai Lavelle
Date:   Sun Sep 11 13:39:12 2016 -0400
Branches: blender-v2.78-release
https://developer.blender.org/rB293d5db8956ee87a4ea2dfdaad0dd34216b7a47f

Cycles: Fix shading and crashes resulting from constant folding on displacement

Constant folding was removing all nodes connected to the displacement output
if they evaluated to a constant, causing there to be no valid graph for
displacement even when there was displacement to be applied, and sometimes
caused crashes.

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

M       intern/cycles/render/graph.cpp

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

diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp
index 9ee8b67..ed8c705 100644
--- a/intern/cycles/render/graph.cpp
+++ b/intern/cycles/render/graph.cpp
@@ -483,6 +483,8 @@ void ShaderGraph::constant_fold()
        ShaderNodeSet done, scheduled;
        queue<ShaderNode*> traverse_queue;
 
+       bool has_displacement = (output()->input("Displacement")->link != NULL);
+
        /* Schedule nodes which doesn't have any dependencies. */
        foreach(ShaderNode *node, nodes) {
                if(!check_node_inputs_has_links(node)) {
@@ -520,6 +522,17 @@ void ShaderGraph::constant_fold()
                        node->constant_fold(folder);
                }
        }
+
+       /* Folding might have removed all nodes connected to the displacement 
output
+        * even tho there is displacement to be applied, so add in a value node 
if
+        * that happens to ensure there is still a valid graph for displacement.
+        */
+       if(has_displacement && !output()->input("Displacement")->link) {
+               ValueNode *value = (ValueNode*)add(new ValueNode());
+               value->value = output()->displacement;
+
+               connect(value->output("Value"), 
output()->input("Displacement"));
+       }
 }
 
 /* Step 3: Simplification. */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to