Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Strand <astrand130>2020-09-09 12:36:57 +0300
committerBrecht Van Lommel <brecht@blender.org>2020-09-17 19:54:04 +0300
commitb248ec97769fa654a3ee8bb2a643046b79e7c030 (patch)
tree57604691dd62e4b19b9df5d4109a8dc3f83bacb8 /source/blender/io
parent65fd005312848178509b0a0b0f3febf9f777f529 (diff)
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
Diffstat (limited to 'source/blender/io')
-rw-r--r--source/blender/io/collada/Materials.cpp5
-rw-r--r--source/blender/io/collada/collada_utils.cpp26
-rw-r--r--source/blender/io/collada/collada_utils.h2
3 files changed, 27 insertions, 6 deletions
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,