fix T61122 : Added support for Materials with Nodes disabled.
authorGaia Clary <gaia.clary@machinimatrix.org>
Sat, 23 Feb 2019 17:15:21 +0000 (18:15 +0100)
committerGaia Clary <gaia.clary@machinimatrix.org>
Sat, 23 Feb 2019 17:17:46 +0000 (18:17 +0100)
- The Collada exporter did not take care of
  material transparency when nodes are turned off.

- recent change to use ma->alpha_threshold seems to have
  been wrong. transparency is now taken from ma->a when
  nodes are turned off.

source/blender/collada/EffectExporter.cpp
source/blender/collada/collada_utils.cpp

index b6f8ba9..b2bf096 100644 (file)
@@ -98,14 +98,14 @@ void EffectsExporter::set_shader_type(COLLADASW::EffectProfile &ep, Material *ma
 
 void EffectsExporter::set_transparency(COLLADASW::EffectProfile &ep, Material *ma)
 {
-       if (ma->alpha_threshold == 1.0f) {
-               return; // have no transparency
+       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);
        }
-
-       // Tod: because we are in A_ONE mode transparency is calculated like this:
-       COLLADASW::ColorOrTexture cot = getcol(1.0f, 1.0f, 1.0f, ma->alpha_threshold);
-       ep.setTransparent(cot);
-       ep.setOpaque(COLLADASW::EffectProfile::A_ONE);
 }
 void EffectsExporter::set_diffuse_color(COLLADASW::EffectProfile &ep, Material *ma)
 {
index d47ab11..66c8f94 100644 (file)
@@ -1354,18 +1354,18 @@ bc_node_add_link(ntree, nmap["main"], 0, nmap["out"], 0);
 COLLADASW::ColorOrTexture bc_get_base_color(Material *ma)
 {
        bNode *master_shader = bc_get_master_shader(ma);
-       if (master_shader) {
+       if (ma->use_nodes && master_shader) {
                return bc_get_base_color(master_shader);
        }
        else {
-               return bc_get_cot(ma->r, ma->g, ma->b, ma->alpha_threshold);
+               return bc_get_cot(ma->r, ma->g, ma->b, ma->a);
        }
 }
 
 COLLADASW::ColorOrTexture bc_get_specular_color(Material *ma, bool use_fallback)
 {
        bNode *master_shader = bc_get_master_shader(ma);
-       if (master_shader) {
+       if (ma->use_nodes && master_shader) {
                return bc_get_specular_color(master_shader);
        }
        else if (use_fallback) {