diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/BuiltInRP/Import/Materials/GltfPbrMaterialImporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/BuiltInRP/Import/Materials/GltfPbrMaterialImporter.cs index 9b44f8d63..e25979413 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/BuiltInRP/Import/Materials/GltfPbrMaterialImporter.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/BuiltInRP/Import/Materials/GltfPbrMaterialImporter.cs @@ -141,33 +141,11 @@ namespace UniGLTF material.globalIlluminationFlags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; }); - if (src.emissiveFactor != null && src.emissiveFactor.Length == 3) + var emissiveFactor = GltfMaterialImportUtils.ImportLinearEmissiveFactorFromMaterial(data, src); + if (emissiveFactor.HasValue) { - // NOTE: glTF 仕様違反だが emissiveFactor に 1.0 より大きな値が入っていた場合もそのまま受け入れる. - var emissiveFactor = new Vector3(src.emissiveFactor[0], src.emissiveFactor[1], src.emissiveFactor[2]); - if (glTF_KHR_materials_emissive_strength.TryGet(src.extensions, out var emissiveStrength)) - { - emissiveFactor *= emissiveStrength.emissiveStrength; - } - else if (Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions, out var ex)) - { - if (ex.EmissiveMultiplier != null) - { - emissiveFactor *= ex.EmissiveMultiplier.Value; - } - } - - if (data.MigrationFlags.IsEmissiveFactorGamma) - { - // NOTE: Do nothing. - colors.Add("_EmissionColor", emissiveFactor.ToColor3(ColorSpace.sRGB, ColorSpace.sRGB)); - } - else - { - // NOTE: Built-in RP Standard shader's emission color is in gamma color space. - colors.Add("_EmissionColor", emissiveFactor.ToColor3(ColorSpace.Linear, ColorSpace.sRGB)); - } - + // NOTE: Built-in RP Standard shader's emission color is in gamma color space. + colors.Add("_EmissionColor", emissiveFactor.Value.gamma); } if (src.emissiveTexture != null && src.emissiveTexture.index != -1) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfMaterialImportUtils.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfMaterialImportUtils.cs new file mode 100644 index 000000000..a90ea9a1b --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfMaterialImportUtils.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using ColorSpace = VRMShaders.ColorSpace; + +namespace UniGLTF +{ + public static class GltfMaterialImportUtils + { + public static Color? ImportLinearEmissiveFactorFromMaterial(GltfData data, glTFMaterial src) + { + if (src.emissiveFactor == null || src.emissiveFactor.Length != 3) return null; + + // NOTE: glTF 仕様違反だが emissiveFactor に 1.0 より大きな値が入っていた場合もそのまま受け入れる. + var emissiveFactor = new Vector3(src.emissiveFactor[0], src.emissiveFactor[1], src.emissiveFactor[2]); + if (glTF_KHR_materials_emissive_strength.TryGet(src.extensions, out var emissiveStrength)) + { + emissiveFactor *= emissiveStrength.emissiveStrength; + } + else if (Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions, out var ex)) + { + if (ex.EmissiveMultiplier != null) + { + emissiveFactor *= ex.EmissiveMultiplier.Value; + } + } + + if (data.MigrationFlags.IsEmissiveFactorGamma) + { + return emissiveFactor.ToColor3(VRMShaders.ColorSpace.sRGB, VRMShaders.ColorSpace.Linear); + } + else + { + return emissiveFactor.ToColor3(ColorSpace.Linear, ColorSpace.Linear); + } + } + } +} \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfMaterialImportUtils.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfMaterialImportUtils.cs.meta new file mode 100644 index 000000000..476a39f19 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/GltfMaterialImportUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 901463b34f824dffa3f531783cff2cc0 +timeCreated: 1668078892 \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import.meta new file mode 100644 index 000000000..5291c7c43 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3292057f1c104100be6ed94ef578c899 +timeCreated: 1668078713 \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/GltfURPMaterialDescriptorGenerator.cs similarity index 100% rename from Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs rename to Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/GltfURPMaterialDescriptorGenerator.cs diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/GltfURPMaterialDescriptorGenerator.cs.meta similarity index 100% rename from Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs.meta rename to Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/GltfURPMaterialDescriptorGenerator.cs.meta diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/Materials.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/Materials.meta new file mode 100644 index 000000000..2a0920d58 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/Materials.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5a76f43b22cf44db80bb2c035df97bca +timeCreated: 1668078724 \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/Materials/GltfPbrURPMaterialImporter.cs similarity index 90% rename from Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs rename to Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/Materials/GltfPbrURPMaterialImporter.cs index 3660af82f..60cf8abd5 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/Materials/GltfPbrURPMaterialImporter.cs @@ -117,20 +117,10 @@ namespace UniGLTF material.globalIlluminationFlags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; }); - if (src.emissiveFactor != null && src.emissiveFactor.Length == 3) + var emissiveFactor = GltfMaterialImportUtils.ImportLinearEmissiveFactorFromMaterial(data, src); + if (emissiveFactor.HasValue) { - var emissiveFactor = src.emissiveFactor.ToColor3(ColorSpace.Linear, ColorSpace.Linear); - 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; - } - colors.Add("_EmissionColor", emissiveFactor); + colors.Add("_EmissionColor", emissiveFactor.Value); } if (src.emissiveTexture != null && src.emissiveTexture.index != -1) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/Materials/GltfPbrURPMaterialImporter.cs.meta similarity index 100% rename from Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs.meta rename to Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/Import/Materials/GltfPbrURPMaterialImporter.cs.meta