mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-14 06:19:47 -05:00
Merge pull request #1920 from Santarh/urpEmission
Fix the error of emissiveFactor when importing into URP Lit shader.
This commit is contained in:
commit
fa3194c951
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 901463b34f824dffa3f531783cff2cc0
|
||||
timeCreated: 1668078892
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3292057f1c104100be6ed94ef578c899
|
||||
timeCreated: 1668078713
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5a76f43b22cf44db80bb2c035df97bca
|
||||
timeCreated: 1668078724
|
||||
|
|
@ -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)
|
||||
Loading…
Reference in New Issue
Block a user