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
This commit is contained in:
Gaia Clary 2019-07-15 17:12:52 +02:00
parent 965bd4c8c3
commit dd3e3474ab
Notes: blender-bot 2023-02-14 01:49:24 +01:00
Referenced by issue #66899, Exporting to Collada sets material roughness to 0
3 changed files with 18 additions and 10 deletions

View File

@ -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 */

View File

@ -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));

View File

@ -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)
{