From 5299b06e832da5ea3ffb1f5da5bdf0ac03ee1920 Mon Sep 17 00:00:00 2001 From: samcake Date: Tue, 8 Mar 2016 11:26:16 -0800 Subject: [PATCH 1/2] Reintroducing the use of the DiffuseFactor so both Bender and MAya looks closer to Hifi --- libraries/fbx/src/FBXReader_Material.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/fbx/src/FBXReader_Material.cpp b/libraries/fbx/src/FBXReader_Material.cpp index f3b728ef46..bd70bafe65 100644 --- a/libraries/fbx/src/FBXReader_Material.cpp +++ b/libraries/fbx/src/FBXReader_Material.cpp @@ -183,10 +183,13 @@ void FBXReader::consolidateFBXMaterials() { // Finally create the true material representation material._material = std::make_shared(); - material._material->setEmissive(material.emissiveColor * material.emissiveFactor); - // Do not use the Diffuse Factor from FBX at all, this simpliies the export path - auto diffuse = material.diffuseColor; + // Emissive color is the mix of emissiveColor with emissiveFactor + auto emissive = material.emissiveColor * material.emissiveFactor; + material._material->setEmissive(emissive); + + // Final diffuse color is the mix of diffuseColor with diffuseFactor + auto diffuse = material.diffuseColor * material.diffuseFactor; material._material->setAlbedo(diffuse); if (material.isPBSMaterial) { From bb9957b7f17bc2eb59c718b8f807ce219df41eae Mon Sep 17 00:00:00 2001 From: samcake Date: Tue, 8 Mar 2016 18:45:20 -0800 Subject: [PATCH 2/2] using comments from review --- libraries/fbx/src/FBXReader.cpp | 23 +++++++++++++++++------ libraries/fbx/src/FBXReader.h | 10 +++++----- libraries/fbx/src/FBXReader_Material.cpp | 6 ++++-- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/libraries/fbx/src/FBXReader.cpp b/libraries/fbx/src/FBXReader.cpp index 17b4cc7c9a..a63cf78393 100644 --- a/libraries/fbx/src/FBXReader.cpp +++ b/libraries/fbx/src/FBXReader.cpp @@ -892,24 +892,27 @@ FBXGeometry* FBXReader::extractFBXGeometry(const QVariantHash& mapping, const QS } else if (property.properties.at(0) == "DiffuseFactor") { material.diffuseFactor = property.properties.at(index).value(); } else if (property.properties.at(0) == "Diffuse") { - // material.diffuseColor = getVec3(property.properties, index); - // material.diffuseFactor = 1.0; + // NOTE: this is uneeded but keep it for now for debug + // material.diffuseColor = getVec3(property.properties, index); + // material.diffuseFactor = 1.0; } else if (property.properties.at(0) == "SpecularColor") { material.specularColor = getVec3(property.properties, index); } else if (property.properties.at(0) == "SpecularFactor") { material.specularFactor = property.properties.at(index).value(); } else if (property.properties.at(0) == "Specular") { - // material.specularColor = getVec3(property.properties, index); - // material.specularFactor = 1.0; + // NOTE: this is uneeded but keep it for now for debug + // material.specularColor = getVec3(property.properties, index); + // material.specularFactor = 1.0; } else if (property.properties.at(0) == "EmissiveColor") { material.emissiveColor = getVec3(property.properties, index); } else if (property.properties.at(0) == "EmissiveFactor") { material.emissiveFactor = property.properties.at(index).value(); } else if (property.properties.at(0) == "Emissive") { - // material.emissiveColor = getVec3(property.properties, index); - // material.emissiveFactor = 1.0; + // NOTE: this is uneeded but keep it for now for debug + // material.emissiveColor = getVec3(property.properties, index); + // material.emissiveFactor = 1.0; } else if (property.properties.at(0) == "Shininess") { material.shininess = property.properties.at(index).value(); @@ -917,6 +920,7 @@ FBXGeometry* FBXReader::extractFBXGeometry(const QVariantHash& mapping, const QS } else if (property.properties.at(0) == "Opacity") { material.opacity = property.properties.at(index).value(); } + // Sting Ray Material Properties!!!! else if (property.properties.at(0) == "Maya|use_normal_map") { material.isPBSMaterial = true; @@ -925,6 +929,7 @@ FBXGeometry* FBXReader::extractFBXGeometry(const QVariantHash& mapping, const QS } else if (property.properties.at(0) == "Maya|base_color") { material.isPBSMaterial = true; material.diffuseColor = getVec3(property.properties, index); + } else if (property.properties.at(0) == "Maya|use_color_map") { material.isPBSMaterial = true; material.useAlbedoMap = (bool) property.properties.at(index).value(); @@ -932,6 +937,7 @@ FBXGeometry* FBXReader::extractFBXGeometry(const QVariantHash& mapping, const QS } else if (property.properties.at(0) == "Maya|roughness") { material.isPBSMaterial = true; material.roughness = property.properties.at(index).value(); + } else if (property.properties.at(0) == "Maya|use_roughness_map") { material.isPBSMaterial = true; material.useRoughnessMap = (bool)property.properties.at(index).value(); @@ -939,20 +945,25 @@ FBXGeometry* FBXReader::extractFBXGeometry(const QVariantHash& mapping, const QS } else if (property.properties.at(0) == "Maya|metallic") { material.isPBSMaterial = true; material.metallic = property.properties.at(index).value(); + } else if (property.properties.at(0) == "Maya|use_metallic_map") { material.isPBSMaterial = true; material.useMetallicMap = (bool)property.properties.at(index).value(); + } else if (property.properties.at(0) == "Maya|emissive") { material.isPBSMaterial = true; material.emissiveColor = getVec3(property.properties, index); + } else if (property.properties.at(0) == "Maya|emissive_intensity") { material.isPBSMaterial = true; material.emissiveIntensity = property.properties.at(index).value(); + } else if (property.properties.at(0) == "Maya|use_emissive_map") { material.isPBSMaterial = true; material.useEmissiveMap = (bool)property.properties.at(index).value(); } else if (property.properties.at(0) == "Maya|use_ao_map") { + material.isPBSMaterial = true; material.useOcclusionMap = (bool)property.properties.at(index).value(); } else { diff --git a/libraries/fbx/src/FBXReader.h b/libraries/fbx/src/FBXReader.h index c2b777b0db..a1fc30d1f4 100644 --- a/libraries/fbx/src/FBXReader.h +++ b/libraries/fbx/src/FBXReader.h @@ -138,15 +138,15 @@ public: opacity(opacity) {} glm::vec3 diffuseColor{ 1.0f }; - float diffuseFactor = 1.0f; + float diffuseFactor{ 1.0f }; glm::vec3 specularColor{ 0.02f }; - float specularFactor = 1.0f; + float specularFactor{ 1.0f }; glm::vec3 emissiveColor{ 0.0f }; - float emissiveFactor = 0.0f; + float emissiveFactor{ 0.0f }; - float shininess = 23.0f; - float opacity = 1.0f; + float shininess{ 23.0f }; + float opacity{ 1.0f }; float metallic{ 0.0f }; float roughness{ 1.0f }; diff --git a/libraries/fbx/src/FBXReader_Material.cpp b/libraries/fbx/src/FBXReader_Material.cpp index b8bca16ef0..60c1e747c0 100644 --- a/libraries/fbx/src/FBXReader_Material.cpp +++ b/libraries/fbx/src/FBXReader_Material.cpp @@ -80,10 +80,12 @@ void FBXReader::consolidateFBXMaterials() { QString diffuseFactorTextureID = diffuseFactorTextures.value(material.materialID); if (!diffuseFactorTextureID.isNull() || !diffuseTextureID.isNull()) { - // If both factor and color are specified, color wins + // If both factor and color are specified, the texture bound to DiffuseColor wins if (!diffuseFactorTextureID.isNull() && diffuseTextureID.isNull()) { diffuseTextureID = diffuseFactorTextureID; - // Avoid the DiffuseFactor effect in this case because here Maya would put 0.5... + // If the diffuseTextureID comes from the Texture bound to DiffuseFactor, we know it s exported from maya + // And the DiffuseFactor is forced to 0.5 by Maya which is bad + // So we need to force it to 1.0 material.diffuseFactor = 1.0; }