From 97e53d2385cd0b72add07bff4df1f8bc660f51fb Mon Sep 17 00:00:00 2001 From: Gaia Clary Date: Mon, 3 Jun 2019 16:34:47 +0200 Subject: fix collada: get Alpha and Emission from principled BSDF Shader --- source/blender/collada/collada_utils.cpp | 46 ++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'source/blender/collada/collada_utils.cpp') 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 */ -- cgit v1.2.3