From d9154dcab710ede627660ff8c9765a79e2ffd908 Mon Sep 17 00:00:00 2001 From: Bogdan Nagirniak Date: Thu, 7 Sep 2023 13:41:02 +0300 Subject: [PATCH 1/6] Added NodeParser::texcoord_node() --- .../nodes/shader/materialx/nodes/node_parser.cc | 13 +++++++++++++ .../nodes/shader/materialx/nodes/node_parser.h | 1 + .../nodes/shader/materialx/nodes/tex_checker.cc | 2 +- .../nodes/shader/materialx/nodes/tex_environment.cc | 9 ++++++--- .../nodes/shader/materialx/nodes/tex_image.cc | 11 +++++++---- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.cc b/source/blender/nodes/shader/materialx/nodes/node_parser.cc index b1987955cd1b..e7a57a4bbb8a 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.cc @@ -9,6 +9,8 @@ namespace blender::nodes::materialx { +static const std::string TEXCOORD_NODE_NAME = "node_texcoord"; + NodeParser::NodeParser(MaterialX::GraphElement *graph, const Depsgraph *depsgraph, const Material *material, @@ -81,6 +83,17 @@ NodeItem NodeParser::empty() const return NodeItem(graph_); } +NodeItem NodeParser::texcoord_node() +{ + NodeItem res = empty(); + res.node = graph_->getNode(TEXCOORD_NODE_NAME); + if (!res.node) { + res = create_node("texcoord", "vector2"); + res.node->setName(TEXCOORD_NODE_NAME); + } + return res; +} + NodeItem NodeParser::get_input_default(const bNodeSocket &socket, NodeItem::Type to_type) { NodeItem res = empty(); diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.h b/source/blender/nodes/shader/materialx/nodes/node_parser.h index eb4502d6cd06..05911cfc3264 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.h +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.h @@ -42,6 +42,7 @@ class NodeParser { NodeItem get_input_value(int index, NodeItem::Type to_type); NodeItem empty() const; template NodeItem value(const T &data) const; + NodeItem texcoord_node(); private: NodeItem get_input_default(const bNodeSocket &socket, NodeItem::Type to_type); diff --git a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc index f039a6336e43..e275e8ce467f 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc @@ -14,7 +14,7 @@ NodeItem TexCheckerNodeParser::compute() NodeItem scale = get_input_value("Scale", NodeItem::Type::Float); if (!vector) { - vector = create_node("texcoord", "vector2"); + vector = texcoord_node(); } vector = (vector * scale) % value(2.0f); NodeItem mix = (vector.extract(0).floor() + vector.extract(1).floor()) diff --git a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc index f2aede4cb4b6..feda1eb0dcb1 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc @@ -4,7 +4,9 @@ #include "node_parser.h" +#ifdef WITH_HYDRA #include "hydra/image.h" +#endif #include "DEG_depsgraph_query.h" @@ -17,14 +19,15 @@ NodeItem TexEnvironmentNodeParser::compute() Scene *scene = DEG_get_input_scene(depsgraph_); Main *bmain = DEG_get_bmain(depsgraph_); std::string image_path; + +#ifdef WITH_HYDRA /* TODO: What if Blender built without Hydra? Also io::hydra::cache_or_get_image_file contains * pretty general code, so could be moved from bf_usd project. */ -#ifdef WITH_HYDRA 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 = texcoord_node(); + NodeItem res = create_node("image", "color4"); 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 2a2625259ef7..0b779fa97da0 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_image.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_image.cc @@ -4,7 +4,9 @@ #include "node_parser.h" -#include "hydra/image.h" +#ifdef WITH_HYDRA +# include "hydra/image.h" +#endif #include "DEG_depsgraph_query.h" @@ -17,14 +19,15 @@ NodeItem TexImageNodeParser::compute() Scene *scene = DEG_get_input_scene(depsgraph_); Main *bmain = DEG_get_bmain(depsgraph_); std::string image_path; + +#ifdef WITH_HYDRA /* TODO: What if Blender built without Hydra? Also io::hydra::cache_or_get_image_file contains * pretty general code, so could be moved from bf_usd project. */ -#ifdef WITH_HYDRA 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 = texcoord_node(); + NodeItem res = create_node("image", "color4"); res.set_input("file", image_path, "filename"); res.set_input("texcoord", texcoord); return res; -- 2.30.2 From 852421ae4cc4fe5bdca4ae3362a53b59de791e26 Mon Sep 17 00:00:00 2001 From: Bogdan Nagirniak Date: Fri, 8 Sep 2023 08:40:11 +0300 Subject: [PATCH 2/6] fix after merge --- source/blender/nodes/shader/materialx/nodes/node_parser.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.cc b/source/blender/nodes/shader/materialx/nodes/node_parser.cc index 53840837a829..ed135fcd0851 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.cc @@ -86,7 +86,7 @@ NodeItem NodeParser::texcoord_node() NodeItem res = empty(); res.node = graph_->getNode(TEXCOORD_NODE_NAME); if (!res.node) { - res = create_node("texcoord", "vector2"); + res = create_node("texcoord", NodeItem::Type::Vector2); res.node->setName(TEXCOORD_NODE_NAME); } return res; -- 2.30.2 From 49f197ce5c113b622e00d190d0610b4eb043ea9b Mon Sep 17 00:00:00 2001 From: Bogdan Nagirniak Date: Fri, 8 Sep 2023 10:08:10 +0300 Subject: [PATCH 3/6] Simplified TexChecker. Fixes in TexImage, TexEnvironment, Math nodes --- .../nodes/shader/materialx/nodes/math.cc | 10 +++-- .../shader/materialx/nodes/tex_checker.cc | 21 +++++----- .../shader/materialx/nodes/tex_environment.cc | 26 ++++++++---- .../nodes/shader/materialx/nodes/tex_image.cc | 41 +++++++++++-------- 4 files changed, 58 insertions(+), 40 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/math.cc b/source/blender/nodes/shader/materialx/nodes/math.cc index d7dd43cb0041..9af8f665769c 100644 --- a/source/blender/nodes/shader/materialx/nodes/math.cc +++ b/source/blender/nodes/shader/materialx/nodes/math.cc @@ -10,11 +10,13 @@ namespace blender::nodes::materialx { NodeItem MathNodeParser::compute() { /* TODO: finish some math operations */ - auto op = node_->custom1; + NodeMathOperation op = NodeMathOperation(node_->custom1); NodeItem res = empty(); /* Single operand operations */ - NodeItem x = get_input_value(0, NodeItem::Type::Any); + NodeItem x = get_input_value(0, NodeItem::Type::Float); + /* TODO: Seems we have to use average if Vector or Color are added */ + switch (op) { case NODE_MATH_SINE: res = x.sin(); @@ -82,7 +84,7 @@ NodeItem MathNodeParser::compute() default: { /* 2-operand operations */ - NodeItem y = get_input_value(1, NodeItem::Type::Any); + NodeItem y = get_input_value(1, NodeItem::Type::Float); switch (op) { case NODE_MATH_ADD: res = x + y; @@ -132,7 +134,7 @@ NodeItem MathNodeParser::compute() default: { /* 3-operand operations */ - NodeItem z = get_input_value(2, NodeItem::Type::Any); + NodeItem z = get_input_value(2, NodeItem::Type::Float); switch (op) { case NODE_MATH_WRAP: CLOG_WARN(LOG_MATERIALX_SHADER, "Unimplemented math operation %d", op); diff --git a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc index 6d6b91fff0c0..5cfde6d2d2fe 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc @@ -9,21 +9,20 @@ namespace blender::nodes::materialx { NodeItem TexCheckerNodeParser::compute() { NodeItem vector = get_input_link("Vector", NodeItem::Type::Vector2); - NodeItem color1 = get_input_value("Color1", NodeItem::Type::Color3); - NodeItem color2 = get_input_value("Color2", NodeItem::Type::Color3); - NodeItem scale = get_input_value("Scale", NodeItem::Type::Float); - if (!vector) { vector = texcoord_node(); } + NodeItem value1 = val(1.0f); + NodeItem value2 = val(0.0f); + if (STREQ(socket_out_->name, "Color")) { + value1 = get_input_value("Color1", NodeItem::Type::Color3); + value2 = get_input_value("Color2", NodeItem::Type::Color3); + } + NodeItem scale = get_input_value("Scale", NodeItem::Type::Float); + vector = (vector * scale) % val(2.0f); - NodeItem mix = (vector.extract(0).floor() + vector.extract(1).floor()) - .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); - res.set_input("mix", mix); - return res; + return (vector.extract(0).floor() + vector.extract(1).floor()) + .if_else(NodeItem::CompareOp::Eq, val(1.0f), value1, value2); } } // namespace blender::nodes::materialx diff --git a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc index 0da79f755eb2..4be3d307d9d3 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc @@ -4,9 +4,7 @@ #include "node_parser.h" -#ifdef WITH_HYDRA #include "hydra/image.h" -#endif #include "DEG_depsgraph_query.h" @@ -14,22 +12,32 @@ namespace blender::nodes::materialx { NodeItem TexEnvironmentNodeParser::compute() { + NodeItem res = val(MaterialX::Color4(1.0f, 0.0f, 1.0f, 1.0f)); + Image *image = (Image *)node_->id; + if (!image) { + return res; + } + NodeTexEnvironment *tex = static_cast(node_->storage); Scene *scene = DEG_get_input_scene(depsgraph_); Main *bmain = DEG_get_bmain(depsgraph_); - std::string image_path; -#ifdef WITH_HYDRA /* TODO: What if Blender built without Hydra? Also io::hydra::cache_or_get_image_file contains * pretty general code, so could be moved from bf_usd project. */ - image_path = io::hydra::cache_or_get_image_file(bmain, scene, image, &tex->iuser); -#endif + std::string image_path = io::hydra::cache_or_get_image_file(bmain, scene, image, &tex->iuser); - NodeItem texcoord = texcoord_node(); - NodeItem res = create_node("image", NodeItem::Type::Color3); + NodeItem vector = get_input_link("Vector", NodeItem::Type::Vector2); + if (!vector) { + vector = texcoord_node(); + } + /* TODO: fix texcoord of environment texture, some math should be applied */ + + res = create_node("image", NodeItem::Type::Color3); res.set_input("file", image_path, NodeItem::Type::Filename); - res.set_input("texcoord", texcoord); + res.set_input("texcoord", vector); + /* TODO: get other Tex environment node parameters */ + 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 65a3f7cf549c..9fe28f010045 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_image.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_image.cc @@ -4,9 +4,7 @@ #include "node_parser.h" -#ifdef WITH_HYDRA -# include "hydra/image.h" -#endif +#include "hydra/image.h" #include "DEG_depsgraph_query.h" @@ -14,22 +12,33 @@ namespace blender::nodes::materialx { NodeItem TexImageNodeParser::compute() { + NodeItem res = val(MaterialX::Color4(1.0f, 0.0f, 1.0f, 1.0f)); + Image *image = (Image *)node_->id; - NodeTexImage *tex = static_cast(node_->storage); - Scene *scene = DEG_get_input_scene(depsgraph_); - Main *bmain = DEG_get_bmain(depsgraph_); - std::string image_path; + if (image) { + NodeTexImage *tex_image = static_cast(node_->storage); + Scene *scene = DEG_get_input_scene(depsgraph_); + Main *bmain = DEG_get_bmain(depsgraph_); -#ifdef WITH_HYDRA - /* TODO: What if Blender built without Hydra? Also io::hydra::cache_or_get_image_file contains - * pretty general code, so could be moved from bf_usd project. */ - image_path = io::hydra::cache_or_get_image_file(bmain, scene, image, &tex->iuser); -#endif + /* TODO: What if Blender built without Hydra? Also io::hydra::cache_or_get_image_file contains + * pretty general code, so could be moved from bf_usd project. */ + std::string image_path = io::hydra::cache_or_get_image_file( + bmain, scene, image, &tex_image->iuser); - NodeItem texcoord = texcoord_node(); - NodeItem res = create_node("image", NodeItem::Type::Color3); - res.set_input("file", image_path, NodeItem::Type::Filename); - res.set_input("texcoord", texcoord); + NodeItem texcoord = get_input_link("Vector", NodeItem::Type::Vector2); + if (!texcoord) { + texcoord = texcoord_node(); + } + + res = create_node("image", NodeItem::Type::Color4); + res.set_input("file", image_path, NodeItem::Type::Filename); + res.set_input("texcoord", texcoord); + /* TODO: get other Tex image node parameters */ + } + + if (STREQ(socket_out_->name, "Alpha")) { + res = res.extract(3); + } return res; } -- 2.30.2 From f17671fb87ddcc21d4f4b67000b84301e6825ed4 Mon Sep 17 00:00:00 2001 From: Bogdan Nagirniak Date: Fri, 8 Sep 2023 16:58:10 +0300 Subject: [PATCH 4/6] Fixes in tex_environment.cc and tex_image.cc --- .../nodes/shader/materialx/nodes/node_item.cc | 18 +++---- .../shader/materialx/nodes/node_parser.h | 2 + .../shader/materialx/nodes/tex_environment.cc | 27 ++++++++-- .../nodes/shader/materialx/nodes/tex_image.cc | 50 ++++++++++++++++--- 4 files changed, 77 insertions(+), 20 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/node_item.cc b/source/blender/nodes/shader/materialx/nodes/node_item.cc index 158a71784736..e8ab9b260bf9 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_item.cc +++ b/source/blender/nodes/shader/materialx/nodes/node_item.cc @@ -346,15 +346,6 @@ NodeItem NodeItem::exp() const return arithmetic("exp", [](float a) { return std::expf(a); }); } -NodeItem NodeItem::extract(const int index) const -{ - NodeItem res = empty(); - res = create_node("extract", Type::Float); - res.set_input("in", *this); - res.set_input("index", val(index)); - return res; -} - NodeItem NodeItem::convert(Type to_type) const { Type from_type = type(); @@ -600,6 +591,15 @@ NodeItem NodeItem::if_else(CompareOp op, return res; } +NodeItem NodeItem::extract(const int index) const +{ + NodeItem res = empty(); + res = create_node("extract", Type::Float); + res.set_input("in", *this); + res.set_input("index", val(index)); + return res; +} + NodeItem NodeItem::empty() const { return NodeItem(graph_); diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.h b/source/blender/nodes/shader/materialx/nodes/node_parser.h index 5a70234967d2..44d408443bfd 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.h +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.h @@ -121,4 +121,6 @@ DECLARE_SHADER_NODE_PARSER(EmissionNodeParser) DECLARE_SHADER_NODE_PARSER(MixShaderNodeParser) DECLARE_SHADER_NODE_PARSER(SubsurfaceScatteringNodeParser) +extern const MaterialX::Color4 TEX_ERROR_COLOR; + } // namespace blender::nodes::materialx diff --git a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc index 4be3d307d9d3..5f07c13d04bc 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc @@ -12,31 +12,48 @@ namespace blender::nodes::materialx { NodeItem TexEnvironmentNodeParser::compute() { - NodeItem res = val(MaterialX::Color4(1.0f, 0.0f, 1.0f, 1.0f)); + NodeItem res = val(TEX_ERROR_COLOR); Image *image = (Image *)node_->id; if (!image) { return res; } - NodeTexEnvironment *tex = static_cast(node_->storage); + NodeTexEnvironment *tex_env = static_cast(node_->storage); Scene *scene = DEG_get_input_scene(depsgraph_); Main *bmain = DEG_get_bmain(depsgraph_); /* TODO: What if Blender built without Hydra? Also io::hydra::cache_or_get_image_file contains * pretty general code, so could be moved from bf_usd project. */ - std::string image_path = io::hydra::cache_or_get_image_file(bmain, scene, image, &tex->iuser); + std::string image_path = io::hydra::cache_or_get_image_file( + bmain, scene, image, &tex_env->iuser); NodeItem vector = get_input_link("Vector", NodeItem::Type::Vector2); if (!vector) { vector = texcoord_node(); } - /* TODO: fix texcoord of environment texture, some math should be applied */ + /* TODO: texcoords should be translated to spherical coordinates */ + + std::string filtertype; + switch (tex_env->interpolation) { + case SHD_INTERP_LINEAR: + filtertype = "linear"; + break; + case SHD_INTERP_CLOSEST: + filtertype = "closest"; + break; + case SHD_INTERP_CUBIC: + case SHD_INTERP_SMART: + filtertype = "cubic"; + break; + default: + BLI_assert_unreachable(); + } res = create_node("image", NodeItem::Type::Color3); res.set_input("file", image_path, NodeItem::Type::Filename); res.set_input("texcoord", vector); - /* TODO: get other Tex environment node parameters */ + res.set_input("filtertype", val(filtertype)); 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 9fe28f010045..a4952825af28 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_image.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_image.cc @@ -10,9 +10,11 @@ namespace blender::nodes::materialx { +const MaterialX::Color4 TEX_ERROR_COLOR(1.0f, 0.0f, 1.0f, 1.0f); + NodeItem TexImageNodeParser::compute() { - NodeItem res = val(MaterialX::Color4(1.0f, 0.0f, 1.0f, 1.0f)); + NodeItem res = val(TEX_ERROR_COLOR); Image *image = (Image *)node_->id; if (image) { @@ -25,15 +27,51 @@ NodeItem TexImageNodeParser::compute() std::string image_path = io::hydra::cache_or_get_image_file( bmain, scene, image, &tex_image->iuser); - NodeItem texcoord = get_input_link("Vector", NodeItem::Type::Vector2); - if (!texcoord) { - texcoord = texcoord_node(); + NodeItem vector = get_input_link("Vector", NodeItem::Type::Vector2); + if (!vector) { + vector = texcoord_node(); + } + /* TODO: add math to vector depending of tex_image->projection */ + + std::string filtertype; + switch (tex_image->interpolation) { + case SHD_INTERP_LINEAR: + filtertype = "linear"; + break; + case SHD_INTERP_CLOSEST: + filtertype = "closest"; + break; + case SHD_INTERP_CUBIC: + case SHD_INTERP_SMART: + filtertype = "cubic"; + break; + default: + BLI_assert_unreachable(); + } + std::string addressmode; + switch (tex_image->extension) { + case SHD_IMAGE_EXTENSION_REPEAT: + addressmode = "periodic"; + break; + case SHD_IMAGE_EXTENSION_EXTEND: + addressmode = "clamp"; + break; + case SHD_IMAGE_EXTENSION_CLIP: + addressmode = "constant"; + break; + case SHD_IMAGE_EXTENSION_MIRROR: + addressmode = "mirror"; + break; + default: + BLI_assert_unreachable(); } res = create_node("image", NodeItem::Type::Color4); res.set_input("file", image_path, NodeItem::Type::Filename); - res.set_input("texcoord", texcoord); - /* TODO: get other Tex image node parameters */ + res.set_input("texcoord", vector); + res.set_input("filtertype", val(filtertype)); + res.set_input("uaddressmode", val(addressmode)); + res.set_input("vaddressmode", val(addressmode)); } if (STREQ(socket_out_->name, "Alpha")) { -- 2.30.2 From 0ab36da693fbf8635108b19d12830591400f7831 Mon Sep 17 00:00:00 2001 From: Bogdan Nagirniak Date: Fri, 8 Sep 2023 17:54:07 +0300 Subject: [PATCH 5/6] Simplification --- source/blender/nodes/shader/materialx/nodes/node_parser.h | 2 -- .../blender/nodes/shader/materialx/nodes/tex_environment.cc | 2 +- source/blender/nodes/shader/materialx/nodes/tex_image.cc | 4 +--- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/node_parser.h b/source/blender/nodes/shader/materialx/nodes/node_parser.h index 44d408443bfd..5a70234967d2 100644 --- a/source/blender/nodes/shader/materialx/nodes/node_parser.h +++ b/source/blender/nodes/shader/materialx/nodes/node_parser.h @@ -121,6 +121,4 @@ DECLARE_SHADER_NODE_PARSER(EmissionNodeParser) DECLARE_SHADER_NODE_PARSER(MixShaderNodeParser) DECLARE_SHADER_NODE_PARSER(SubsurfaceScatteringNodeParser) -extern const MaterialX::Color4 TEX_ERROR_COLOR; - } // namespace blender::nodes::materialx diff --git a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc index 5f07c13d04bc..d0d431cc1ef2 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc @@ -12,7 +12,7 @@ namespace blender::nodes::materialx { NodeItem TexEnvironmentNodeParser::compute() { - NodeItem res = val(TEX_ERROR_COLOR); + NodeItem res = val(MaterialX::Color4(1.0f, 0.0f, 1.0f, 1.0f)); Image *image = (Image *)node_->id; if (!image) { diff --git a/source/blender/nodes/shader/materialx/nodes/tex_image.cc b/source/blender/nodes/shader/materialx/nodes/tex_image.cc index a4952825af28..75c30a0a045f 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_image.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_image.cc @@ -10,11 +10,9 @@ namespace blender::nodes::materialx { -const MaterialX::Color4 TEX_ERROR_COLOR(1.0f, 0.0f, 1.0f, 1.0f); - NodeItem TexImageNodeParser::compute() { - NodeItem res = val(TEX_ERROR_COLOR); + NodeItem res = val(MaterialX::Color4(1.0f, 0.0f, 1.0f, 1.0f)); Image *image = (Image *)node_->id; if (image) { -- 2.30.2 From dd0fc02330e0af20280dd213094dddfb0dbc45e7 Mon Sep 17 00:00:00 2001 From: Bogdan Nagirniak Date: Fri, 8 Sep 2023 18:25:23 +0300 Subject: [PATCH 6/6] Changed to Color4 for images --- source/blender/nodes/shader/materialx/nodes/tex_checker.cc | 4 ++-- .../blender/nodes/shader/materialx/nodes/tex_environment.cc | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc index 5cfde6d2d2fe..1d58e0e14a82 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_checker.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_checker.cc @@ -15,8 +15,8 @@ NodeItem TexCheckerNodeParser::compute() NodeItem value1 = val(1.0f); NodeItem value2 = val(0.0f); if (STREQ(socket_out_->name, "Color")) { - value1 = get_input_value("Color1", NodeItem::Type::Color3); - value2 = get_input_value("Color2", NodeItem::Type::Color3); + value1 = get_input_value("Color1", NodeItem::Type::Color4); + value2 = get_input_value("Color2", NodeItem::Type::Color4); } NodeItem scale = get_input_value("Scale", NodeItem::Type::Float); diff --git a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc index d0d431cc1ef2..65b5c451559b 100644 --- a/source/blender/nodes/shader/materialx/nodes/tex_environment.cc +++ b/source/blender/nodes/shader/materialx/nodes/tex_environment.cc @@ -50,7 +50,7 @@ NodeItem TexEnvironmentNodeParser::compute() BLI_assert_unreachable(); } - res = create_node("image", NodeItem::Type::Color3); + res = create_node("image", NodeItem::Type::Color4); res.set_input("file", image_path, NodeItem::Type::Filename); res.set_input("texcoord", vector); res.set_input("filtertype", val(filtertype)); -- 2.30.2