GTLF: added support for KHR_materials_emissive_strength

This commit is contained in:
Turánszki János
2023-07-30 13:46:08 +02:00
parent b855545d54
commit abe650eb55
2 changed files with 27 additions and 3 deletions
+26 -3
View File
@@ -650,6 +650,17 @@ void ImportModel_GLTF(const std::string& fileName, Scene& scene)
material.shaderType = MaterialComponent::SHADERTYPE_UNLIT;
}
auto ext_emissiveStrength = x.extensions.find("KHR_materials_emissive_strength");
if (ext_emissiveStrength != x.extensions.end())
{
// https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md
if (ext_emissiveStrength->second.Has("emissiveStrength"))
{
auto& factor = ext_emissiveStrength->second.Get("emissiveStrength");
material.SetEmissiveStrength(float(factor.IsNumber() ? factor.Get<double>() : factor.Get<int>()));
}
}
auto ext_transmission = x.extensions.find("KHR_materials_transmission");
if (ext_transmission != x.extensions.end())
{
@@ -3497,6 +3508,10 @@ void ExportModel_GLTF(const std::string& filename, Scene& scene)
{
state.gltfModel.extensionsUsed.push_back("KHR_materials_pbrSpecularGlossiness");
}
if (material.GetEmissiveStrength() != 1.0f)
{
state.gltfModel.extensionsUsed.push_back("KHR_materials_emissive_strength");
}
if (material.shaderType == MaterialComponent::SHADERTYPE::SHADERTYPE_PBR_CLOTH)
{
@@ -3655,9 +3670,9 @@ void ExportModel_GLTF(const std::string& filename, Scene& scene)
material_builder.pbrMetallicRoughness.roughnessFactor = { material.roughness };
material_builder.pbrMetallicRoughness.metallicFactor = { material.metalness };
material_builder.emissiveFactor = {
material.emissiveColor.x * material.emissiveColor.w,
material.emissiveColor.y * material.emissiveColor.w,
material.emissiveColor.z * material.emissiveColor.w,
material.emissiveColor.x,
material.emissiveColor.y,
material.emissiveColor.z,
};
if (material.alphaRef < 1.f)
{
@@ -3681,6 +3696,14 @@ void ExportModel_GLTF(const std::string& filename, Scene& scene)
material_builder.extensions["KHR_materials_unlit"] = tinygltf::Value();
}
if (material.GetEmissiveStrength() != 1.0f)
{
tinygltf::Value::Object KHR_materials_emissive_strength_builder = {
{"emissiveStrength", tinygltf::Value(double(material.GetEmissiveStrength()))}
};
material_builder.extensions["KHR_materials_emissive_strength"] = tinygltf::Value(KHR_materials_emissive_strength_builder);
}
// Transmission extension (KHR_materials_transmission)
// Values
if (material.transmission > 0 || material.textures[wi::scene::MaterialComponent::TRANSMISSIONMAP].resource.IsValid())
+1
View File
@@ -97,6 +97,7 @@ KHR_materials_clearcoat
KHR_materials_specular
KHR_materials_anisotropy
KHR_materials_ior
KHR_materials_emissive_strength
KHR_texture_basisu
KHR_lights_punctual