diff options
author | Matt Heimlich <matt.heimlich@gmail.com> | 2014-05-07 18:20:17 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-05-07 18:43:59 +0400 |
commit | 3fbc984b069fed441cccdd3416ec71e064235e36 (patch) | |
tree | 1c95f9d57457069eb3918deb727fc62b4c83dee5 /intern | |
parent | 8b8d5a441f5815e83f83bacf8023e2cc3fbb2a04 (diff) |
Nodes: add absolute value operation to all math nodes
Reviewed By: dingto, brecht
Differential Revision: https://developer.blender.org/D507
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/kernel/shaders/node_math.osl | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_math.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_types.h | 1 | ||||
-rw-r--r-- | intern/cycles/render/nodes.cpp | 1 | ||||
-rw-r--r-- | intern/cycles/util/util_math.h | 2 |
5 files changed, 7 insertions, 1 deletions
diff --git a/intern/cycles/kernel/shaders/node_math.osl b/intern/cycles/kernel/shaders/node_math.osl index 066e5f8dbe1..abb6a359e75 100644 --- a/intern/cycles/kernel/shaders/node_math.osl +++ b/intern/cycles/kernel/shaders/node_math.osl @@ -93,6 +93,8 @@ shader node_math( Value = Value1 > Value2; else if (type == "Modulo") Value = safe_modulo(Value1, Value2); + else if (type == "Absolute") + Value = fabs(Value1); if (Clamp) Value = clamp(Value, 0.0, 1.0); diff --git a/intern/cycles/kernel/svm/svm_math.h b/intern/cycles/kernel/svm/svm_math.h index bb46d443a6b..1ce9386e40e 100644 --- a/intern/cycles/kernel/svm/svm_math.h +++ b/intern/cycles/kernel/svm/svm_math.h @@ -56,6 +56,8 @@ ccl_device float svm_math(NodeMath type, float Fac1, float Fac2) Fac = Fac1 > Fac2; else if(type == NODE_MATH_MODULO) Fac = safe_modulo(Fac1, Fac2); + else if(type == NODE_MATH_ABSOLUTE) + Fac = fabsf(Fac1); else if(type == NODE_MATH_CLAMP) Fac = clamp(Fac1, 0.0f, 1.0f); else diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h index a7deb0bb913..80972ec82bc 100644 --- a/intern/cycles/kernel/svm/svm_types.h +++ b/intern/cycles/kernel/svm/svm_types.h @@ -221,6 +221,7 @@ typedef enum NodeMath { NODE_MATH_LESS_THAN, NODE_MATH_GREATER_THAN, NODE_MATH_MODULO, + NODE_MATH_ABSOLUTE, NODE_MATH_CLAMP /* used for the clamp UI option */ } NodeMath; diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index e269074763c..a53e0b39435 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -3544,6 +3544,7 @@ static ShaderEnum math_type_init() enm.insert("Less Than", NODE_MATH_LESS_THAN); enm.insert("Greater Than", NODE_MATH_GREATER_THAN); enm.insert("Modulo", NODE_MATH_MODULO); + enm.insert("Absolute", NODE_MATH_ABSOLUTE); return enm; } diff --git a/intern/cycles/util/util_math.h b/intern/cycles/util/util_math.h index ded75762cd2..69c0d84c163 100644 --- a/intern/cycles/util/util_math.h +++ b/intern/cycles/util/util_math.h @@ -183,7 +183,7 @@ ccl_device_inline float signf(float f) ccl_device_inline float nonzerof(float f, float eps) { - if(fabsf(f) < eps) + if(fabsf(f) < eps) return signf(f)*eps; else return f; |