Commit: e68ac2827dd4f8ad346011a8a408b342e2718707
Author: Gaia Clary
Date:   Thu Mar 7 23:26:10 2019 +0100
Branches: master
https://developer.blender.org/rBe68ac2827dd4f8ad346011a8a408b342e2718707

fix D4476 collada exporter: in Blender 2.80 we no longer have a specular color.

Specularity is not a color but a factor.
I have replaced the original export code with
a correct export of the Specularity factor.

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

M       source/blender/collada/EffectExporter.cpp
M       source/blender/collada/EffectExporter.h
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 b2bf09665ca..3494cdbada4 100644
--- a/source/blender/collada/EffectExporter.cpp
+++ b/source/blender/collada/EffectExporter.cpp
@@ -114,11 +114,10 @@ void 
EffectsExporter::set_diffuse_color(COLLADASW::EffectProfile &ep, Material *
        ep.setDiffuse(cot, false, "diffuse");
 }
 
-void EffectsExporter::set_specular_color(COLLADASW::EffectProfile &ep, 
Material *ma)
+void EffectsExporter::set_reflectivity(COLLADASW::EffectProfile &ep, Material 
*ma)
 {
-       bool use_fallback = ep.getShaderType() != 
COLLADASW::EffectProfile::LAMBERT;
-       COLLADASW::ColorOrTexture cot = bc_get_specular_color(ma, use_fallback);
-       ep.setSpecular(cot, false, "specular");
+       double reflectivity = bc_get_reflectivity(ma);
+       ep.setReflectivity(reflectivity, false, "specular");
 }
 
 void EffectsExporter::set_emission(COLLADASW::EffectProfile &ep, Material *ma)
@@ -182,7 +181,7 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
 
        set_transparency(ep, ma);
        set_diffuse_color(ep, ma);
-       set_specular_color(ep, ma);
+       set_reflectivity(ep, ma);
        set_emission(ep, ma);
 
        get_images(ma, material_image_map);
diff --git a/source/blender/collada/EffectExporter.h 
b/source/blender/collada/EffectExporter.h
index 1928c5cbdb5..3ba642088a1 100644
--- a/source/blender/collada/EffectExporter.h
+++ b/source/blender/collada/EffectExporter.h
@@ -55,7 +55,7 @@ private:
        void set_shader_type(COLLADASW::EffectProfile &ep, Material *ma);
        void set_transparency(COLLADASW::EffectProfile &ep, Material *ma);
        void set_diffuse_color(COLLADASW::EffectProfile &ep, Material *ma);
-       void set_specular_color(COLLADASW::EffectProfile &ep, Material *ma);
+       void set_reflectivity(COLLADASW::EffectProfile &ep, Material *ma);
        void set_emission(COLLADASW::EffectProfile &ep, Material *ma);
        void get_images(Material *ma, KeyImageMap &uid_image_map);
        void create_image_samplers(COLLADASW::EffectProfile &ep, KeyImageMap 
&uid_image_map, std::string &active_uv);
diff --git a/source/blender/collada/collada_utils.cpp 
b/source/blender/collada/collada_utils.cpp
index 37a4608fe29..faf00cf11d8 100644
--- a/source/blender/collada/collada_utils.cpp
+++ b/source/blender/collada/collada_utils.cpp
@@ -1362,20 +1362,6 @@ COLLADASW::ColorOrTexture bc_get_base_color(Material *ma)
        }
 }
 
-COLLADASW::ColorOrTexture bc_get_specular_color(Material *ma, bool 
use_fallback)
-{
-       bNode *master_shader = bc_get_master_shader(ma);
-       if (ma->use_nodes && master_shader) {
-               return bc_get_specular_color(master_shader);
-       }
-       else if (use_fallback) {
-               return bc_get_cot(ma->specr * ma->spec, ma->specg * ma->spec, 
ma->specb * ma->spec, 1.0f);
-       }
-       else {
-               return bc_get_cot(0.0, 0.0, 0.0, 1.0); // no specular
-       }
-}
-
 COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader)
 {
        bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Base Color");
@@ -1390,18 +1376,25 @@ COLLADASW::ColorOrTexture bc_get_base_color(bNode 
*shader)
        }
 }
 
-COLLADASW::ColorOrTexture bc_get_specular_color(bNode *shader)
+bool bc_get_reflectivity(bNode *shader, double &reflectivity)
 {
        bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Specular");
-       if (socket)
-       {
-               bNodeSocketValueRGBA *dcol = (bNodeSocketValueRGBA 
*)socket->default_value;
-               float* col = dcol->value;
-               return bc_get_cot(col[0], col[1], col[2], col[3]);
+       if (socket) {
+               bNodeSocketValueFloat *ref = (bNodeSocketValueFloat 
*)socket->default_value;
+               reflectivity = (double)ref->value;
+               return true;
        }
-       else {
-               return bc_get_cot(0.8, 0.8, 0.8, 1.0); //default white
+       return false;
+}
+
+double bc_get_reflectivity(Material *ma)
+{
+       double reflectivity = ma->spec; // fallback if no socket found
+       bNode *master_shader = bc_get_master_shader(ma);
+       if (ma->use_nodes && master_shader) {
+               bc_get_reflectivity(master_shader, reflectivity);
        }
+       return reflectivity;
 }
 
 bNode *bc_get_master_shader(Material *ma)
diff --git a/source/blender/collada/collada_utils.h 
b/source/blender/collada/collada_utils.h
index 32c89cf41e6..b68da4e8154 100644
--- a/source/blender/collada/collada_utils.h
+++ b/source/blender/collada/collada_utils.h
@@ -310,8 +310,8 @@ 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(bNode *shader);
+bool bc_get_reflectivity(bNode *shader, double &reflectivity);
+double bc_get_reflectivity(Material *ma);
 COLLADASW::ColorOrTexture bc_get_base_color(Material *ma);
-COLLADASW::ColorOrTexture bc_get_specular_color(bNode *shader);
-COLLADASW::ColorOrTexture bc_get_specular_color(Material *ma, bool 
use_fallback);
 
 #endif

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to