[Bf-blender-cvs] [97e53d2385c] master: fix collada: get Alpha and Emission from principled BSDF Shader

Gaia Clary noreply at git.blender.org
Mon Jun 3 16:35:30 CEST 2019


Commit: 97e53d2385cd0b72add07bff4df1f8bc660f51fb
Author: Gaia Clary
Date:   Mon Jun 3 16:34:47 2019 +0200
Branches: master
https://developer.blender.org/rB97e53d2385cd0b72add07bff4df1f8bc660f51fb

fix collada: get Alpha and Emission from principled BSDF Shader

===================================================================

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

===================================================================

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



More information about the Bf-blender-cvs mailing list