[Bf-blender-cvs] [361b417984b] soc-2019-cycles-procedural: Refactor and clean up Mapping node.

OmarSquircleArt noreply at git.blender.org
Mon Aug 5 14:48:52 CEST 2019


Commit: 361b417984b37fc110fe3b04108fc77c66fc7ed7
Author: OmarSquircleArt
Date:   Mon Aug 5 14:49:59 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rB361b417984b37fc110fe3b04108fc77c66fc7ed7

Refactor and clean up Mapping node.

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

M	intern/cycles/blender/blender_shader.cpp
M	intern/cycles/kernel/shaders/node_mapping.osl
M	intern/cycles/kernel/svm/svm_mapping.h
M	intern/cycles/kernel/svm/svm_mapping_util.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/nodes.h
M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/shader/nodes/node_shader_mapping.c

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

diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index f7e50839437..c98d7122144 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -335,7 +335,7 @@ static ShaderNode *add_node(Scene *scene,
   else if (b_node.is_a(&RNA_ShaderNodeMapping)) {
     BL::ShaderNodeMapping b_mapping_node(b_node);
     MappingNode *mapping = new MappingNode();
-    mapping->vector_type = (NodeMappingType)b_mapping_node.vector_type();
+    mapping->type = (NodeMappingType)b_mapping_node.vector_type();
     node = mapping;
   }
   else if (b_node.is_a(&RNA_ShaderNodeFresnel)) {
diff --git a/intern/cycles/kernel/shaders/node_mapping.osl b/intern/cycles/kernel/shaders/node_mapping.osl
index 7e1591e7ff3..98590c64fcc 100644
--- a/intern/cycles/kernel/shaders/node_mapping.osl
+++ b/intern/cycles/kernel/shaders/node_mapping.osl
@@ -49,20 +49,22 @@ matrix euler_to_mat(point euler){
   return mat;
 }
 
-shader node_mapping(string vector_type = "point",
-                    point VectorIn = point(0.0, 0.0, 0.0),
+shader node_mapping(string type = "point",
+                    point Vector = point(0.0, 0.0, 0.0),
                     point Location = point(0.0, 0.0, 0.0),
                     point Rotation = point(0.0, 0.0, 0.0),
                     point Scale = point(1.0, 1.0, 1.0),
-                    output point VectorOut = point(0.0, 0.0, 0.0))
+                    output point Result = point(0.0, 0.0, 0.0))
 {
-  if (vector_type == "texture") {
-    VectorOut = safe_divide(transform(euler_to_mat(-Rotation), (VectorIn - Location)), Scale);
-  } else if (vector_type == "point") {
-    VectorOut = transform(euler_to_mat(Rotation), (VectorIn * Scale)) + Location;
-  } else if (vector_type == "vector") {
-    VectorOut = transform(euler_to_mat(Rotation), (VectorIn * Scale));
-  } else if (vector_type == "normal") {
-    VectorOut = normalize(transform(euler_to_mat(Rotation), safe_divide(VectorIn, Scale)));
+  if (type == "point") {
+    Result = transform(euler_to_mat(Rotation), (Vector * Scale)) + Location;
+  } else if (type == "texture") {
+    Result = safe_divide(transform(euler_to_mat(-Rotation), (Vector - Location)), Scale);
+  } else if (type == "vector") {
+    Result = transform(euler_to_mat(Rotation), (Vector * Scale));
+  } else if (type == "normal") {
+    Result = normalize(transform(euler_to_mat(Rotation), safe_divide(Vector, Scale)));
+  } else {
+    warning("%s", "Unknown Mapping vector type!");
   }
 }
diff --git a/intern/cycles/kernel/svm/svm_mapping.h b/intern/cycles/kernel/svm/svm_mapping.h
index c59db8b7390..997b09fe82f 100644
--- a/intern/cycles/kernel/svm/svm_mapping.h
+++ b/intern/cycles/kernel/svm/svm_mapping.h
@@ -18,6 +18,27 @@ CCL_NAMESPACE_BEGIN
 
 /* Mapping Node */
 
+ccl_device void svm_node_mapping(KernelGlobals *kg,
+                                 ShaderData *sd,
+                                 float *stack,
+                                 uint type,
+                                 uint vector_offset,
+                                 uint location_offset,
+                                 int *offset)
+{
+  uint4 node1 = read_node(kg, offset);
+
+  float3 vector = stack_load_float3(stack, vector_offset);
+  float3 location = stack_load_float3(stack, location_offset);
+  float3 rotation = stack_load_float3(stack, node1.y);
+  float3 scale = stack_load_float3(stack, node1.z);
+
+  float3 result = svm_mapping((NodeMappingType)type, vector, location, rotation, scale);
+  stack_store_float3(stack, node1.w, result);
+}
+
+/* Texture Mapping */
+
 ccl_device void svm_node_texture_mapping(
     KernelGlobals *kg, ShaderData *sd, float *stack, uint vec_offset, uint out_offset, int *offset)
 {
@@ -32,27 +53,6 @@ ccl_device void svm_node_texture_mapping(
   stack_store_float3(stack, out_offset, r);
 }
 
-ccl_device void svm_node_mapping(KernelGlobals *kg,
-                                 ShaderData *sd,
-                                 float *stack,
-                                 uint vector_type,
-                                 uint vec_offset,
-                                 uint loc_offset,
-                                 int *offset)
-{
-  uint4 node1 = read_node(kg, offset);
-
-  NodeMappingType vec_type = (NodeMappingType)vector_type;
-  float3 vec = stack_load_float3(stack, vec_offset);
-  float3 loc = stack_load_float3(stack, loc_offset);
-  float3 rot = stack_load_float3(stack, node1.y);
-  float3 size = stack_load_float3(stack, node1.z);
-
-  float3 r;
-  svm_mapping(&r, vec_type, vec, loc, rot, size);
-  stack_store_float3(stack, node1.w, r);
-}
-
 ccl_device void svm_node_min_max(
     KernelGlobals *kg, ShaderData *sd, float *stack, uint vec_offset, uint out_offset, int *offset)
 {
diff --git a/intern/cycles/kernel/svm/svm_mapping_util.h b/intern/cycles/kernel/svm/svm_mapping_util.h
index 0c9f22a8a22..a278a2a5c2a 100644
--- a/intern/cycles/kernel/svm/svm_mapping_util.h
+++ b/intern/cycles/kernel/svm/svm_mapping_util.h
@@ -16,33 +16,30 @@
 
 CCL_NAMESPACE_BEGIN
 
-ccl_device void svm_mapping(
-    float3 *outVec, NodeMappingType vecType, float3 vecIn, float3 loc, float3 rot, float3 size)
+ccl_device float3
+svm_mapping(NodeMappingType type, float3 vector, float3 location, float3 rotation, float3 scale)
 {
-  Transform rot_t;
-  if (vecType == NODE_MAPPING_TYPE_TEXTURE) {
-    rot_t = euler_to_transform(-rot);
+  Transform rotationTransform;
+  if (type == NODE_MAPPING_TYPE_TEXTURE) {
+    rotationTransform = euler_to_transform(-rotation);
   }
   else {
-    rot_t = euler_to_transform(rot);
+    rotationTransform = euler_to_transform(rotation);
   }
 
-  switch (vecType) {
+  switch (type) {
     case NODE_MAPPING_TYPE_POINT:
-      *outVec = transform_direction(&rot_t, (vecIn * size)) + loc;
-      break;
+      return transform_direction(&rotationTransform, (vector * scale)) + location;
     case NODE_MAPPING_TYPE_TEXTURE:
-      *outVec = safe_divide_float3_float3(transform_direction(&rot_t, (vecIn - loc)), size);
-      break;
+      return safe_divide_float3_float3(
+          transform_direction(&rotationTransform, (vector - location)), scale);
     case NODE_MAPPING_TYPE_VECTOR:
-      *outVec = transform_direction(&rot_t, (vecIn * size));
-      break;
+      return transform_direction(&rotationTransform, (vector * scale));
     case NODE_MAPPING_TYPE_NORMAL:
-      *outVec = safe_normalize(
-          transform_direction(&rot_t, safe_divide_float3_float3(vecIn, size)));
-      break;
+      return safe_normalize(
+          transform_direction(&rotationTransform, safe_divide_float3_float3(vector, scale)));
     default:
-      *outVec = make_float3(0.0f, 0.0f, 0.0f);
+      return make_float3(0.0f, 0.0f, 0.0f);
   }
 }
 
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 60abb97d669..e8fc74154d3 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -1751,14 +1751,14 @@ NODE_DEFINE(MappingNode)
   type_enum.insert("texture", NODE_MAPPING_TYPE_TEXTURE);
   type_enum.insert("vector", NODE_MAPPING_TYPE_VECTOR);
   type_enum.insert("normal", NODE_MAPPING_TYPE_NORMAL);
-  SOCKET_ENUM(vector_type, "Type", type_enum, NODE_MAPPING_TYPE_TEXTURE);
+  SOCKET_ENUM(type, "Type", type_enum, NODE_MAPPING_TYPE_POINT);
 
-  SOCKET_IN_POINT(vector_in, "Vector", make_float3(0.0f, 0.0f, 0.0f));
+  SOCKET_IN_POINT(vector, "Vector", make_float3(0.0f, 0.0f, 0.0f));
   SOCKET_IN_POINT(location, "Location", make_float3(0.0f, 0.0f, 0.0f));
   SOCKET_IN_POINT(rotation, "Rotation", make_float3(0.0f, 0.0f, 0.0f));
   SOCKET_IN_POINT(scale, "Scale", make_float3(1.0f, 1.0f, 1.0f));
 
-  SOCKET_OUT_POINT(vector_out, "Vector");
+  SOCKET_OUT_POINT(result, "Result");
 
   return type;
 }
@@ -1769,39 +1769,35 @@ MappingNode::MappingNode() : ShaderNode(node_type)
 
 void MappingNode::constant_fold(const ConstantFolder &folder)
 {
-  float3 vector_out;
-
   if (folder.all_inputs_constant()) {
-    svm_mapping(&vector_out, vector_type, vector_in, location, rotation, scale);
-    folder.make_constant(vector_out);
+    float3 result = svm_mapping((NodeMappingType)type, vector, location, rotation, scale);
+    folder.make_constant(result);
   }
   else {
-    folder.fold_mapping((NodeMappingType)vector_type);
+    folder.fold_mapping((NodeMappingType)type);
   }
 }
 
 void MappingNode::compile(SVMCompiler &compiler)
 {
   ShaderInput *vector_in = input("Vector");
-  ShaderInput *location = input("Location");
-  ShaderInput *rotation = input("Rotation");
-  ShaderInput *scale = input("Scale");
+  ShaderInput *location_in = input("Location");
+  ShaderInput *rotation_in = input("Rotation");
+  ShaderInput *scale_in = input("Scale");
 
-  ShaderOutput *vector_out = output("Vector");
+  ShaderOutput *result_out = output("Result");
 
-  int rotation_stack = compiler.stack_assign(rotation);
-  int scale_stack = compiler.stack_assign(scale);
+  int rotation_stack = compiler.stack_assign(rotation_in);
+  int scale_stack = compiler.stack_assign(scale_in);
 
-  compiler.add_node(NODE_MAPPING,
-                    vector_type,
-                    compiler.stack_assign(vector_in),
-                    compiler.stack_assign(location));
-  compiler.add_node(NODE_MAPPING, rotation_stack, scale_stack, compiler.stack_assign(vector_out));
+  compiler.add_node(
+      NODE_MAPPING, type, compiler.stack_assign(vector_in), compiler.stack_assign(location_in));
+  compiler.add_node(NODE_MAPPING, rotation_stack, scale_stack, compiler.stack_assign(result_out));
 }
 
 void MappingNode::compile(OSLCompiler &compiler)
 {
-  compiler.parameter(this, "vector_type");
+  compiler.parameter(this, "type");
   compiler.add(this, "node_mapping");
 }
 
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 43eb259d903..1a83d68c156 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -394,8 +394,8 @@ class MappingNode : public ShaderNode {
   }
   void constant_fold(const ConstantFolder &folder);
 
-  float3 vector_in, location, rotation, scale;
-  NodeMappingType vector_type;
+  float3 vector, location, rotation, scale;
+  NodeMappingType type;
 };
 
 class RGBToBWNode : publi

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list