[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50266] trunk/blender/intern/cycles: Cycles bugfix: [32431] Cycles Math Node : Clamp does not work

Dalai Felinto dfelinto at gmail.com
Wed Aug 29 19:30:15 CEST 2012


Revision: 50266
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50266
Author:   dfelinto
Date:     2012-08-29 17:30:14 +0000 (Wed, 29 Aug 2012)
Log Message:
-----------
Cycles bugfix: [32431] Cycles Math Node : Clamp does not work
the OSL solution is slightly different than the svm, but I think it's fine.

thanks Lukas Toenne for helping with a fix on the original patch

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_shader.cpp
    trunk/blender/intern/cycles/kernel/osl/nodes/node_math.osl
    trunk/blender/intern/cycles/kernel/svm/svm_math.h
    trunk/blender/intern/cycles/kernel/svm/svm_types.h
    trunk/blender/intern/cycles/render/nodes.cpp
    trunk/blender/intern/cycles/render/nodes.h

Modified: trunk/blender/intern/cycles/blender/blender_shader.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_shader.cpp	2012-08-29 12:49:10 UTC (rev 50265)
+++ trunk/blender/intern/cycles/blender/blender_shader.cpp	2012-08-29 17:30:14 UTC (rev 50266)
@@ -244,6 +244,7 @@
 			BL::ShaderNodeMath b_math_node(b_node);
 			MathNode *math = new MathNode();
 			math->type = MathNode::type_enum[b_math_node.operation()];
+			math->use_clamp = b_math_node.use_clamp();
 			node = math;
 			break;
 		}

Modified: trunk/blender/intern/cycles/kernel/osl/nodes/node_math.osl
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/nodes/node_math.osl	2012-08-29 12:49:10 UTC (rev 50265)
+++ trunk/blender/intern/cycles/kernel/osl/nodes/node_math.osl	2012-08-29 17:30:14 UTC (rev 50266)
@@ -40,6 +40,7 @@
 
 shader node_math(
 	string type = "Add",
+	int Clamp = false,
 	float Value1 = 0.0,
 	float Value2 = 0.0,
 	output float Value = 0.0)
@@ -80,5 +81,8 @@
 		Value = Value1 < Value2;
 	if(type == "Greater Than")
 		Value = Value1 > Value2;
+
+	if(Clamp)
+		Value = clamp(Value1, 0.0, 1.0);
 }
 

Modified: trunk/blender/intern/cycles/kernel/svm/svm_math.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_math.h	2012-08-29 12:49:10 UTC (rev 50265)
+++ trunk/blender/intern/cycles/kernel/svm/svm_math.h	2012-08-29 17:30:14 UTC (rev 50266)
@@ -108,6 +108,8 @@
 		Fac = Fac1 < Fac2;
 	else if(type == NODE_MATH_GREATER_THAN)
 		Fac = Fac1 > Fac2;
+	else if(type == NODE_MATH_CLAMP)
+		Fac = clamp(Fac1, 0.0f, 1.0f);
 	else
 		Fac = 0.0f;
 	

Modified: trunk/blender/intern/cycles/kernel/svm/svm_types.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_types.h	2012-08-29 12:49:10 UTC (rev 50265)
+++ trunk/blender/intern/cycles/kernel/svm/svm_types.h	2012-08-29 17:30:14 UTC (rev 50266)
@@ -183,7 +183,8 @@
 	NODE_MATH_MAXIMUM,
 	NODE_MATH_ROUND,
 	NODE_MATH_LESS_THAN,
-	NODE_MATH_GREATER_THAN
+	NODE_MATH_GREATER_THAN,
+	NODE_MATH_CLAMP /* used for the clamp UI option */
 } NodeMath;
 
 typedef enum NodeVectorMath {

Modified: trunk/blender/intern/cycles/render/nodes.cpp
===================================================================
--- trunk/blender/intern/cycles/render/nodes.cpp	2012-08-29 12:49:10 UTC (rev 50265)
+++ trunk/blender/intern/cycles/render/nodes.cpp	2012-08-29 17:30:14 UTC (rev 50266)
@@ -2391,6 +2391,8 @@
 {
 	type = ustring("Add");
 
+	use_clamp = false;
+
 	add_input("Value1", SHADER_SOCKET_FLOAT);
 	add_input("Value2", SHADER_SOCKET_FLOAT);
 	add_output("Value",  SHADER_SOCKET_FLOAT);
@@ -2435,11 +2437,17 @@
 
 	compiler.add_node(NODE_MATH, type_enum[type], value1_in->stack_offset, value2_in->stack_offset);
 	compiler.add_node(NODE_MATH, value_out->stack_offset);
+
+	if(use_clamp) {
+		compiler.add_node(NODE_MATH, NODE_MATH_CLAMP, value_out->stack_offset);
+		compiler.add_node(NODE_MATH, value_out->stack_offset);
+	}
 }
 
 void MathNode::compile(OSLCompiler& compiler)
 {
 	compiler.parameter("type", type);
+	compiler.parameter("Clamp", use_clamp);
 	compiler.add(this, "node_math");
 }
 

Modified: trunk/blender/intern/cycles/render/nodes.h
===================================================================
--- trunk/blender/intern/cycles/render/nodes.h	2012-08-29 12:49:10 UTC (rev 50265)
+++ trunk/blender/intern/cycles/render/nodes.h	2012-08-29 17:30:14 UTC (rev 50266)
@@ -385,6 +385,8 @@
 public:
 	SHADER_NODE_CLASS(MathNode)
 
+	bool use_clamp;
+
 	ustring type;
 	static ShaderEnum type_enum;
 };




More information about the Bf-blender-cvs mailing list