diff --git a/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/KHR_materials_emissive_strength.cs b/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/KHR_materials_emissive_strength.cs
new file mode 100644
index 000000000..dba1d4b00
--- /dev/null
+++ b/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/KHR_materials_emissive_strength.cs
@@ -0,0 +1,53 @@
+using System;
+using UniJSON;
+
+namespace UniGLTF
+{
+ ///
+ /// https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_emissive_strength
+ ///
+ [Serializable]
+ public class glTF_KHR_materials_emissive_strength
+ {
+ public const string ExtensionName = "KHR_materials_emissive_strength";
+ public static readonly Utf8String ExtensionNameUtf8 = Utf8String.From(ExtensionName);
+ public float emissiveStrength = 1.0f;
+
+ static glTF_KHR_materials_emissive_strength Deserialize(JsonNode json)
+ {
+ var extension = new glTF_KHR_materials_emissive_strength();
+ if (json.TryGet(nameof(emissiveStrength), out JsonNode found))
+ {
+ extension.emissiveStrength = found.GetSingle();
+ }
+ return extension;
+ }
+
+ public static bool TryGet(glTFExtension src, out glTF_KHR_materials_emissive_strength extension)
+ {
+ if (src is UniGLTF.glTFExtensionImport extensions)
+ {
+ foreach (var kv in extensions.ObjectItems())
+ {
+ if (kv.Key.GetUtf8String() == ExtensionNameUtf8)
+ {
+ extension = Deserialize(kv.Value);
+ return true;
+ }
+ }
+ }
+ extension = default;
+ return false;
+ }
+
+ public static void Serialize(ref glTFExtension materialExtensions, float value)
+ {
+ var f = new JsonFormatter();
+ f.BeginMap();
+ f.Key(nameof(emissiveStrength));
+ f.Value(value);
+ f.EndMap();
+ glTFExtensionExport.GetOrCreate(ref materialExtensions).Add(ExtensionName, f.GetStore().Bytes);
+ }
+ }
+}
diff --git a/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/KHR_materials_emissive_strength.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/KHR_materials_emissive_strength.cs.meta
new file mode 100644
index 000000000..71528af32
--- /dev/null
+++ b/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/KHR_materials_emissive_strength.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d6a65b35aabda73408a522a2ef8e6a13
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfExportSettings.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfExportSettings.cs
index b35cfe965..1407cebfd 100644
--- a/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfExportSettings.cs
+++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfExportSettings.cs
@@ -37,11 +37,6 @@ namespace UniGLTF
#endif
;
- ///
- /// VRMC_materials_hdr_emissiveMultiplier
- ///
- public bool UseEmissiveMultiplier;
-
///
/// Keep VertexColor
///
diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfPbrMaterialImporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfPbrMaterialImporter.cs
index c3500eeb3..526a7faed 100644
--- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfPbrMaterialImporter.cs
+++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfPbrMaterialImporter.cs
@@ -136,7 +136,11 @@ namespace UniGLTF
if (src.emissiveFactor != null && src.emissiveFactor.Length == 3)
{
var emissiveFactor = src.emissiveFactor.ToColor3(ColorSpace.Linear, ColorSpace.Linear);
- if (UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions,
+ if (UniGLTF.glTF_KHR_materials_emissive_strength.TryGet(src.extensions, out UniGLTF.glTF_KHR_materials_emissive_strength emissiveStrength))
+ {
+ emissiveFactor *= emissiveStrength.emissiveStrength;
+ }
+ else if (UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions,
out UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.
VRMC_materials_hdr_emissiveMultiplier ex))
{
diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/MaterialExporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/MaterialExporter.cs
index 1fab2d3b1..92a95ff26 100644
--- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/MaterialExporter.cs
+++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/MaterialExporter.cs
@@ -23,7 +23,7 @@ namespace UniGLTF
// common params
material.name = m.name;
Export_Color(m, textureExporter, material);
- Export_Emission(m, textureExporter, material, settings.UseEmissiveMultiplier);
+ Export_Emission(m, textureExporter, material);
Export_Normal(m, textureExporter, material);
Export_OcclusionMetallicRoughness(m, textureExporter, material);
@@ -154,7 +154,7 @@ namespace UniGLTF
}
}
- static void Export_Emission(Material m, ITextureExporter textureExporter, glTFMaterial material, bool useEmissiveMultiplier)
+ static void Export_Emission(Material m, ITextureExporter textureExporter, glTFMaterial material)
{
if (m.IsKeywordEnabled("_EMISSION") == false)
{
@@ -168,14 +168,7 @@ namespace UniGLTF
{
var maxColorComponent = color.maxColorComponent;
color /= maxColorComponent;
- if (useEmissiveMultiplier)
- {
- UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfSerializer.SerializeTo(ref material.extensions,
- new Extensions.VRMC_materials_hdr_emissiveMultiplier.VRMC_materials_hdr_emissiveMultiplier
- {
- EmissiveMultiplier = maxColorComponent,
- });
- }
+ UniGLTF.glTF_KHR_materials_emissive_strength.Serialize(ref material.extensions, maxColorComponent);
}
material.emissiveFactor = color.ToFloat3(ColorSpace.Linear, ColorSpace.Linear);
}
diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs
index ab61c3053..e9996cfac 100644
--- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs
+++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs
@@ -110,7 +110,12 @@ namespace UniGLTF
if (src.emissiveFactor != null && src.emissiveFactor.Length == 3)
{
var emissiveFactor = src.emissiveFactor.ToColor3(ColorSpace.Linear, ColorSpace.Linear);
- if (UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions,
+ if (UniGLTF.glTF_KHR_materials_emissive_strength.TryGet(src.extensions,
+ out UniGLTF.glTF_KHR_materials_emissive_strength emissiveStrength))
+ {
+ emissiveFactor *= emissiveStrength.emissiveStrength;
+ }
+ else if (UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions,
out UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.VRMC_materials_hdr_emissiveMultiplier ex))
{
emissiveFactor *= ex.EmissiveMultiplier.Value;
@@ -175,7 +180,7 @@ namespace UniGLTF
matDesc = new MaterialDescriptor(
GltfMaterialDescriptorGenerator.GetMaterialName(i, src),
- ShaderName,
+ ShaderName,
null,
textureSlots,
floatValues,