[Bf-blender-cvs] [dd3e3474abc] master: fix T66899: Collada: Shininess/Reflectivity not handled correct

Gaia Clary noreply at git.blender.org
Tue Jul 16 13:28:51 CEST 2019


Commit: dd3e3474abcb9c07ba0bd26f6b8940fc906d97a5
Author: Gaia Clary
Date:   Mon Jul 15 17:12:52 2019 +0200
Branches: master
https://developer.blender.org/rBdd3e3474abcb9c07ba0bd26f6b8940fc906d97a5

fix T66899: Collada: Shininess/Reflectivity not handled correct

Fixed: The Collada Exporter only supports export of
Lambert Shaders. But Shininess is not supported with
Lambert Shaders. The exporter must not add Shininess
to the Shader data!

Fixed: The Collada Importer adds an illegal value of -1
for reflectivity when this parameters is not defined in
the imported collada data. Now reflectivity is only
set when the import data contains a valid value.

Discarded: The Collada Importer handles shininess in a
dubious way. I have discarded import for now.
This needs to be reworked carefully in 2.81.

Differential Revision: https://developer.blender.org/D5262

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

M	source/blender/collada/DocumentImporter.cpp
M	source/blender/collada/EffectExporter.cpp
M	source/blender/collada/Materials.cpp

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

diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index 06f6682f401..eabd9469582 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -804,7 +804,10 @@ void DocumentImporter::write_profile_COMMON(COLLADAFW::EffectCommon *ef, Materia
   matNode.set_alpha(ef->getOpaqueMode(), ef->getTransparent(), ef->getTransparency());
 
   /* following mapping still needs to be verified */
+#if 0
+  // needs rework to be done for 2.81
   matNode.set_shininess(ef->getShininess());
+#endif
   matNode.set_reflectivity(ef->getReflectivity());
 
   /* not supported by principled BSDF */
diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp
index 394c79bb988..a784776d342 100644
--- a/source/blender/collada/EffectExporter.cpp
+++ b/source/blender/collada/EffectExporter.cpp
@@ -208,21 +208,20 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
   COLLADASW::EffectProfile ep(mSW);
   ep.setProfileType(COLLADASW::EffectProfile::COMMON);
   ep.openProfile();
-  set_shader_type(ep, ma);
+  set_shader_type(ep, ma);  // creates a Lambert Shader for now
 
   COLLADASW::ColorOrTexture cot;
 
   set_diffuse_color(ep, ma);
   set_emission(ep, ma);
   set_ior(ep, ma);
-  set_shininess(ep, ma);
   set_reflectivity(ep, ma);
   set_transparency(ep, ma);
 
-  /* TODO: from where to get ambient, specular and reflective? */
+  /* TODO: */
+  // set_shininess(ep, ma); shininess not supported for lambert
   // set_ambient(ep, ma);
   // set_specular(ep, ma);
-  // set_reflective(ep, ma);
 
   get_images(ma, material_image_map);
   std::string active_uv(getActiveUVLayerName(ob));
diff --git a/source/blender/collada/Materials.cpp b/source/blender/collada/Materials.cpp
index aa35b71b9db..d8a0f06c12b 100644
--- a/source/blender/collada/Materials.cpp
+++ b/source/blender/collada/Materials.cpp
@@ -131,18 +131,24 @@ void MaterialNode::add_link(bNode *from_node, int from_index, bNode *to_node, in
 void MaterialNode::set_reflectivity(COLLADAFW::FloatOrParam &val)
 {
   float reflectivity = val.getFloatValue();
-  bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "Metallic");
-  ((bNodeSocketValueFloat *)socket->default_value)->value = reflectivity;
-
-  material->metallic = reflectivity;
+  if (reflectivity >= 0) {
+    bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "Metallic");
+    ((bNodeSocketValueFloat *)socket->default_value)->value = reflectivity;
+    material->metallic = reflectivity;
+  }
 }
 
+#if 0
+// needs rework to be done for 2.81
 void MaterialNode::set_shininess(COLLADAFW::FloatOrParam &val)
 {
   float roughness = val.getFloatValue();
-  bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "Roughness");
-  ((bNodeSocketValueFloat *)socket->default_value)->value = roughness;
+  if (roughness >= 0) {
+    bNodeSocket *socket = nodeFindSocket(shader_node, SOCK_IN, "Roughness");
+    ((bNodeSocketValueFloat *)socket->default_value)->value = roughness;
+  }
 }
+#endif
 
 void MaterialNode::set_ior(COLLADAFW::FloatOrParam &val)
 {



More information about the Bf-blender-cvs mailing list