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-07-15 18:12:52 +0300
committerGaia Clary <gaia.clary@machinimatrix.org>2019-07-16 14:28:40 +0300
commitdd3e3474abcb9c07ba0bd26f6b8940fc906d97a5 (patch)
tree4be423041279dbe71916551ed1f5fdcbd057b719 /source/blender/collada
parent965bd4c8c3758e2ce5f0a8e2e70afd0b9745cc92 (diff)
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
Diffstat (limited to 'source/blender/collada')
-rw-r--r--source/blender/collada/DocumentImporter.cpp3
-rw-r--r--source/blender/collada/EffectExporter.cpp7
-rw-r--r--source/blender/collada/Materials.cpp18
3 files changed, 18 insertions, 10 deletions
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)
{