mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-21 18:15:39 -05:00
Convert emissiveFactor's color space into gamma with Built-in RP Standard shader.
This commit is contained in:
@@ -40,6 +40,11 @@ namespace UniGLTF
|
||||
return new Color(src[0], src[1], src[2], 1f).ConvertColorSpace(srcColorSpace, dstColorSpace);
|
||||
}
|
||||
|
||||
public static Color ToColor3(this Vector3 src, ColorSpace srcColorSpace, ColorSpace dstColorSpace)
|
||||
{
|
||||
return new Color(src.x, src.y, src.z).ConvertColorSpace(srcColorSpace, dstColorSpace);
|
||||
}
|
||||
|
||||
private static Color ConvertColorSpace(this Color srcColor, ColorSpace srcColorSpace, ColorSpace dstColorSpace)
|
||||
{
|
||||
// Need pattern matching :(
|
||||
|
||||
@@ -189,7 +189,8 @@ namespace UniGLTF
|
||||
color /= maxColorComponent;
|
||||
UniGLTF.glTF_KHR_materials_emissive_strength.Serialize(ref dst.extensions, maxColorComponent);
|
||||
}
|
||||
dst.emissiveFactor = color.ToFloat3(ColorSpace.Linear, ColorSpace.Linear);
|
||||
// NOTE: Built-in RP Standard shader's emission color is in gamma color space.
|
||||
dst.emissiveFactor = color.ToFloat3(ColorSpace.sRGB, ColorSpace.Linear);
|
||||
}
|
||||
|
||||
if (src.HasProperty(EmissionTexturePropertyName))
|
||||
|
||||
@@ -143,19 +143,30 @@ namespace UniGLTF
|
||||
|
||||
if (src.emissiveFactor != null && src.emissiveFactor.Length == 3)
|
||||
{
|
||||
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))
|
||||
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 (UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions,
|
||||
out UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.
|
||||
VRMC_materials_hdr_emissiveMultiplier ex))
|
||||
else if (Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions, out var ex))
|
||||
{
|
||||
emissiveFactor *= ex.EmissiveMultiplier.Value;
|
||||
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));
|
||||
}
|
||||
|
||||
colors.Add("_EmissionColor", emissiveFactor);
|
||||
}
|
||||
|
||||
if (src.emissiveTexture != null && src.emissiveTexture.index != -1)
|
||||
|
||||
@@ -6,5 +6,10 @@
|
||||
/// Before UniGLTF v0.69, roughness value in the texture was invalid squared value.
|
||||
/// </summary>
|
||||
public bool IsRoughnessTextureValueSquared { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Built-in RP Standard shader's emission color is exported in gamma color space until UniGLTF v0.106.0.
|
||||
/// </summary>
|
||||
public bool IsEmissiveFactorGamma { get; set; } = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user