[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