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:
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
|
@ -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 */
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue