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
parent1f650c402d3b43eee7cb51c7d4f373ba82ac2116 (diff)
fix collada: get Alpha and Emission from principled BSDF Shader
Diffstat (limited to 'source/blender/collada')
-rw-r--r--source/blender/collada/EffectExporter.cpp13
-rw-r--r--source/blender/collada/collada_utils.cpp46
-rw-r--r--source/blender/collada/collada_utils.h10
3 files changed, 58 insertions, 11 deletions
diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp
index 676d939e8f5..a45cdccecf3 100644
--- a/source/blender/collada/EffectExporter.cpp
+++ b/source/blender/collada/EffectExporter.cpp
@@ -101,14 +101,8 @@ void EffectsExporter::set_shader_type(COLLADASW::EffectProfile &ep, Material *ma
void EffectsExporter::set_transparency(COLLADASW::EffectProfile &ep, Material *ma)
{
- COLLADASW::ColorOrTexture cot = bc_get_base_color(ma);
- float transparency = cot.getColor().getAlpha();
- if (transparency < 1) {
- // Tod: because we are in A_ONE mode transparency is calculated like this:
- COLLADASW::ColorOrTexture cot = getcol(1.0f, 1.0f, 1.0f, transparency);
- ep.setTransparent(cot);
- ep.setOpaque(COLLADASW::EffectProfile::A_ONE);
- }
+ double alpha = bc_get_alpha(ma);
+ ep.setTransparency(alpha, false, "alpha");
}
void EffectsExporter::set_diffuse_color(COLLADASW::EffectProfile &ep, Material *ma)
{
@@ -125,7 +119,8 @@ void EffectsExporter::set_reflectivity(COLLADASW::EffectProfile &ep, Material *m
void EffectsExporter::set_emission(COLLADASW::EffectProfile &ep, Material *ma)
{
- // not yet supported (needs changes in principled shader
+ COLLADASW::ColorOrTexture cot = bc_get_emission(ma);
+ ep.setEmission(cot, false, "emission");
}
void EffectsExporter::get_images(Material *ma, KeyImageMap &material_image_map)
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 */
diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h
index e142d4c77db..7836b1ede86 100644
--- a/source/blender/collada/collada_utils.h
+++ b/source/blender/collada/collada_utils.h
@@ -385,9 +385,15 @@ class BoneExtensionManager {
void bc_add_default_shader(bContext *C, Material *ma);
bNode *bc_get_master_shader(Material *ma);
COLLADASW::ColorOrTexture bc_get_cot(float r, float g, float b, float a);
+
+COLLADASW::ColorOrTexture bc_get_base_color(Material *ma);
COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader);
-bool bc_get_reflectivity(bNode *shader, double &reflectivity);
+COLLADASW::ColorOrTexture bc_get_emission(Material *ma);
+COLLADASW::ColorOrTexture bc_get_emission(bNode *shader);
+
double bc_get_reflectivity(Material *ma);
-COLLADASW::ColorOrTexture bc_get_base_color(Material *ma);
+bool bc_get_reflectivity(bNode *shader, double &emission);
+double bc_get_alpha(Material *ma);
+bool bc_get_alpha(bNode *shader, double &alpha);
#endif