From 541c4de72402e8037ddd398aa2c2f4f9ee9bf0f5 Mon Sep 17 00:00:00 2001 From: Vasyl-Pidhirskyi Date: Mon, 25 Sep 2023 19:07:33 +0300 Subject: [PATCH 1/4] Code improvements. Implemented Tangent node. --- .../nodes/shader/materialx/node_item.cc | 14 ++++----- .../shader/nodes/node_shader_bsdf_glass.cc | 30 +++++-------------- .../nodes/shader/nodes/node_shader_tangent.cc | 4 +-- 3 files changed, 16 insertions(+), 32 deletions(-) diff --git a/source/blender/nodes/shader/materialx/node_item.cc b/source/blender/nodes/shader/materialx/node_item.cc index d65332fdb02d..99582efa5edf 100644 --- a/source/blender/nodes/shader/materialx/node_item.cc +++ b/source/blender/nodes/shader/materialx/node_item.cc @@ -327,7 +327,6 @@ NodeItem NodeItem::dotproduct(const NodeItem &other) const NodeItem item1 = to_vector(); NodeItem item2 = other.to_vector(); - cast_types(item1, item2); return create_node("dotproduct", Type::Float, {{"in1", item1}, {"in2", item2}}); } @@ -388,14 +387,15 @@ NodeItem NodeItem::rotate(const NodeItem &angle_xyz, bool invert) NodeItem x = angle_xyz[0]; NodeItem y = angle_xyz[1]; NodeItem z = angle_xyz[2]; + + NodeItem x_axis = val(MaterialX::Vector3(1.0f, 0.0f, 0.0f)); + NodeItem y_axis = val(MaterialX::Vector3(0.0f, 1.0f, 0.0f)); + NodeItem z_axis = val(MaterialX::Vector3(0.0f, 0.0f, 1.0f)); + if (invert) { - return rotate(z, val(MaterialX::Vector3(0.0f, 0.0f, 1.0f))) - .rotate(y, val(MaterialX::Vector3(0.0f, 1.0f, 0.0f))) - .rotate(x, val(MaterialX::Vector3(1.0f, 0.0f, 0.0f))); + return rotate(z, z_axis).rotate(y, y_axis).rotate(x, x_axis); } - return rotate(x, val(MaterialX::Vector3(1.0f, 0.0f, 0.0f))) - .rotate(y, val(MaterialX::Vector3(0.0f, 1.0f, 0.0f))) - .rotate(z, val(MaterialX::Vector3(0.0f, 0.0f, 1.0f))); + return rotate(x, x_axis).rotate(y, y_axis).rotate(z, z_axis); } NodeItem NodeItem::sin() const diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.cc index 37b850ab2531..ef2b8308c83d 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.cc @@ -54,29 +54,13 @@ NODE_SHADER_MATERIALX_BEGIN NodeItem ior = get_input_value("IOR", NodeItem::Type::Float); NodeItem normal = get_input_link("Normal", NodeItem::Type::Vector3); - NodeItem dielectric = create_node("dielectric_bsdf", - NodeItem::Type::BSDF, - {{"normal", normal}, - {"tint", color}, - {"roughness", roughness}, - {"ior", ior}, - {"scatter_mode", val(std::string("RT"))}}); - - NodeItem artistic_ior = create_node("artistic_ior", - NodeItem::Type::Multioutput, - {{"reflectivity", color}, {"edge_color", color}}); - NodeItem ior_out = artistic_ior.add_output("ior", NodeItem::Type::Color3); - NodeItem extinction_out = artistic_ior.add_output("extinction", NodeItem::Type::Color3); - - NodeItem conductor = create_node("conductor_bsdf", - NodeItem::Type::BSDF, - {{"normal", normal}, - {"ior", ior_out}, - {"extinction", extinction_out}, - {"roughness", roughness}}); - - return create_node( - "mix", NodeItem::Type::BSDF, {{"fg", dielectric}, {"bg", conductor}, {"mix", val(0.5f)}}); + return create_node("dielectric_bsdf", + NodeItem::Type::BSDF, + {{"normal", normal}, + {"tint", color}, + {"roughness", roughness}, + {"ior", ior}, + {"scatter_mode", val(std::string("RT"))}}); } #endif NODE_SHADER_MATERIALX_END diff --git a/source/blender/nodes/shader/nodes/node_shader_tangent.cc b/source/blender/nodes/shader/nodes/node_shader_tangent.cc index 69403f9293ae..eda4c94cabbf 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tangent.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tangent.cc @@ -89,8 +89,8 @@ static int node_shader_gpu_tangent(GPUMaterial *mat, NODE_SHADER_MATERIALX_BEGIN #ifdef WITH_MATERIALX { - /* TODO: This node doesn't have an implementation in MaterialX.*/ - return get_output_default(socket_out_->name, NodeItem::Type::Vector3); + /* TODO: implement other features */ + return create_node("tangent", NodeItem::Type::Vector3, {{"space", val(std::string("world"))}}); } #endif NODE_SHADER_MATERIALX_END -- 2.30.2 From fbc05db73721da28e5aabc1b32236931d637bbbe Mon Sep 17 00:00:00 2001 From: Vasyl-Pidhirskyi Date: Tue, 26 Sep 2023 09:26:33 +0300 Subject: [PATCH 2/4] Reverted missing cast_types. --- source/blender/nodes/shader/materialx/node_item.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/source/blender/nodes/shader/materialx/node_item.cc b/source/blender/nodes/shader/materialx/node_item.cc index 99582efa5edf..b76d10636a7b 100644 --- a/source/blender/nodes/shader/materialx/node_item.cc +++ b/source/blender/nodes/shader/materialx/node_item.cc @@ -327,6 +327,7 @@ NodeItem NodeItem::dotproduct(const NodeItem &other) const NodeItem item1 = to_vector(); NodeItem item2 = other.to_vector(); + cast_types(item1, item2); return create_node("dotproduct", Type::Float, {{"in1", item1}, {"in2", item2}}); } -- 2.30.2 From 5b07653e883d4880de890bbdd59c815e980a6749 Mon Sep 17 00:00:00 2001 From: Vasyl-Pidhirskyi Date: Tue, 26 Sep 2023 11:36:56 +0300 Subject: [PATCH 3/4] Removed `weight` input, as far as it affects the node's effect. --- .../blender/nodes/shader/nodes/node_shader_bsdf_sheen.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_sheen.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_sheen.cc index 59469c8abb3d..0beee3c1e370 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_sheen.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_sheen.cc @@ -58,10 +58,9 @@ NODE_SHADER_MATERIALX_BEGIN NodeItem roughness = get_input_value("Roughness", NodeItem::Type::Float); NodeItem normal = get_input_link("Normal", NodeItem::Type::Vector3); - return create_node( - "sheen_bsdf", - NodeItem::Type::BSDF, - {{"color", color}, {"weight", roughness}, {"roughness", roughness}, {"normal", normal}}); + return create_node("sheen_bsdf", + NodeItem::Type::BSDF, + {{"color", color}, {"roughness", roughness}, {"normal", normal}}); } #endif NODE_SHADER_MATERIALX_END -- 2.30.2 From 2d72def938aa30ff6fa08ab6e8e5e28f1372b124 Mon Sep 17 00:00:00 2001 From: Vasyl-Pidhirskyi Date: Tue, 26 Sep 2023 11:48:32 +0300 Subject: [PATCH 4/4] Renamed Displacementshader -> DisplacementShader. --- source/blender/nodes/shader/materialx/node_item.cc | 4 ++-- source/blender/nodes/shader/materialx/node_item.h | 2 +- source/blender/nodes/shader/nodes/node_shader_displacement.cc | 2 +- .../nodes/shader/nodes/node_shader_vector_displacement.cc | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/nodes/shader/materialx/node_item.cc b/source/blender/nodes/shader/materialx/node_item.cc index b76d10636a7b..453aa6ed5b3e 100644 --- a/source/blender/nodes/shader/materialx/node_item.cc +++ b/source/blender/nodes/shader/materialx/node_item.cc @@ -54,7 +54,7 @@ NodeItem::Type NodeItem::type(const std::string &type_str) return Type::EDF; } if (type_str == "displacementshader") { - return Type::Displacementshader; + return Type::DisplacementShader; } if (type_str == "surfaceshader") { return Type::SurfaceShader; @@ -97,7 +97,7 @@ std::string NodeItem::type(Type type) return "BSDF"; case Type::EDF: return "EDF"; - case Type::Displacementshader: + case Type::DisplacementShader: return "displacementshader"; case Type::SurfaceShader: return "surfaceshader"; diff --git a/source/blender/nodes/shader/materialx/node_item.h b/source/blender/nodes/shader/materialx/node_item.h index 0b6069c406a0..923969520557 100644 --- a/source/blender/nodes/shader/materialx/node_item.h +++ b/source/blender/nodes/shader/materialx/node_item.h @@ -41,7 +41,7 @@ class NodeItem { /* Shader types. NOTE: There are only supported types */ BSDF, EDF, - Displacementshader, + DisplacementShader, SurfaceShader, Material, }; diff --git a/source/blender/nodes/shader/nodes/node_shader_displacement.cc b/source/blender/nodes/shader/nodes/node_shader_displacement.cc index 2083e7eed777..db6d8b4969b9 100644 --- a/source/blender/nodes/shader/nodes/node_shader_displacement.cc +++ b/source/blender/nodes/shader/nodes/node_shader_displacement.cc @@ -46,7 +46,7 @@ NODE_SHADER_MATERIALX_BEGIN NodeItem scale = get_input_value("Scale", NodeItem::Type::Float); return create_node("displacement", - NodeItem::Type::Displacementshader, + NodeItem::Type::DisplacementShader, {{"displacement", height}, {"scale", scale}}); } #endif diff --git a/source/blender/nodes/shader/nodes/node_shader_vector_displacement.cc b/source/blender/nodes/shader/nodes/node_shader_vector_displacement.cc index 8d0a87ad17da..acf48eddb334 100644 --- a/source/blender/nodes/shader/nodes/node_shader_vector_displacement.cc +++ b/source/blender/nodes/shader/nodes/node_shader_vector_displacement.cc @@ -50,7 +50,7 @@ NODE_SHADER_MATERIALX_BEGIN NodeItem scale = get_input_value("Scale", NodeItem::Type::Float); return create_node("displacement", - NodeItem::Type::Displacementshader, + NodeItem::Type::DisplacementShader, {{"displacement", vector}, {"scale", scale}}); } #endif -- 2.30.2