forked from blender/blender
MaterialX: add convert nodes #15
@ -153,6 +153,7 @@ if(WITH_MATERIALX)
|
|||||||
materialx/nodes/clamp.cc
|
materialx/nodes/clamp.cc
|
||||||
materialx/nodes/huesatval.cc
|
materialx/nodes/huesatval.cc
|
||||||
materialx/nodes/invert.cc
|
materialx/nodes/invert.cc
|
||||||
|
materialx/nodes/map_range.cc
|
||||||
materialx/nodes/math.cc
|
materialx/nodes/math.cc
|
||||||
materialx/nodes/mix_rgb.cc
|
materialx/nodes/mix_rgb.cc
|
||||||
materialx/nodes/node_item.cc
|
materialx/nodes/node_item.cc
|
||||||
|
51
source/blender/nodes/shader/materialx/nodes/map_range.cc
Normal file
51
source/blender/nodes/shader/materialx/nodes/map_range.cc
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
|
||||||
|
#include "node_parser.h"
|
||||||
|
|
||||||
|
namespace blender::nodes::materialx {
|
||||||
|
|
||||||
|
NodeItem MapRangeNodeParser::compute()
|
||||||
|
{
|
||||||
|
/* Interpolation isn't supported by MaterialX. */
|
||||||
|
const NodeMapRange *map_range = static_cast<NodeMapRange *>(node_->storage);
|
||||||
|
|
||||||
|
NodeItem::Type type;
|
||||||
|
NodeItem val = empty();
|
||||||
|
NodeItem from_min = empty();
|
||||||
|
NodeItem from_max = empty();
|
||||||
|
NodeItem to_min = empty();
|
||||||
|
NodeItem to_max = empty();
|
||||||
|
switch (map_range->data_type) {
|
||||||
|
case CD_PROP_FLOAT:
|
||||||
|
type = NodeItem::Type::Float;
|
||||||
|
val = get_input_value("Value", type);
|
||||||
|
from_min = get_input_value(1, type);
|
||||||
|
from_max = get_input_value(2, type);
|
||||||
|
to_min = get_input_value(3, type);
|
||||||
|
to_max = get_input_value(4, type);
|
||||||
|
break;
|
||||||
|
case CD_PROP_FLOAT3:
|
||||||
|
type = NodeItem::Type::Vector3;
|
||||||
|
val = get_input_value("Vector", type);
|
||||||
|
from_min = get_input_value(7, type);
|
||||||
|
from_max = get_input_value(8, type);
|
||||||
|
to_min = get_input_value(9, type);
|
||||||
|
to_max = get_input_value(10, type);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
BLI_assert_unreachable();
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeItem res = create_node("range", NodeItem::type(type));
|
||||||
|
res.set_input("in", val);
|
||||||
|
res.set_input("inlow", from_min);
|
||||||
|
res.set_input("inhigh", from_max);
|
||||||
|
res.set_input("outlow", to_min);
|
||||||
|
res.set_input("outhigh", to_max);
|
||||||
|
res.set_input("doclamp", value(bool(map_range->clamp)));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace blender::nodes::materialx
|
@ -513,6 +513,9 @@ void NodeItem::set_input(const std::string &name,
|
|||||||
case Type::String:
|
case Type::String:
|
||||||
set_input(name, item.value->asA<std::string>(), mx_type);
|
set_input(name, item.value->asA<std::string>(), mx_type);
|
||||||
break;
|
break;
|
||||||
|
case Type::Bool:
|
||||||
|
set_input(name, item.value->asA<bool>(), mx_type);
|
||||||
|
break;
|
||||||
case Type::Integer:
|
case Type::Integer:
|
||||||
set_input(name, item.value->asA<int>(), mx_type);
|
set_input(name, item.value->asA<int>(), mx_type);
|
||||||
break;
|
break;
|
||||||
@ -559,6 +562,9 @@ NodeItem::Type NodeItem::type(const std::string &type_str)
|
|||||||
if (type_str == "string") {
|
if (type_str == "string") {
|
||||||
return Type::String;
|
return Type::String;
|
||||||
}
|
}
|
||||||
|
if (type_str == "boolean") {
|
||||||
|
return Type::Bool;
|
||||||
|
}
|
||||||
if (type_str == "integer") {
|
if (type_str == "integer") {
|
||||||
return Type::Integer;
|
return Type::Integer;
|
||||||
}
|
}
|
||||||
@ -588,6 +594,8 @@ std::string NodeItem::type(Type type)
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case Type::String:
|
case Type::String:
|
||||||
return "string";
|
return "string";
|
||||||
|
case Type::Bool:
|
||||||
|
return "boolean";
|
||||||
case Type::Integer:
|
case Type::Integer:
|
||||||
return "integer";
|
return "integer";
|
||||||
case Type::Float:
|
case Type::Float:
|
||||||
@ -603,6 +611,7 @@ std::string NodeItem::type(Type type)
|
|||||||
case Type::Color4:
|
case Type::Color4:
|
||||||
return "color4";
|
return "color4";
|
||||||
default:
|
default:
|
||||||
|
BLI_assert_unreachable();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
|
@ -14,6 +14,7 @@ class NodeItem {
|
|||||||
Empty = 0,
|
Empty = 0,
|
||||||
Other, /* For MaterialX types like: surfaceshader, bsdf, edf, ...*/
|
Other, /* For MaterialX types like: surfaceshader, bsdf, edf, ...*/
|
||||||
String,
|
String,
|
||||||
|
Bool,
|
||||||
Integer,
|
Integer,
|
||||||
Float,
|
Float,
|
||||||
Vector2,
|
Vector2,
|
||||||
@ -47,6 +48,9 @@ class NodeItem {
|
|||||||
bool operator==(const NodeItem &other) const;
|
bool operator==(const NodeItem &other) const;
|
||||||
bool operator!=(const NodeItem &other) const;
|
bool operator!=(const NodeItem &other) const;
|
||||||
|
|
||||||
|
static Type type(const std::string &type_str);
|
||||||
|
static std::string type(Type type);
|
||||||
|
|
||||||
/* Math functions */
|
/* Math functions */
|
||||||
NodeItem abs() const;
|
NodeItem abs() const;
|
||||||
NodeItem floor() const;
|
NodeItem floor() const;
|
||||||
@ -92,8 +96,6 @@ class NodeItem {
|
|||||||
void add_output(const std::string &in_name, Type out_type);
|
void add_output(const std::string &in_name, Type out_type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Type type(const std::string &type_str);
|
|
||||||
static std::string type(Type type);
|
|
||||||
static bool is_arithmetic(Type type);
|
static bool is_arithmetic(Type type);
|
||||||
static Type adjust_types(NodeItem &item1, NodeItem &item2);
|
static Type adjust_types(NodeItem &item1, NodeItem &item2);
|
||||||
|
|
||||||
|
@ -140,6 +140,7 @@ NodeItem NodeParser::get_input_link(const bNodeSocket &socket)
|
|||||||
CASE_NODE_TYPE(SH_NODE_COMBXYZ, CombineXYZNodeParser)
|
CASE_NODE_TYPE(SH_NODE_COMBXYZ, CombineXYZNodeParser)
|
||||||
CASE_NODE_TYPE(SH_NODE_HUE_SAT, HueSatValNodeParser)
|
CASE_NODE_TYPE(SH_NODE_HUE_SAT, HueSatValNodeParser)
|
||||||
CASE_NODE_TYPE(SH_NODE_INVERT, InvertNodeParser)
|
CASE_NODE_TYPE(SH_NODE_INVERT, InvertNodeParser)
|
||||||
|
CASE_NODE_TYPE(SH_NODE_MAP_RANGE, MapRangeNodeParser)
|
||||||
CASE_NODE_TYPE(SH_NODE_MATH, MathNodeParser)
|
CASE_NODE_TYPE(SH_NODE_MATH, MathNodeParser)
|
||||||
CASE_NODE_TYPE(SH_NODE_MIX_RGB_LEGACY, MixRGBNodeParser)
|
CASE_NODE_TYPE(SH_NODE_MIX_RGB_LEGACY, MixRGBNodeParser)
|
||||||
CASE_NODE_TYPE(SH_NODE_NORMAL_MAP, NormalMapNodeParser)
|
CASE_NODE_TYPE(SH_NODE_NORMAL_MAP, NormalMapNodeParser)
|
||||||
|
@ -71,6 +71,7 @@ DECLARE_PARSER(CombineColorNodeParser)
|
|||||||
DECLARE_PARSER(CombineXYZNodeParser)
|
DECLARE_PARSER(CombineXYZNodeParser)
|
||||||
DECLARE_PARSER(HueSatValNodeParser)
|
DECLARE_PARSER(HueSatValNodeParser)
|
||||||
DECLARE_PARSER(InvertNodeParser)
|
DECLARE_PARSER(InvertNodeParser)
|
||||||
|
DECLARE_PARSER(MapRangeNodeParser)
|
||||||
DECLARE_PARSER(MathNodeParser)
|
DECLARE_PARSER(MathNodeParser)
|
||||||
DECLARE_PARSER(MixRGBNodeParser)
|
DECLARE_PARSER(MixRGBNodeParser)
|
||||||
DECLARE_PARSER(NormalMapNodeParser)
|
DECLARE_PARSER(NormalMapNodeParser)
|
||||||
|
Loading…
Reference in New Issue
Block a user