From 902dbd6c65d55c3428d4ef6ef20b64d5e3ae093e Mon Sep 17 00:00:00 2001 From: "georgiy.m.markelov@gmail.com" Date: Thu, 7 Sep 2023 12:49:14 +0300 Subject: [PATCH 1/5] MaterialX: changed NodeParser::create_node() signature --- .../nodes/shader/materialx/nodes/bsdf_diffuse.cc | 2 +- .../nodes/shader/materialx/nodes/bsdf_principled.cc | 2 +- .../blender/nodes/shader/materialx/nodes/emission.cc | 2 +- .../blender/nodes/shader/materialx/nodes/huesatval.cc | 4 ++-- .../blender/nodes/shader/materialx/nodes/mix_shader.cc | 2 +- .../nodes/shader/materialx/nodes/node_parser.cc | 4 ++-- .../blender/nodes/shader/materialx/nodes/node_parser.h | 2 +- .../blender/nodes/shader/materialx/nodes/normal_map.cc | 2 +- .../nodes/shader/materialx/nodes/output_material.cc | 10 +++++----- .../nodes/shader/materialx/nodes/sepcomb_color.cc | 10 +++++----- .../nodes/shader/materialx/nodes/sepcomb_xyz.cc | 2 +- .../nodes/shader/materialx/nodes/tex_checker.cc | 4 ++-- .../nodes/shader/materialx/nodes/tex_environment.cc | 4 ++-- .../blender/nodes/shader/materialx/nodes/tex_image.cc | 4 ++-- .../blender/nodes/shader/materialx/nodes/tex_noise.cc | 4 ++-- 15 files changed, 29 insertions(+), 29 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/bsdf_diffuse.cc b/source/blender/nodes/shader/materialx/nodes/bsdf_diffuse.cc index 0b975cba89c..1260b52cc42 100644 --- a/source/blender/nodes/shader/materialx/nodes/bsdf_diffuse.cc +++ b/source/blender/nodes/shader/materialx/nodes/bsdf_diffuse.cc @@ -16,7 +16,7 @@ NodeItem BSDFDiffuseNodeParser::compute() NodeItem roughness = get_input_value("Roughness", NodeItem::Type::Float); NodeItem normal = get_input_link("Normal", NodeItem::Type::Vector3); - NodeItem res = create_node("oren_nayar_diffuse_bsdf", "BSDF"); + NodeItem res = create_node("oren_nayar_diffuse_bsdf", shader_type_); res.set_input("color", color); res.set_input("roughness", roughness); if (normal) { diff --git a/source/blender/nodes/shader/materialx/nodes/bsdf_principled.cc b/source/blender/nodes/shader/materialx/nodes/bsdf_principled.cc index 2a39bd542d8..e81433d511d 100644 --- a/source/blender/nodes/shader/materialx/nodes/bsdf_principled.cc +++ b/source/blender/nodes/shader/materialx/nodes/bsdf_principled.cc @@ -50,7 +50,7 @@ NodeItem BSDFPrincipledNodeParser::compute() NodeItem tangent = get_input_link("Tangent", NodeItem::Type::Vector3); /* Creating standard_surface */ - NodeItem res = create_node("standard_surface", "surfaceshader"); + NodeItem res = create_node("standard_surface", shader_type_); res.set_input("base", 1.0, "float"); res.set_input("base_color", base_color); res.set_input("diffuse_roughness", roughness); diff --git a/source/blender/nodes/shader/materialx/nodes/emission.cc b/source/blender/nodes/shader/materialx/nodes/emission.cc index 47d090e4e7f..7959a317835 100644 --- a/source/blender/nodes/shader/materialx/nodes/emission.cc +++ b/source/blender/nodes/shader/materialx/nodes/emission.cc @@ -15,7 +15,7 @@ NodeItem EmissionNodeParser::compute() NodeItem color = get_input_value("Color", NodeItem::Type::Color3); NodeItem strength = get_input_value("Strength", NodeItem::Type::Float); - NodeItem res = create_node("uniform_edf", "EDF"); + NodeItem res = create_node("uniform_edf", shader_type_); res.set_input("color", color * strength); return res; } diff --git a/source/blender/nodes/shader/materialx/nodes/huesatval.cc b/source/blender/nodes/shader/materialx/nodes/huesatval.cc index 05723f49a3f..612706a093c 100644 --- a/source/blender/nodes/shader/materialx/nodes/huesatval.cc +++ b/source/blender/nodes/shader/materialx/nodes/huesatval.cc @@ -19,12 +19,12 @@ NodeItem HueSatValNodeParser::compute() /* Modifier to follow Cycles result */ hue = hue - value(0.5f); - NodeItem combine = create_node("combine3", "vector3"); + NodeItem combine = create_node("combine3", NodeItem::Type::Vector3); combine.set_input("in1", hue); combine.set_input("in2", saturation); combine.set_input("in3", val); - NodeItem res = create_node("hsvadjust", "color3"); + NodeItem res = create_node("hsvadjust", NodeItem::Type::Color3); res.set_input("in", color); res.set_input("amount", combine); return res; diff --git a/source/blender/nodes/shader/materialx/nodes/mix_shader.cc b/source/blender/nodes/shader/materialx/nodes/mix_shader.cc index fc27dc1a92a..a2e16ccc0ad 100644 --- a/source/blender/nodes/shader/materialx/nodes/mix_shader.cc +++ b/source/blender/nodes/shader/materialx/nodes/mix_shader.cc @@ -23,7 +23,7 @@ NodeItem MixShaderNodeParser::compute() res = shader2 * fac; } else if (shader1 && shader2) { - res = create_node("mix", NodeItem::type(shader_type_)); + res = create_node("mix", shader_type_); res.set_input("fg", shader1); res.set_input("bg", shader2); res.set_input("mix", fac); diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.cc b/source/blender/nodes/shader/materialx/nodes/node_parser.cc index b1987955cd1..9adac05d7d2 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.cc @@ -39,10 +39,10 @@ std::string NodeParser::node_name() std::string(node_->name) + "_" + socket_out_->name); } -NodeItem NodeParser::create_node(const std::string &mx_category, const std::string &mx_type) +NodeItem NodeParser::create_node(const std::string &mx_category, NodeItem::Type type) { NodeItem res = empty(); - res.node = graph_->addNode(mx_category, MaterialX::EMPTY_STRING, mx_type); + res.node = graph_->addNode(mx_category, MaterialX::EMPTY_STRING, NodeItem::type(type)); return res; } diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.h b/source/blender/nodes/shader/materialx/nodes/node_parser.h index eb4502d6cd0..9db7649643a 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.h +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.h @@ -33,7 +33,7 @@ class NodeParser { protected: virtual NodeItem compute_full(); virtual std::string node_name(); - NodeItem create_node(const std::string &mx_category, const std::string &mx_type); + NodeItem create_node(const std::string &mx_category, NodeItem::Type type); NodeItem get_input_default(const std::string &name, NodeItem::Type to_type); NodeItem get_input_default(int index, NodeItem::Type to_type); NodeItem get_input_link(const std::string &name, NodeItem::Type to_type); diff --git a/source/blender/nodes/shader/materialx/nodes/normal_map.cc b/source/blender/nodes/shader/materialx/nodes/normal_map.cc index 8145a3444ac..2d4436cba53 100644 --- a/source/blender/nodes/shader/materialx/nodes/normal_map.cc +++ b/source/blender/nodes/shader/materialx/nodes/normal_map.cc @@ -14,7 +14,7 @@ NodeItem NormalMapNodeParser::compute() NodeItem color = get_input_value("Color", NodeItem::Type::Color3); NodeItem strength = get_input_value("Strength", NodeItem::Type::Float); - NodeItem res = create_node("normalmap", "vector3"); + NodeItem res = create_node("normalmap", NodeItem::Type::Vector3); res.set_input("in", color); res.set_input("scale", strength); diff --git a/source/blender/nodes/shader/materialx/nodes/output_material.cc b/source/blender/nodes/shader/materialx/nodes/output_material.cc index 99d071973c8..fbaf36947f0 100644 --- a/source/blender/nodes/shader/materialx/nodes/output_material.cc +++ b/source/blender/nodes/shader/materialx/nodes/output_material.cc @@ -20,7 +20,7 @@ NodeItem OutputMaterialNodeParser::compute() NodeItem bsdf = get_input_shader("Surface", NodeItem::Type::BSDF); NodeItem edf = get_input_shader("Surface", NodeItem::Type::EDF); if (bsdf || edf) { - surface = create_node("surface", "surfaceshader"); + surface = create_node("surface", NodeItem::Type::SurfaceShader); if (bsdf) { surface.set_input("bsdf", bsdf); } @@ -33,17 +33,17 @@ NodeItem OutputMaterialNodeParser::compute() } } else { - surface = create_node("standard_surface", "surfaceshader"); + surface = create_node("standard_surface", NodeItem::Type::SurfaceShader); surface.set_input("base_color", value(MaterialX::Color3(1.0f, 0.0f, 1.0f))); } - NodeItem res = create_node("surfacematerial", "material"); + NodeItem res = create_node("surfacematerial", shader_type_); res.set_input("surfaceshader", surface); return res; } NodeItem OutputMaterialNodeParser::compute_default() { - NodeItem surface = create_node("standard_surface", "surfaceshader"); + NodeItem surface = create_node("standard_surface", NodeItem::Type::SurfaceShader); surface.set_input("base_color", value(MaterialX::Color3(material_->r, material_->g, material_->b))); surface.set_input("diffuse_roughness", value(material_->roughness)); @@ -56,7 +56,7 @@ NodeItem OutputMaterialNodeParser::compute_default() surface.set_input("specular_roughness", value(material_->roughness)); } - NodeItem res = create_node("surfacematerial", "material"); + NodeItem res = create_node("surfacematerial", shader_type_); res.node->setName("Material_Default"); res.set_input("surfaceshader", surface); return res; diff --git a/source/blender/nodes/shader/materialx/nodes/sepcomb_color.cc b/source/blender/nodes/shader/materialx/nodes/sepcomb_color.cc index 7867808285d..e3398d8a4a4 100644 --- a/source/blender/nodes/shader/materialx/nodes/sepcomb_color.cc +++ b/source/blender/nodes/shader/materialx/nodes/sepcomb_color.cc @@ -18,12 +18,12 @@ NodeItem SeparateColorNodeParser::compute() case NODE_COMBSEP_COLOR_RGB: break; case NODE_COMBSEP_COLOR_HSV: - convert = create_node("rgbtohsv", "color3"); + convert = create_node("rgbtohsv", NodeItem::Type::Color3); convert.set_input("in", color); break; case NODE_COMBSEP_COLOR_HSL: CLOG_WARN(LOG_MATERIALX_SHADER, "Unsupported color model, using HSV instead: %d", mode); - convert = create_node("rgbtohsv", "color3"); + convert = create_node("rgbtohsv", NodeItem::Type::Color3); convert.set_input("in", color); break; default: @@ -44,7 +44,7 @@ NodeItem CombineColorNodeParser::compute() NodeItem blue = get_input_value("Blue", NodeItem::Type::Float); NodeItem convert = empty(); - NodeItem combine = create_node("combine3", "color3"); + NodeItem combine = create_node("combine3", NodeItem::Type::Color3); combine.set_input("in1", red); combine.set_input("in2", green); combine.set_input("in3", blue); @@ -53,12 +53,12 @@ NodeItem CombineColorNodeParser::compute() case NODE_COMBSEP_COLOR_RGB: break; case NODE_COMBSEP_COLOR_HSV: - convert = create_node("hsvtorgb", "color3"); + convert = create_node("hsvtorgb", NodeItem::Type::Color3); convert.set_input("in", combine); break; case NODE_COMBSEP_COLOR_HSL: CLOG_WARN(LOG_MATERIALX_SHADER, "Unsupported color model, using HSV instead: %d", mode); - convert = create_node("hsvtorgb", "color3"); + convert = create_node("hsvtorgb", NodeItem::Type::Color3); convert.set_input("in", combine); break; default: diff --git a/source/blender/nodes/shader/materialx/nodes/sepcomb_xyz.cc b/source/blender/nodes/shader/materialx/nodes/sepcomb_xyz.cc index 1143a97511d..e228edf708a 100644 --- a/source/blender/nodes/shader/materialx/nodes/sepcomb_xyz.cc +++ b/source/blender/nodes/shader/materialx/nodes/sepcomb_xyz.cc @@ -18,7 +18,7 @@ NodeItem CombineXYZNodeParser::compute() NodeItem x = get_input_value("X", NodeItem::Type::Float); NodeItem y = get_input_value("Y", NodeItem::Type::Float); NodeItem z = get_input_value("Z", NodeItem::Type::Float); - NodeItem res = create_node("combine3", "vector3"); + NodeItem res = create_node("combine3", NodeItem::Type::Vector3); res.set_input("in1", x); res.set_input("in2", y); res.set_input("in3", z); diff --git a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc index f039a6336e4..beb10452fd2 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc @@ -14,12 +14,12 @@ NodeItem TexCheckerNodeParser::compute() NodeItem scale = get_input_value("Scale", NodeItem::Type::Float); if (!vector) { - vector = create_node("texcoord", "vector2"); + vector = create_node("texcoord", NodeItem::Type::Vector2); } vector = (vector * scale) % value(2.0f); NodeItem mix = (vector.extract(0).floor() + vector.extract(1).floor()) .if_else(NodeItem::CompareOp::Eq, value(1.0f), value(1.0f), value(0.0f)); - NodeItem res = create_node("mix", "color3"); + NodeItem res = create_node("mix", NodeItem::Type::Color3); res.set_input("fg", color1); res.set_input("bg", color2); res.set_input("mix", mix); diff --git a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc index f2aede4cb4b..bb258f34cbe 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc @@ -23,8 +23,8 @@ NodeItem TexEnvironmentNodeParser::compute() image_path = io::hydra::cache_or_get_image_file(bmain, scene, image, &tex->iuser); #endif - NodeItem texcoord = create_node("texcoord", "vector2"); - NodeItem res = create_node("image", "color3"); + NodeItem texcoord = create_node("texcoord", NodeItem::Type::Vector2); + NodeItem res = create_node("image", NodeItem::Type::Color3); res.set_input("file", image_path, "filename"); res.set_input("texcoord", texcoord); return res; diff --git a/source/blender/nodes/shader/materialx/nodes/tex_image.cc b/source/blender/nodes/shader/materialx/nodes/tex_image.cc index 2a2625259ef..3a88038344a 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_image.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_image.cc @@ -23,8 +23,8 @@ NodeItem TexImageNodeParser::compute() image_path = io::hydra::cache_or_get_image_file(bmain, scene, image, &tex->iuser); #endif - NodeItem texcoord = create_node("texcoord", "vector2"); - NodeItem res = create_node("image", "color3"); + NodeItem texcoord = create_node("texcoord", NodeItem::Type::Vector2); + NodeItem res = create_node("image", NodeItem::Type::Color3); res.set_input("file", image_path, "filename"); res.set_input("texcoord", texcoord); return res; diff --git a/source/blender/nodes/shader/materialx/nodes/tex_noise.cc b/source/blender/nodes/shader/materialx/nodes/tex_noise.cc index 60631acb4ff..02b123e4678 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_noise.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_noise.cc @@ -16,10 +16,10 @@ NodeItem TexNoiseNodeParser::compute() detail = value(int(detail.value->asA())); } - NodeItem position = create_node("position", "vector3"); + NodeItem position = create_node("position", NodeItem::Type::Vector3); position = position * scale; - NodeItem res = create_node("fractal3d", "color3"); + NodeItem res = create_node("fractal3d", NodeItem::Type::Color3); res.set_input("position", position); res.set_input("octaves", detail); res.set_input("lacunarity", lacunarity); -- 2.30.2 From 49b542724ebcb5db94f5cbf8fd403d986d864ab2 Mon Sep 17 00:00:00 2001 From: "georgiy.m.markelov@gmail.com" Date: Thu, 7 Sep 2023 13:22:10 +0300 Subject: [PATCH 2/5] MaterialX: added NodeItem::set_input_output --- .../nodes/shader/materialx/nodes/node_item.cc | 38 +++++++++++-------- .../nodes/shader/materialx/nodes/node_item.h | 5 ++- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.cc b/source/blender/nodes/shader/materialx/nodes/node_item.cc index 8c62b0bf426..b50bb895e9d 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_item.cc @@ -617,53 +617,59 @@ NodeItem::Type NodeItem::type() const return Type::Empty; } -void NodeItem::set_input(const std::string &name, - const NodeItem &item, - const std::string &output_name) +void NodeItem::set_input(const std::string &in_name, const NodeItem &item) { if (item.value) { Type item_type = item.type(); std::string mx_type = type(item_type); switch (item_type) { case Type::String: - set_input(name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), mx_type); break; case Type::Integer: - set_input(name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), mx_type); break; case Type::Float: - set_input(name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), mx_type); break; case Type::Vector2: - set_input(name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), mx_type); break; case Type::Vector3: - set_input(name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), mx_type); break; case Type::Vector4: - set_input(name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), mx_type); break; case Type::Color3: - set_input(name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), mx_type); break; case Type::Color4: - set_input(name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), mx_type); break; default: BLI_assert_unreachable(); } } else if (item.node) { - node->setConnectedNode(name, item.node); - if (output_name != "") { - node->setConnectedOutput(name, item.node->getOutput(output_name)); - } + node->setConnectedNode(in_name, item.node); } else { - CLOG_WARN(LOG_MATERIALX_SHADER, "Empty item to input: %s", name.c_str()); + CLOG_WARN(LOG_MATERIALX_SHADER, "Empty item to input: %s", in_name.c_str()); } } +void NodeItem::set_input_output(const std::string &in_name, + const NodeItem &item, + const std::string &out_name) +{ + if (!item.node) { + BLI_assert_unreachable(); + } + node->setConnectedNode(in_name, item.node); + node->setConnectedOutput(in_name, item.node->getOutput(out_name)); +} + void NodeItem::add_output(const std::string &name, Type out_type) { node->addOutput(name, type(out_type)); diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.h b/source/blender/nodes/shader/materialx/nodes/node_item.h index 6a223a4d850..57da6d8ece4 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.h +++ b/source/blender/nodes/shader/materialx/nodes/node_item.h @@ -101,9 +101,10 @@ class NodeItem { /* Functions to set input and output */ template void set_input(const std::string &in_name, const T &value, const std::string &in_type); - void set_input(const std::string &in_name, + void set_input(const std::string &in_name, const NodeItem &item); + void set_input_output(const std::string &in_name, const NodeItem &item, - const std::string &out_name = ""); + const std::string &out_name); void add_output(const std::string &in_name, Type out_type); private: -- 2.30.2 From 32369e509302ccea9ec3e51c7542e828385c1190 Mon Sep 17 00:00:00 2001 From: "georgiy.m.markelov@gmail.com" Date: Thu, 7 Sep 2023 14:26:31 +0300 Subject: [PATCH 3/5] MaterialX: added NodeItem::create_node --- source/blender/nodes/shader/materialx/material.cc | 2 +- source/blender/nodes/shader/materialx/nodes/node_item.cc | 8 ++++++++ source/blender/nodes/shader/materialx/nodes/node_item.h | 5 +++-- .../blender/nodes/shader/materialx/nodes/node_parser.cc | 4 +--- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/source/blender/nodes/shader/materialx/material.cc b/source/blender/nodes/shader/materialx/material.cc index a4d2f2264a7..1902d1dc2f5 100644 --- a/source/blender/nodes/shader/materialx/material.cc +++ b/source/blender/nodes/shader/materialx/material.cc @@ -32,7 +32,7 @@ MaterialX::DocumentPtr export_to_materialx(Depsgraph *depsgraph, Material *mater } CLOG_INFO(LOG_MATERIALX_SHADER, - 2, + 1, "Material: %s\n%s", material->id.name, MaterialX::writeToXmlString(doc).c_str()); diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.cc b/source/blender/nodes/shader/materialx/nodes/node_item.cc index b50bb895e9d..6ec44af90f7 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_item.cc @@ -617,6 +617,14 @@ NodeItem::Type NodeItem::type() const return Type::Empty; } +NodeItem NodeItem::create_node(const std::string &mx_category, NodeItem::Type type) +{ + std::string mx_type = this->type(type); + CLOG_INFO(LOG_MATERIALX_SHADER, 2, "%s, %s", mx_category.c_str(), mx_type.c_str()); + node = graph_->addNode(mx_category, MaterialX::EMPTY_STRING, mx_type); + return *this; +} + void NodeItem::set_input(const std::string &in_name, const NodeItem &item) { if (item.value) { diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.h b/source/blender/nodes/shader/materialx/nodes/node_item.h index 57da6d8ece4..7060fe45f78 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.h +++ b/source/blender/nodes/shader/materialx/nodes/node_item.h @@ -97,14 +97,15 @@ class NodeItem { NodeItem empty() const; template NodeItem val(const T &data) const; Type type() const; + NodeItem create_node(const std::string &mx_category, NodeItem::Type type); /* Functions to set input and output */ template void set_input(const std::string &in_name, const T &value, const std::string &in_type); void set_input(const std::string &in_name, const NodeItem &item); void set_input_output(const std::string &in_name, - const NodeItem &item, - const std::string &out_name); + const NodeItem &item, + const std::string &out_name); void add_output(const std::string &in_name, Type out_type); private: diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.cc b/source/blender/nodes/shader/materialx/nodes/node_parser.cc index 9adac05d7d2..c6e7f72726d 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.cc @@ -41,9 +41,7 @@ std::string NodeParser::node_name() NodeItem NodeParser::create_node(const std::string &mx_category, NodeItem::Type type) { - NodeItem res = empty(); - res.node = graph_->addNode(mx_category, MaterialX::EMPTY_STRING, NodeItem::type(type)); - return res; + return empty().create_node(mx_category, type); } NodeItem NodeParser::get_input_default(const std::string &name, NodeItem::Type to_type) -- 2.30.2 From d6152cffe536b7751f1a60fe247bc1c34947abb9 Mon Sep 17 00:00:00 2001 From: "georgiy.m.markelov@gmail.com" Date: Thu, 7 Sep 2023 15:35:44 +0300 Subject: [PATCH 4/5] MaterialX: rename value -> val, small code improvements, renamings --- .../shader/materialx/nodes/brightness.cc | 2 +- .../shader/materialx/nodes/bsdf_diffuse.cc | 2 +- .../shader/materialx/nodes/bsdf_principled.cc | 4 +- .../nodes/shader/materialx/nodes/emission.cc | 2 +- .../nodes/shader/materialx/nodes/huesatval.cc | 6 +-- .../nodes/shader/materialx/nodes/math.cc | 16 ++++---- .../shader/materialx/nodes/mix_shader.cc | 6 +-- .../nodes/shader/materialx/nodes/node_item.cc | 38 +++++++++---------- .../nodes/shader/materialx/nodes/node_item.h | 9 ++--- .../shader/materialx/nodes/node_parser.cc | 4 +- .../shader/materialx/nodes/node_parser.h | 6 +-- .../shader/materialx/nodes/normal_map.cc | 6 +-- .../shader/materialx/nodes/output_material.cc | 18 ++++----- .../shader/materialx/nodes/tex_checker.cc | 4 +- .../shader/materialx/nodes/tex_environment.cc | 2 +- .../nodes/shader/materialx/nodes/tex_image.cc | 2 +- .../nodes/shader/materialx/nodes/tex_noise.cc | 2 +- .../shader/materialx/nodes/vector_math.cc | 2 +- 18 files changed, 64 insertions(+), 67 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/brightness.cc b/source/blender/nodes/shader/materialx/nodes/brightness.cc index 7c3261c9f2b..01beec5ca38 100644 --- a/source/blender/nodes/shader/materialx/nodes/brightness.cc +++ b/source/blender/nodes/shader/materialx/nodes/brightness.cc @@ -13,7 +13,7 @@ NodeItem BrightContrastNodeParser::compute() NodeItem contrast = get_input_value("Contrast", NodeItem::Type::Float); /* This formula was given from OSL shader code in Cycles. */ - return (bright + color * (contrast + value(1.0f)) - contrast * value(0.5f)).max(value(0.0f)); + return (bright + color * (contrast + val(1.0f)) - contrast * val(0.5f)).max(val(0.0f)); } } // namespace blender::nodes::materialx diff --git a/source/blender/nodes/shader/materialx/nodes/bsdf_diffuse.cc b/source/blender/nodes/shader/materialx/nodes/bsdf_diffuse.cc index 1260b52cc42..7ef11fb9bbc 100644 --- a/source/blender/nodes/shader/materialx/nodes/bsdf_diffuse.cc +++ b/source/blender/nodes/shader/materialx/nodes/bsdf_diffuse.cc @@ -16,7 +16,7 @@ NodeItem BSDFDiffuseNodeParser::compute() NodeItem roughness = get_input_value("Roughness", NodeItem::Type::Float); NodeItem normal = get_input_link("Normal", NodeItem::Type::Vector3); - NodeItem res = create_node("oren_nayar_diffuse_bsdf", shader_type_); + NodeItem res = create_node("oren_nayar_diffuse_bsdf", NodeItem::Type::BSDF); res.set_input("color", color); res.set_input("roughness", roughness); if (normal) { diff --git a/source/blender/nodes/shader/materialx/nodes/bsdf_principled.cc b/source/blender/nodes/shader/materialx/nodes/bsdf_principled.cc index e81433d511d..7ce0b153b31 100644 --- a/source/blender/nodes/shader/materialx/nodes/bsdf_principled.cc +++ b/source/blender/nodes/shader/materialx/nodes/bsdf_principled.cc @@ -50,8 +50,8 @@ NodeItem BSDFPrincipledNodeParser::compute() NodeItem tangent = get_input_link("Tangent", NodeItem::Type::Vector3); /* Creating standard_surface */ - NodeItem res = create_node("standard_surface", shader_type_); - res.set_input("base", 1.0, "float"); + NodeItem res = create_node("standard_surface", NodeItem::Type::SurfaceShader); + res.set_input("base", val(1.0f)); res.set_input("base_color", base_color); res.set_input("diffuse_roughness", roughness); if (normal) { diff --git a/source/blender/nodes/shader/materialx/nodes/emission.cc b/source/blender/nodes/shader/materialx/nodes/emission.cc index 7959a317835..f737c328bc8 100644 --- a/source/blender/nodes/shader/materialx/nodes/emission.cc +++ b/source/blender/nodes/shader/materialx/nodes/emission.cc @@ -15,7 +15,7 @@ NodeItem EmissionNodeParser::compute() NodeItem color = get_input_value("Color", NodeItem::Type::Color3); NodeItem strength = get_input_value("Strength", NodeItem::Type::Float); - NodeItem res = create_node("uniform_edf", shader_type_); + NodeItem res = create_node("uniform_edf", NodeItem::Type::EDF); res.set_input("color", color * strength); return res; } diff --git a/source/blender/nodes/shader/materialx/nodes/huesatval.cc b/source/blender/nodes/shader/materialx/nodes/huesatval.cc index 612706a093c..3f66e2f5ca0 100644 --- a/source/blender/nodes/shader/materialx/nodes/huesatval.cc +++ b/source/blender/nodes/shader/materialx/nodes/huesatval.cc @@ -12,17 +12,17 @@ NodeItem HueSatValNodeParser::compute() * source\blender\nodes\texture\nodes\node_texture_hueSatVal.cc */ NodeItem hue = get_input_value("Hue", NodeItem::Type::Float); NodeItem saturation = get_input_value("Saturation", NodeItem::Type::Float); - NodeItem val = get_input_value("Value", NodeItem::Type::Float); + NodeItem value = get_input_value("Value", NodeItem::Type::Float); NodeItem fac = get_input_value("Fac", NodeItem::Type::Float); NodeItem color = get_input_value("Color", NodeItem::Type::Color3); /* Modifier to follow Cycles result */ - hue = hue - value(0.5f); + hue = hue - val(0.5f); NodeItem combine = create_node("combine3", NodeItem::Type::Vector3); combine.set_input("in1", hue); combine.set_input("in2", saturation); - combine.set_input("in3", val); + combine.set_input("in3", value); NodeItem res = create_node("hsvadjust", NodeItem::Type::Color3); res.set_input("in", color); diff --git a/source/blender/nodes/shader/materialx/nodes/math.cc b/source/blender/nodes/shader/materialx/nodes/math.cc index b038733c6ab..d7dd43cb004 100644 --- a/source/blender/nodes/shader/materialx/nodes/math.cc +++ b/source/blender/nodes/shader/materialx/nodes/math.cc @@ -35,7 +35,7 @@ NodeItem MathNodeParser::compute() res = x.atan(); break; case NODE_MATH_ROUND: - res = (x + value(0.5f)).floor(); + res = (x + val(0.5f)).floor(); break; case NODE_MATH_ABSOLUTE: res = x.abs(); @@ -47,13 +47,13 @@ NodeItem MathNodeParser::compute() res = x.ceil(); break; case NODE_MATH_FRACTION: - res = x % value(1.0f); + res = x % val(1.0f); break; case NODE_MATH_SQRT: res = x.sqrt(); break; case NODE_MATH_INV_SQRT: - res = value(1.0f) / x.sqrt(); + res = val(1.0f) / x.sqrt(); break; case NODE_MATH_SIGN: res = x.sign(); @@ -62,10 +62,10 @@ NodeItem MathNodeParser::compute() res = x.exp(); break; case NODE_MATH_RADIANS: - res = x * value(float(M_PI) / 180.0f); + res = x * val(float(M_PI) / 180.0f); break; case NODE_MATH_DEGREES: - res = x * value(180.0f * float(M_1_PI)); + res = x * val(180.0f * float(M_1_PI)); break; case NODE_MATH_SINH: res = x.sinh(); @@ -109,10 +109,10 @@ NodeItem MathNodeParser::compute() res = x.max(y); break; case NODE_MATH_LESS_THAN: - res = x.if_else(NodeItem::CompareOp::Less, y, value(1.0f), value(0.0f)); + res = x.if_else(NodeItem::CompareOp::Less, y, val(1.0f), val(0.0f)); break; case NODE_MATH_GREATER_THAN: - res = x.if_else(NodeItem::CompareOp::Greater, y, value(1.0f), value(0.0f)); + res = x.if_else(NodeItem::CompareOp::Greater, y, val(1.0f), val(0.0f)); break; case NODE_MATH_MODULO: res = x % y; @@ -138,7 +138,7 @@ NodeItem MathNodeParser::compute() CLOG_WARN(LOG_MATERIALX_SHADER, "Unimplemented math operation %d", op); break; case NODE_MATH_COMPARE: - res = z.if_else(NodeItem::CompareOp::Less, (x - y).abs(), value(1.0f), value(0.0f)); + res = z.if_else(NodeItem::CompareOp::Less, (x - y).abs(), val(1.0f), val(0.0f)); break; case NODE_MATH_MULTIPLY_ADD: res = x * y + z; diff --git a/source/blender/nodes/shader/materialx/nodes/mix_shader.cc b/source/blender/nodes/shader/materialx/nodes/mix_shader.cc index a2e16ccc0ad..40a1575d24c 100644 --- a/source/blender/nodes/shader/materialx/nodes/mix_shader.cc +++ b/source/blender/nodes/shader/materialx/nodes/mix_shader.cc @@ -17,7 +17,7 @@ NodeItem MixShaderNodeParser::compute() NodeItem shader2 = get_input_shader(2, shader_type_); if (shader1 && !shader2) { - res = shader1 * (value(1.0f) - fac); + res = shader1 * (val(1.0f) - fac); } else if (!shader1 && shader2) { res = shader2 * fac; @@ -31,9 +31,9 @@ NodeItem MixShaderNodeParser::compute() break; } case NodeItem::Type::SurfaceShader: { - res = get_input_shader(1, shader_type_); + res = get_input_shader(1, NodeItem::Type::SurfaceShader); if (!res) { - res = get_input_shader(2, shader_type_); + res = get_input_shader(2, NodeItem::Type::SurfaceShader); } break; } diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.cc b/source/blender/nodes/shader/materialx/nodes/node_item.cc index 6ec44af90f7..7310431b765 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_item.cc @@ -222,9 +222,8 @@ NodeItem NodeItem::dotproduct(const NodeItem &other) const { NodeItem d = arithmetic(other, "dotproduct", [](float a, float b) { return a * b; }); if (d.value) { - Type mx_type = d.type(); float f = 0.0f; - switch (mx_type) { + switch (d.type()) { case Type::Float: { f = value->asA(); break; @@ -569,18 +568,18 @@ NodeItem NodeItem::if_else(CompareOp op, } std::function func = nullptr; - std::string mx_category; + std::string category; switch (op) { case CompareOp::Greater: - mx_category = "ifgreater"; + category = "ifgreater"; func = [](float a, float b) { return a > b; }; break; case CompareOp::GreaterEq: - mx_category = "ifgreatereq"; + category = "ifgreatereq"; func = [](float a, float b) { return a >= b; }; break; case CompareOp::Eq: - mx_category = "ifequal"; + category = "ifequal"; func = [](float a, float b) { return a == b; }; break; default: @@ -591,7 +590,7 @@ NodeItem NodeItem::if_else(CompareOp op, res = func(value->asA(), other.value->asA()) ? item1 : item2; } else { - res.node = graph_->addNode(mx_category, MaterialX::EMPTY_STRING, type(to_type)); + res.node = graph_->addNode(category, MaterialX::EMPTY_STRING, type(to_type)); res.set_input("value1", *this); res.set_input("value2", other); res.set_input("in1", item1); @@ -617,11 +616,11 @@ NodeItem::Type NodeItem::type() const return Type::Empty; } -NodeItem NodeItem::create_node(const std::string &mx_category, NodeItem::Type type) +NodeItem NodeItem::create_node(const std::string &category, NodeItem::Type type) { - std::string mx_type = this->type(type); - CLOG_INFO(LOG_MATERIALX_SHADER, 2, "%s, %s", mx_category.c_str(), mx_type.c_str()); - node = graph_->addNode(mx_category, MaterialX::EMPTY_STRING, mx_type); + std::string type_str = this->type(type); + CLOG_INFO(LOG_MATERIALX_SHADER, 2, "<%s type=%s>", category.c_str(), type_str.c_str()); + node = graph_->addNode(category, MaterialX::EMPTY_STRING, type_str); return *this; } @@ -629,31 +628,30 @@ void NodeItem::set_input(const std::string &in_name, const NodeItem &item) { if (item.value) { Type item_type = item.type(); - std::string mx_type = type(item_type); switch (item_type) { case Type::String: - set_input(in_name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), item_type); break; case Type::Integer: - set_input(in_name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), item_type); break; case Type::Float: - set_input(in_name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), item_type); break; case Type::Vector2: - set_input(in_name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), item_type); break; case Type::Vector3: - set_input(in_name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), item_type); break; case Type::Vector4: - set_input(in_name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), item_type); break; case Type::Color3: - set_input(in_name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), item_type); break; case Type::Color4: - set_input(in_name, item.value->asA(), mx_type); + set_input(in_name, item.value->asA(), item_type); break; default: BLI_assert_unreachable(); diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.h b/source/blender/nodes/shader/materialx/nodes/node_item.h index 7060fe45f78..69587a37910 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.h +++ b/source/blender/nodes/shader/materialx/nodes/node_item.h @@ -97,11 +97,10 @@ class NodeItem { NodeItem empty() const; template NodeItem val(const T &data) const; Type type() const; - NodeItem create_node(const std::string &mx_category, NodeItem::Type type); + NodeItem create_node(const std::string &category, NodeItem::Type type); /* Functions to set input and output */ - template - void set_input(const std::string &in_name, const T &value, const std::string &in_type); + template void set_input(const std::string &in_name, const T &value, Type in_type); void set_input(const std::string &in_name, const NodeItem &item); void set_input_output(const std::string &in_name, const NodeItem &item, @@ -127,9 +126,9 @@ template NodeItem NodeItem::val(const T &data) const } template -void NodeItem::set_input(const std::string &in_name, const T &value, const std::string &in_type) +void NodeItem::set_input(const std::string &in_name, const T &value, Type in_type) { - node->setInputValue(in_name, value, in_type); + node->setInputValue(in_name, value, type(in_type)); } } // namespace blender::nodes::materialx diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.cc b/source/blender/nodes/shader/materialx/nodes/node_parser.cc index c6e7f72726d..4a287932875 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.cc @@ -39,9 +39,9 @@ std::string NodeParser::node_name() std::string(node_->name) + "_" + socket_out_->name); } -NodeItem NodeParser::create_node(const std::string &mx_category, NodeItem::Type type) +NodeItem NodeParser::create_node(const std::string &category, NodeItem::Type type) { - return empty().create_node(mx_category, type); + return empty().create_node(category, type); } NodeItem NodeParser::get_input_default(const std::string &name, NodeItem::Type to_type) diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.h b/source/blender/nodes/shader/materialx/nodes/node_parser.h index 9db7649643a..aed8803474c 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.h +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.h @@ -33,7 +33,7 @@ class NodeParser { protected: virtual NodeItem compute_full(); virtual std::string node_name(); - NodeItem create_node(const std::string &mx_category, NodeItem::Type type); + NodeItem create_node(const std::string &category, NodeItem::Type type); NodeItem get_input_default(const std::string &name, NodeItem::Type to_type); NodeItem get_input_default(int index, NodeItem::Type to_type); NodeItem get_input_link(const std::string &name, NodeItem::Type to_type); @@ -41,7 +41,7 @@ class NodeParser { NodeItem get_input_value(const std::string &name, NodeItem::Type to_type); NodeItem get_input_value(int index, NodeItem::Type to_type); NodeItem empty() const; - template NodeItem value(const T &data) const; + template NodeItem val(const T &data) const; private: NodeItem get_input_default(const bNodeSocket &socket, NodeItem::Type to_type); @@ -71,7 +71,7 @@ class ShaderNodeParser : public NodeParser { NodeItem get_input_shader(const bNodeSocket &socket, NodeItem::Type shader_type); }; -template NodeItem NodeParser::value(const T &data) const +template NodeItem NodeParser::val(const T &data) const { return empty().val(data); } diff --git a/source/blender/nodes/shader/materialx/nodes/normal_map.cc b/source/blender/nodes/shader/materialx/nodes/normal_map.cc index 2d4436cba53..1a51911a22f 100644 --- a/source/blender/nodes/shader/materialx/nodes/normal_map.cc +++ b/source/blender/nodes/shader/materialx/nodes/normal_map.cc @@ -20,13 +20,13 @@ NodeItem NormalMapNodeParser::compute() switch (normal_map_node->space) { case SHD_SPACE_TANGENT: - res.set_input("space", value(std::string("tangent"))); + res.set_input("space", val(std::string("tangent"))); break; case SHD_SPACE_OBJECT: - res.set_input("space", value(std::string("tangent"))); + res.set_input("space", val(std::string("tangent"))); break; default: - res.set_input("space", value(default_space)); + res.set_input("space", val(default_space)); CLOG_WARN(LOG_MATERIALX_SHADER, "Ignoring unsupported Space: %d %s (%d), %s will be used", normal_map_node->space, diff --git a/source/blender/nodes/shader/materialx/nodes/output_material.cc b/source/blender/nodes/shader/materialx/nodes/output_material.cc index fbaf36947f0..4de4991d1dd 100644 --- a/source/blender/nodes/shader/materialx/nodes/output_material.cc +++ b/source/blender/nodes/shader/materialx/nodes/output_material.cc @@ -34,9 +34,9 @@ NodeItem OutputMaterialNodeParser::compute() } else { surface = create_node("standard_surface", NodeItem::Type::SurfaceShader); - surface.set_input("base_color", value(MaterialX::Color3(1.0f, 0.0f, 1.0f))); + surface.set_input("base_color", val(MaterialX::Color3(1.0f, 0.0f, 1.0f))); } - NodeItem res = create_node("surfacematerial", shader_type_); + NodeItem res = create_node("surfacematerial", NodeItem::Type::Material); res.set_input("surfaceshader", surface); return res; } @@ -45,18 +45,18 @@ NodeItem OutputMaterialNodeParser::compute_default() { NodeItem surface = create_node("standard_surface", NodeItem::Type::SurfaceShader); surface.set_input("base_color", - value(MaterialX::Color3(material_->r, material_->g, material_->b))); - surface.set_input("diffuse_roughness", value(material_->roughness)); + val(MaterialX::Color3(material_->r, material_->g, material_->b))); + surface.set_input("diffuse_roughness", val(material_->roughness)); if (material_->metallic > 0.0f) { - surface.set_input("metalness", value(material_->metallic)); + surface.set_input("metalness", val(material_->metallic)); } if (material_->spec) { - surface.set_input("specular", value(material_->spec)); - surface.set_input("specular_color", value(material_->spec)); - surface.set_input("specular_roughness", value(material_->roughness)); + surface.set_input("specular", val(material_->spec)); + surface.set_input("specular_color", val(material_->spec)); + surface.set_input("specular_roughness", val(material_->roughness)); } - NodeItem res = create_node("surfacematerial", shader_type_); + NodeItem res = create_node("surfacematerial", NodeItem::Type::Material); res.node->setName("Material_Default"); res.set_input("surfaceshader", surface); return res; diff --git a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc index beb10452fd2..746cdab9803 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc @@ -16,9 +16,9 @@ NodeItem TexCheckerNodeParser::compute() if (!vector) { vector = create_node("texcoord", NodeItem::Type::Vector2); } - vector = (vector * scale) % value(2.0f); + vector = (vector * scale) % val(2.0f); NodeItem mix = (vector.extract(0).floor() + vector.extract(1).floor()) - .if_else(NodeItem::CompareOp::Eq, value(1.0f), value(1.0f), value(0.0f)); + .if_else(NodeItem::CompareOp::Eq, val(1.0f), val(1.0f), val(0.0f)); NodeItem res = create_node("mix", NodeItem::Type::Color3); res.set_input("fg", color1); res.set_input("bg", color2); diff --git a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc index bb258f34cbe..97e5a61bbeb 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc @@ -25,7 +25,7 @@ NodeItem TexEnvironmentNodeParser::compute() NodeItem texcoord = create_node("texcoord", NodeItem::Type::Vector2); NodeItem res = create_node("image", NodeItem::Type::Color3); - res.set_input("file", image_path, "filename"); + res.set_input("file", image_path, NodeItem::Type::Filename); res.set_input("texcoord", texcoord); return res; } diff --git a/source/blender/nodes/shader/materialx/nodes/tex_image.cc b/source/blender/nodes/shader/materialx/nodes/tex_image.cc index 3a88038344a..9ad1163aed5 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_image.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_image.cc @@ -25,7 +25,7 @@ NodeItem TexImageNodeParser::compute() NodeItem texcoord = create_node("texcoord", NodeItem::Type::Vector2); NodeItem res = create_node("image", NodeItem::Type::Color3); - res.set_input("file", image_path, "filename"); + res.set_input("file", image_path, NodeItem::Type::Filename); res.set_input("texcoord", texcoord); return res; } diff --git a/source/blender/nodes/shader/materialx/nodes/tex_noise.cc b/source/blender/nodes/shader/materialx/nodes/tex_noise.cc index 02b123e4678..ce6511b55d5 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_noise.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_noise.cc @@ -13,7 +13,7 @@ NodeItem TexNoiseNodeParser::compute() NodeItem lacunarity = get_input_value("Lacunarity", NodeItem::Type::Float); if (detail.value && detail.type() == NodeItem::Type::Float) { - detail = value(int(detail.value->asA())); + detail = val(int(detail.value->asA())); } NodeItem position = create_node("position", NodeItem::Type::Vector3); diff --git a/source/blender/nodes/shader/materialx/nodes/vector_math.cc b/source/blender/nodes/shader/materialx/nodes/vector_math.cc index a3267565772..51a6d6599f7 100644 --- a/source/blender/nodes/shader/materialx/nodes/vector_math.cc +++ b/source/blender/nodes/shader/materialx/nodes/vector_math.cc @@ -35,7 +35,7 @@ NodeItem VectorMathNodeParser::compute() res = x.ceil(); break; case NODE_VECTOR_MATH_FRACTION: - res = x % value(1.0f); + res = x % val(1.0f); break; case NODE_VECTOR_MATH_LENGTH: CLOG_WARN(LOG_MATERIALX_SHADER, "Unimplemented math operation %d", op); -- 2.30.2 From 0f0786aea7f10164d3b496e80b76bb31f3e94fd5 Mon Sep 17 00:00:00 2001 From: "georgiy.m.markelov@gmail.com" Date: Thu, 7 Sep 2023 15:55:37 +0300 Subject: [PATCH 5/5] MaterialX: code improvements --- .../nodes/shader/materialx/nodes/node_item.cc | 21 ++++++++++--------- .../nodes/shader/materialx/nodes/node_item.h | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.cc b/source/blender/nodes/shader/materialx/nodes/node_item.cc index 7310431b765..158a7178473 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_item.cc @@ -104,7 +104,7 @@ NodeItem NodeItem::operator+(const NodeItem &other) const /* Special case: add BSDF/EDF shaders */ NodeItem res = empty(); if (other.type() == type) { - res.node = graph_->addNode("add", MaterialX::EMPTY_STRING, this->type(type)); + res = create_node("add", type); res.set_input("in1", *this); res.set_input("in2", other); } @@ -135,7 +135,7 @@ NodeItem NodeItem::operator*(const NodeItem &other) const NodeItem res = empty(); Type other_type = other.type(); if (ELEM(other_type, Type::Float, Type::Color3)) { - res.node = graph_->addNode("multiply", MaterialX::EMPTY_STRING, this->type(type)); + res = create_node("multiply", type); res.set_input("in1", *this); res.set_input("in2", other); } @@ -349,7 +349,7 @@ NodeItem NodeItem::exp() const NodeItem NodeItem::extract(const int index) const { NodeItem res = empty(); - res.node = graph_->addNode("extract", MaterialX::EMPTY_STRING, "float"); + res = create_node("extract", Type::Float); res.set_input("in", *this); res.set_input("index", val(index)); return res; @@ -533,7 +533,7 @@ NodeItem NodeItem::convert(Type to_type) const } } else { - res.node = graph_->addNode("convert", MaterialX::EMPTY_STRING, type(to_type)); + res = create_node("convert", to_type); res.set_input("in", *this); } return res; @@ -590,7 +590,7 @@ NodeItem NodeItem::if_else(CompareOp op, res = func(value->asA(), other.value->asA()) ? item1 : item2; } else { - res.node = graph_->addNode(category, MaterialX::EMPTY_STRING, type(to_type)); + res = create_node(category, to_type); res.set_input("value1", *this); res.set_input("value2", other); res.set_input("in1", item1); @@ -616,12 +616,13 @@ NodeItem::Type NodeItem::type() const return Type::Empty; } -NodeItem NodeItem::create_node(const std::string &category, NodeItem::Type type) +NodeItem NodeItem::create_node(const std::string &category, NodeItem::Type type) const { std::string type_str = this->type(type); CLOG_INFO(LOG_MATERIALX_SHADER, 2, "<%s type=%s>", category.c_str(), type_str.c_str()); - node = graph_->addNode(category, MaterialX::EMPTY_STRING, type_str); - return *this; + NodeItem res = empty(); + res.node = graph_->addNode(category, MaterialX::EMPTY_STRING, type_str); + return res; } void NodeItem::set_input(const std::string &in_name, const NodeItem &item) @@ -763,7 +764,7 @@ NodeItem NodeItem::arithmetic(const std::string &category, std::functionaddNode(category, MaterialX::EMPTY_STRING, this->type(type)); + res = create_node(category, type); res.set_input("in", *this); } return res; @@ -829,7 +830,7 @@ NodeItem NodeItem::arithmetic(const NodeItem &other, } } else { - res.node = graph_->addNode(category, MaterialX::EMPTY_STRING, type(to_type)); + res = create_node(category, to_type); res.set_input("in1", item1); res.set_input("in2", item2); } diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.h b/source/blender/nodes/shader/materialx/nodes/node_item.h index 69587a37910..288dd70f3d5 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.h +++ b/source/blender/nodes/shader/materialx/nodes/node_item.h @@ -97,7 +97,7 @@ class NodeItem { NodeItem empty() const; template NodeItem val(const T &data) const; Type type() const; - NodeItem create_node(const std::string &category, NodeItem::Type type); + NodeItem create_node(const std::string &category, NodeItem::Type type) const; /* Functions to set input and output */ template void set_input(const std::string &in_name, const T &value, Type in_type); -- 2.30.2