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:
authorGaia Clary <gaia.clary@machinimatrix.org>2019-06-03 17:34:47 +0300
committerGaia Clary <gaia.clary@machinimatrix.org>2019-06-03 17:35:01 +0300
commit97e53d2385cd0b72add07bff4df1f8bc660f51fb (patch)
tree1bc4d0f35e7402d9ef701b66b145a9dfe79c7bb2 /source/blender/collada/collada_utils.cpp
parent1f650c402d3b43eee7cb51c7d4f373ba82ac2116 (diff)
fix collada: get Alpha and Emission from principled BSDF Shader
Diffstat (limited to 'source/blender/collada/collada_utils.cpp')
-rw-r--r--source/blender/collada/collada_utils.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp
index e42ceda7da8..976a3c0edf3 100644
--- a/source/blender/collada/collada_utils.cpp
+++ b/source/blender/collada/collada_utils.cpp
@@ -1343,6 +1343,31 @@ COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader)
}
}
+COLLADASW::ColorOrTexture bc_get_emission(Material *ma)
+{
+ bNode *master_shader = bc_get_master_shader(ma);
+ if (ma->use_nodes && master_shader) {
+ return bc_get_emission(master_shader);
+ }
+ else {
+ return bc_get_cot(0, 0, 0, 1); /* default black */
+ }
+}
+
+COLLADASW::ColorOrTexture bc_get_emission(bNode *shader)
+{
+ bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Emission");
+ if (socket) {
+ bNodeSocketValueRGBA *dcol = (bNodeSocketValueRGBA *)socket->default_value;
+ float *col = dcol->value;
+ return bc_get_cot(col[0], col[1], col[2], col[3]);
+ }
+ else {
+ return bc_get_cot(0, 0, 0, 1); /* default black */
+ }
+}
+
+
bool bc_get_reflectivity(bNode *shader, double &reflectivity)
{
bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Specular");
@@ -1354,6 +1379,27 @@ bool bc_get_reflectivity(bNode *shader, double &reflectivity)
return false;
}
+double bc_get_alpha(Material *ma)
+{
+ double alpha = ma->a; /* fallback if no socket found */
+ bNode *master_shader = bc_get_master_shader(ma);
+ if (ma->use_nodes && master_shader) {
+ bc_get_alpha(master_shader, alpha);
+ }
+ return alpha;
+}
+
+bool bc_get_alpha(bNode *shader, double &alpha)
+{
+ bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Alpha");
+ if (socket) {
+ bNodeSocketValueFloat *ref = (bNodeSocketValueFloat *)socket->default_value;
+ alpha = (double)ref->value;
+ return true;
+ }
+ return false;
+}
+
double bc_get_reflectivity(Material *ma)
{
double reflectivity = ma->spec; /* fallback if no socket found */