From b248ec97769fa654a3ee8bb2a643046b79e7c030 Mon Sep 17 00:00:00 2001 From: Alex Strand Date: Wed, 9 Sep 2020 11:36:57 +0200 Subject: Shaders: add emission strength input to Principled BSDF node This impacts I/O add-ons. OBJ, FBX and Collada have been updated, glTF not yet. Differential Revision: https://developer.blender.org/D4971 --- source/blender/io/collada/Materials.cpp | 5 +++++ source/blender/io/collada/collada_utils.cpp | 26 +++++++++++++++++++++----- source/blender/io/collada/collada_utils.h | 2 +- 3 files changed, 27 insertions(+), 6 deletions(-) (limited to 'source/blender/io') diff --git a/source/blender/io/collada/Materials.cpp b/source/blender/io/collada/Materials.cpp index 06f54884668..16a9691d67e 100644 --- a/source/blender/io/collada/Materials.cpp +++ b/source/blender/io/collada/Materials.cpp @@ -323,6 +323,11 @@ void MaterialNode::set_emission(COLLADAFW::ColorOrTexture &cot) add_link(texture_node, 0, shader_node, 0); } } + + bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "Emission Strength"); + if (socket) { + *(float *)socket->default_value = 1.0f; + } } void MaterialNode::set_opacity(COLLADAFW::ColorOrTexture &cot) diff --git a/source/blender/io/collada/collada_utils.cpp b/source/blender/io/collada/collada_utils.cpp index 2493b3a386b..2719578753b 100644 --- a/source/blender/io/collada/collada_utils.cpp +++ b/source/blender/io/collada/collada_utils.cpp @@ -1326,13 +1326,29 @@ COLLADASW::ColorOrTexture bc_get_base_color(Material *ma) COLLADASW::ColorOrTexture bc_get_emission(Material *ma) { - Color default_color = {0, 0, 0, 1}; + Color default_color = {0, 0, 0, 1}; /* default black */ bNode *shader = bc_get_master_shader(ma); - if (ma->use_nodes && shader) { - return bc_get_cot_from_shader(shader, "Emission", default_color); + if (!(ma->use_nodes && shader)) { + return bc_get_cot(default_color); + } + + double emission_strength = 0.0; + bc_get_float_from_shader(shader, emission_strength, "Emission Strength"); + if (emission_strength == 0.0) { + return bc_get_cot(default_color); } - return bc_get_cot(default_color); /* default black */ + COLLADASW::ColorOrTexture cot = bc_get_cot_from_shader(shader, "Emission", default_color); + + /* Multiply in emission strength. If using texture, emission strength is not + * supported. */ + COLLADASW::Color col = cot.getColor(); + cot.getColor().set(emission_strength * col.getRed(), + emission_strength * col.getGreen(), + emission_strength * col.getBlue(), + col.getAlpha()); + + return cot; } COLLADASW::ColorOrTexture bc_get_ambient(Material *ma) @@ -1393,7 +1409,7 @@ double bc_get_reflectivity(Material *ma) return reflectivity; } -double bc_get_float_from_shader(bNode *shader, double &val, std::string nodeid) +bool bc_get_float_from_shader(bNode *shader, double &val, std::string nodeid) { bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, nodeid.c_str()); if (socket) { diff --git a/source/blender/io/collada/collada_utils.h b/source/blender/io/collada/collada_utils.h index 24ee1054e11..fa65d398954 100644 --- a/source/blender/io/collada/collada_utils.h +++ b/source/blender/io/collada/collada_utils.h @@ -384,7 +384,7 @@ double bc_get_alpha(Material *ma); double bc_get_ior(Material *ma); double bc_get_shininess(Material *ma); -double bc_get_float_from_shader(bNode *shader, double &val, std::string nodeid); +bool bc_get_float_from_shader(bNode *shader, double &val, std::string nodeid); COLLADASW::ColorOrTexture bc_get_cot_from_shader(bNode *shader, std::string nodeid, Color &default_color, -- cgit v1.2.3