Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorOmarSquircleArt <omar.squircleart@gmail.com>2019-08-14 11:53:19 +0300
committerOmarSquircleArt <omar.squircleart@gmail.com>2019-08-14 11:53:19 +0300
commit7a7eadaf7f6be4008f49a83d76c5a6d5a6294f14 (patch)
tree8a064999db636d7c8c49f41156fd526193cee658 /intern
parentc9acc5faad08422e07be59fc160a028a45b7440c (diff)
Shading: Add a clamp option to the Map Range node.
If the option is enabled, the output is clamped to the target range. The target range is [To Min, To Max]. The option is enabled by default. The clamp option is implemented in EEVEE by linking to the `clamp_value` GLSL function. And it is implemented in Cycles using a graph expand function. Reviewers: brecht, JacquesLucke Differential Revision: https://developer.blender.org/D5477
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/blender_shader.cpp5
-rw-r--r--intern/cycles/render/nodes.cpp15
-rw-r--r--intern/cycles/render/nodes.h3
3 files changed, 22 insertions, 1 deletions
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index b1c61c2fa8c..b95e88573fa 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -316,7 +316,10 @@ static ShaderNode *add_node(Scene *scene,
node = new RGBToBWNode();
}
else if (b_node.is_a(&RNA_ShaderNodeMapRange)) {
- node = new MapRangeNode();
+ BL::ShaderNodeMapRange b_map_range_node(b_node);
+ MapRangeNode *map_range_node = new MapRangeNode();
+ map_range_node->clamp = b_map_range_node.clamp();
+ node = map_range_node;
}
else if (b_node.is_a(&RNA_ShaderNodeClamp)) {
node = new ClampNode();
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 18a7180c446..1a0225e19a8 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -5280,6 +5280,21 @@ MapRangeNode::MapRangeNode() : ShaderNode(node_type)
{
}
+void MapRangeNode::expand(ShaderGraph *graph)
+{
+ if (clamp) {
+ ShaderOutput *result_out = output("Result");
+ if (!result_out->links.empty()) {
+ ClampNode *clamp_node = new ClampNode();
+ clamp_node->min = to_min;
+ clamp_node->max = to_max;
+ graph->add(clamp_node);
+ graph->relink(result_out, clamp_node->output("Result"));
+ graph->connect(result_out, clamp_node->input("Value"));
+ }
+ }
+}
+
void MapRangeNode::constant_fold(const ConstantFolder &folder)
{
if (folder.all_inputs_constant()) {
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 9ac42ffc76c..d4708adf9af 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -1236,7 +1236,10 @@ class MapRangeNode : public ShaderNode {
{
return NODE_GROUP_LEVEL_3;
}
+ void expand(ShaderGraph *graph);
+
float value, from_min, from_max, to_min, to_max;
+ bool clamp;
};
class ClampNode : public ShaderNode {