[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