[Bf-blender-cvs] [83a36b2] master: Cycles: Fix for wrong optimization of bump node

Sergey Sharybin noreply at git.blender.org
Fri Sep 4 17:06:38 CEST 2015


Commit: 83a36b2829eece1ff4549d2f5273cb8cdcad4432
Author: Sergey Sharybin
Date:   Fri Sep 4 20:03:45 2015 +0500
Branches: master
https://developer.blender.org/rB83a36b2829eece1ff4549d2f5273cb8cdcad4432

Cycles: Fix for wrong optimization of bump node

It can't be simply removed in cases when it's connected to input which is
different from Normal. This is because the input wouldn't be connected to
default Normal geometry input, possibly breaking shading setup.

The fix is not really ideal, but should work at least.

This fixes skin having too much glossy reflection in the file from T46013.

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

M	intern/cycles/render/graph.cpp

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

diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp
index e053710..f5ff091 100644
--- a/intern/cycles/render/graph.cpp
+++ b/intern/cycles/render/graph.cpp
@@ -336,6 +336,8 @@ void ShaderGraph::remove_unneeded_nodes()
 	vector<bool> removed(num_node_ids, false);
 	bool any_node_removed = false;
 
+	ShaderNode *geom = NULL;
+
 	/* find and unlink proxy nodes */
 	foreach(ShaderNode *node, nodes) {
 		if(node->special_type == SHADER_SPECIAL_TYPE_PROXY) {
@@ -423,12 +425,19 @@ void ShaderGraph::remove_unneeded_nodes()
 			BumpNode *bump = static_cast<BumpNode*>(node);
 
 			if(bump->outputs[0]->links.size()) {
-				/* Height input not connected */
-				/* ToDo: Strength zero? */
-				if(!bump->inputs[0]->link) {
+				/* Height inputs is not connected. */
+				/* TODO(sergey): Ignore bump with zero strength. */
+				if(bump->inputs[0]->link == NULL) {
 					vector<ShaderInput*> inputs = bump->outputs[0]->links;
-
-					relink(bump->inputs, inputs, NULL);
+					if(bump->inputs[4]->link == NULL) {
+						if(geom == NULL) {
+							geom = new GeometryNode();
+						}
+						relink(bump->inputs, inputs, geom->output("Normal"));
+					}
+					else {
+						relink(bump->inputs, inputs, bump->input("Normal")->link);
+					}
 					removed[bump->id] = true;
 					any_node_removed = true;
 				}
@@ -511,6 +520,10 @@ void ShaderGraph::remove_unneeded_nodes()
 
 		nodes = newnodes;
 	}
+
+	if(geom != NULL) {
+		add(geom);
+	}
 }
 
 void ShaderGraph::break_cycles(ShaderNode *node, vector<bool>& visited, vector<bool>& on_stack)




More information about the Bf-blender-cvs mailing list