[Bf-blender-cvs] [749e4bf0f35] soc-2019-cycles-procedural: Added Fraction operator to Vector Math node.

OmarSquircleArt noreply at git.blender.org
Sun Aug 4 21:30:12 CEST 2019


Commit: 749e4bf0f35ac9a976b7e4d3ddfcf363ad81f87c
Author: OmarSquircleArt
Date:   Sun Aug 4 21:31:15 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rB749e4bf0f35ac9a976b7e4d3ddfcf363ad81f87c

Added Fraction operator to Vector Math node.

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

M	intern/cycles/kernel/shaders/node_vector_math.osl
M	intern/cycles/kernel/svm/svm_math_util.h
M	intern/cycles/kernel/svm/svm_types.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/util/util_math_float3.h
M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/shader/nodes/node_shader_vectMath.c

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

diff --git a/intern/cycles/kernel/shaders/node_vector_math.osl b/intern/cycles/kernel/shaders/node_vector_math.osl
index 2c67cf6b880..20683067eed 100644
--- a/intern/cycles/kernel/shaders/node_vector_math.osl
+++ b/intern/cycles/kernel/shaders/node_vector_math.osl
@@ -96,6 +96,9 @@ shader node_vector_math(string type = "add",
   else if (type == "modulo") {
     Vector = mod(A, B);
   }
+  else if (type == "fraction") {
+    Vector = A - floor(A);
+  }
   else if (type == "absolute") {
     Vector = abs(A);
   }
diff --git a/intern/cycles/kernel/svm/svm_math_util.h b/intern/cycles/kernel/svm/svm_math_util.h
index adbf46de6f7..6661691938a 100644
--- a/intern/cycles/kernel/svm/svm_math_util.h
+++ b/intern/cycles/kernel/svm/svm_math_util.h
@@ -70,6 +70,9 @@ ccl_device void svm_vector_math(
     case NODE_VECTOR_MATH_MODULO:
       *vector = make_float3(safe_modulo(a.x, b.x), safe_modulo(a.y, b.y), safe_modulo(a.z, b.z));
       break;
+    case NODE_VECTOR_MATH_FRACTION:
+      *vector = fract(a);
+      break;
     case NODE_VECTOR_MATH_ABSOLUTE:
       *vector = fabs(a);
       break;
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index f8f50105fe5..d7808065211 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -298,6 +298,7 @@ typedef enum NodeVectorMathType {
   NODE_VECTOR_MATH_FLOOR,
   NODE_VECTOR_MATH_CEIL,
   NODE_VECTOR_MATH_MODULO,
+  NODE_VECTOR_MATH_FRACTION,
   NODE_VECTOR_MATH_ABSOLUTE,
   NODE_VECTOR_MATH_MINIMUM,
   NODE_VECTOR_MATH_MAXIMUM,
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 270a69c9cd9..45dcc283056 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -5727,6 +5727,7 @@ NODE_DEFINE(VectorMathNode)
   type_enum.insert("floor", NODE_VECTOR_MATH_FLOOR);
   type_enum.insert("ceil", NODE_VECTOR_MATH_CEIL);
   type_enum.insert("modulo", NODE_VECTOR_MATH_MODULO);
+  type_enum.insert("fraction", NODE_VECTOR_MATH_FRACTION);
   type_enum.insert("absolute", NODE_VECTOR_MATH_ABSOLUTE);
   type_enum.insert("minimum", NODE_VECTOR_MATH_MINIMUM);
   type_enum.insert("maximum", NODE_VECTOR_MATH_MAXIMUM);
diff --git a/intern/cycles/util/util_math_float3.h b/intern/cycles/util/util_math_float3.h
index 095134cc13e..ec59f2b2d7b 100644
--- a/intern/cycles/util/util_math_float3.h
+++ b/intern/cycles/util/util_math_float3.h
@@ -61,6 +61,7 @@ ccl_device_inline float3 rcp(const float3 &a);
 ccl_device_inline float3 sqrt(const float3 &a);
 ccl_device_inline float3 floor(const float3 &a);
 ccl_device_inline float3 ceil(const float3 &a);
+ccl_device_inline float3 fract(const float3 &a);
 #endif /* !__KERNEL_OPENCL__ */
 
 ccl_device_inline float min3(float3 a);
@@ -312,6 +313,11 @@ ccl_device_inline float3 ceil(const float3 &a)
 #  endif
 }
 
+ccl_device_inline float3 fract(const float3 &a)
+{
+  return a - floor(a);
+}
+
 ccl_device_inline float3 mix(const float3 &a, const float3 &b, float t)
 {
   return a + t * (b - a);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 07bca5737e5..b729af3ce3f 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -564,6 +564,11 @@ void vec_math_modulo(vec3 a, vec3 b, float scale, out vec3 outvec, out float out
   math_modulo(a.z, b.z, outvec.z);
 }
 
+void vec_math_fraction(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
+{
+  outvec = fract(a);
+}
+
 void vec_math_absolute(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
   outvec = abs(a);
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 63a19aa6c65..f187ecd0764 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1225,9 +1225,10 @@ enum {
   NODE_VECTOR_MATH_FLOOR = 13,
   NODE_VECTOR_MATH_CEIL = 14,
   NODE_VECTOR_MATH_MODULO = 15,
-  NODE_VECTOR_MATH_ABSOLUTE = 16,
-  NODE_VECTOR_MATH_MINIMUM = 17,
-  NODE_VECTOR_MATH_MAXIMUM = 18,
+  NODE_VECTOR_MATH_FRACTION = 16,
+  NODE_VECTOR_MATH_ABSOLUTE = 17,
+  NODE_VECTOR_MATH_MINIMUM = 18,
+  NODE_VECTOR_MATH_MAXIMUM = 19,
 };
 
 /* mix rgb node flags */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 60b35b5e35d..90fd75f2d25 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -171,6 +171,7 @@ const EnumPropertyItem rna_enum_node_vec_math_items[] = {
     {NODE_VECTOR_MATH_FLOOR, "FLOOR", 0, "Floor", "Entrywise floor"},
     {NODE_VECTOR_MATH_CEIL, "CEIL", 0, "Ceil", "Entrywise ceil"},
     {NODE_VECTOR_MATH_MODULO, "MODULO", 0, "Modulo", "Entrywise modulo"},
+    {NODE_VECTOR_MATH_FRACTION, "FRACTION", 0, "Fraction", "The fraction part of A entrywise"},
     {NODE_VECTOR_MATH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Entrywise absolute"},
     {NODE_VECTOR_MATH_MINIMUM, "MINIMUM", 0, "Minimum", "Entrywise minimum"},
     {NODE_VECTOR_MATH_MAXIMUM, "MAXIMUM", 0, "Maximum", "Entrywise maximum"},
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectMath.c b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
index 56ccb2e69a5..6a4fcd01181 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vectMath.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
@@ -59,6 +59,7 @@ static int gpu_shader_vect_math(GPUMaterial *mat,
       [NODE_VECTOR_MATH_FLOOR] = "vec_math_floor",
       [NODE_VECTOR_MATH_CEIL] = "vec_math_ceil",
       [NODE_VECTOR_MATH_MODULO] = "vec_math_modulo",
+      [NODE_VECTOR_MATH_FRACTION] = "vec_math_fraction",
       [NODE_VECTOR_MATH_ABSOLUTE] = "vec_math_absolute",
       [NODE_VECTOR_MATH_MINIMUM] = "vec_math_minimum",
       [NODE_VECTOR_MATH_MAXIMUM] = "vec_math_maximum",
@@ -83,6 +84,7 @@ static void node_shader_update_vec_math(bNodeTree *UNUSED(ntree), bNode *node)
                                   NODE_VECTOR_MATH_FLOOR,
                                   NODE_VECTOR_MATH_LENGTH,
                                   NODE_VECTOR_MATH_ABSOLUTE,
+                                  NODE_VECTOR_MATH_FRACTION,
                                   NODE_VECTOR_MATH_NORMALIZE));
   nodeSetSocketAvailability(sockScale, node->custom1 == NODE_VECTOR_MATH_SCALE);
   nodeSetSocketAvailability(sockVector,



More information about the Bf-blender-cvs mailing list