mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-07 11:28:35 -05:00
Specify color space in importing VRM10 & migrating VRM0 to VRM10.
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
using VRMShaders;
|
||||
|
||||
|
||||
namespace UniGLTF
|
||||
{
|
||||
/// <summary>
|
||||
@@ -103,8 +101,9 @@ namespace UniGLTF
|
||||
|
||||
if (src.pbrMetallicRoughness.baseColorFactor != null && src.pbrMetallicRoughness.baseColorFactor.Length == 4)
|
||||
{
|
||||
var color = src.pbrMetallicRoughness.baseColorFactor;
|
||||
param.Colors.Add("_Color", (new Color(color[0], color[1], color[2], color[3])).gamma);
|
||||
param.Colors.Add("_Color",
|
||||
src.pbrMetallicRoughness.baseColorFactor.ToColor4(ColorSpace.Linear, ColorSpace.sRGB)
|
||||
);
|
||||
}
|
||||
|
||||
if (src.pbrMetallicRoughness.baseColorTexture != null && src.pbrMetallicRoughness.baseColorTexture.index != -1)
|
||||
@@ -153,7 +152,9 @@ namespace UniGLTF
|
||||
|
||||
if (src.emissiveFactor != null && src.emissiveFactor.Length == 3)
|
||||
{
|
||||
param.Colors.Add("_EmissionColor", new Color(src.emissiveFactor[0], src.emissiveFactor[1], src.emissiveFactor[2]));
|
||||
param.Colors.Add("_EmissionColor",
|
||||
src.emissiveFactor.ToColor3(ColorSpace.Linear, ColorSpace.Linear)
|
||||
);
|
||||
}
|
||||
|
||||
if (src.emissiveTexture != null && src.emissiveTexture.index != -1)
|
||||
|
||||
@@ -1,45 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using UniGLTF;
|
||||
using UniGLTF;
|
||||
using UnityEngine;
|
||||
using VRMShaders;
|
||||
|
||||
|
||||
namespace UniVRM10
|
||||
{
|
||||
public static class Vrm10MaterialImporter
|
||||
{
|
||||
public static Color ToColor4(this float[] src, Color defaultValue = default)
|
||||
{
|
||||
if (src == null || src.Length != 4)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
var v = new Vector4(
|
||||
src[0],
|
||||
src[1],
|
||||
src[2],
|
||||
src[3]
|
||||
);
|
||||
return v;
|
||||
}
|
||||
public static Color ToColor3(this float[] src, Color defaultValue = default)
|
||||
{
|
||||
if (src == null || src.Length < 3)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
var v = new Vector4(
|
||||
src[0],
|
||||
src[1],
|
||||
src[2]
|
||||
);
|
||||
return v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// VMRC_materials_mtoon の場合にマテリアル生成情報を作成する
|
||||
/// </summary>
|
||||
@@ -75,8 +41,15 @@ namespace UniVRM10
|
||||
}
|
||||
{
|
||||
// var color = mtoon.Color;
|
||||
material.SetColor(MToon.Utils.PropColor, m.pbrMetallicRoughness.baseColorFactor.ToColor4());
|
||||
if (mtoon.ShadeColorFactor != null) material.SetColor(MToon.Utils.PropShadeColor, mtoon.ShadeColorFactor.ToColor3());
|
||||
material.SetColor(MToon.Utils.PropColor, m.pbrMetallicRoughness.baseColorFactor
|
||||
.ToColor4(UniGLTF.ColorSpace.Linear, UniGLTF.ColorSpace.sRGB)
|
||||
);
|
||||
if (mtoon.ShadeColorFactor != null)
|
||||
{
|
||||
material.SetColor(MToon.Utils.PropShadeColor, mtoon.ShadeColorFactor
|
||||
.ToColor3(UniGLTF.ColorSpace.Linear, UniGLTF.ColorSpace.sRGB)
|
||||
);
|
||||
}
|
||||
material.SetFloat(MToon.Utils.PropCutoff, m.alphaCutoff);
|
||||
}
|
||||
{
|
||||
@@ -91,17 +64,29 @@ namespace UniVRM10
|
||||
}
|
||||
}
|
||||
{
|
||||
material.SetColor(MToon.Utils.PropEmissionColor, m.emissiveFactor.ToColor3());
|
||||
material.SetColor(MToon.Utils.PropEmissionColor,
|
||||
m.emissiveFactor.ToColor3(UniGLTF.ColorSpace.Linear, UniGLTF.ColorSpace.Linear)
|
||||
);
|
||||
}
|
||||
{
|
||||
if (mtoon.ParametricRimColorFactor != null) material.SetColor(MToon.Utils.PropRimColor, mtoon.ParametricRimColorFactor.ToColor3());
|
||||
if (mtoon.ParametricRimColorFactor != null)
|
||||
{
|
||||
material.SetColor(MToon.Utils.PropRimColor, mtoon.ParametricRimColorFactor
|
||||
.ToColor3(UniGLTF.ColorSpace.Linear, UniGLTF.ColorSpace.sRGB)
|
||||
);
|
||||
}
|
||||
if (mtoon.RimLightingMixFactor.HasValue) material.SetFloat(MToon.Utils.PropRimLightingMix, mtoon.RimLightingMixFactor.Value);
|
||||
if (mtoon.ParametricRimFresnelPowerFactor.HasValue) material.SetFloat(MToon.Utils.PropRimFresnelPower, mtoon.ParametricRimFresnelPowerFactor.Value);
|
||||
if (mtoon.ParametricRimLiftFactor.HasValue) material.SetFloat(MToon.Utils.PropRimLift, mtoon.ParametricRimLiftFactor.Value);
|
||||
}
|
||||
{
|
||||
if (mtoon.OutlineWidthFactor.HasValue) material.SetFloat(MToon.Utils.PropOutlineWidth, mtoon.OutlineWidthFactor.Value);
|
||||
if (mtoon.OutlineColorFactor != null) material.SetColor(MToon.Utils.PropOutlineColor, mtoon.OutlineColorFactor.ToColor3());
|
||||
if (mtoon.OutlineColorFactor != null)
|
||||
{
|
||||
material.SetColor(MToon.Utils.PropOutlineColor, mtoon.OutlineColorFactor
|
||||
.ToColor3(UniGLTF.ColorSpace.Linear, UniGLTF.ColorSpace.sRGB)
|
||||
);
|
||||
}
|
||||
if (mtoon.OutlineLightingMixFactor.HasValue) material.SetFloat(MToon.Utils.PropOutlineLightingMix, mtoon.OutlineLightingMixFactor.Value);
|
||||
|
||||
// private
|
||||
|
||||
@@ -5,25 +5,15 @@ using UniGLTF;
|
||||
using UniGLTF.Extensions.VRMC_materials_mtoon;
|
||||
using UniJSON;
|
||||
using UnityEngine;
|
||||
|
||||
using ColorSpace = UniGLTF.ColorSpace;
|
||||
|
||||
namespace UniVRM10
|
||||
{
|
||||
public static class MigrationMToon
|
||||
{
|
||||
static float[] ToFloat4(this Color color)
|
||||
static Color ToColor(JsonNode node, ColorSpace srcColorSpace, ColorSpace dstColorSpace)
|
||||
{
|
||||
return new float[] { color.r, color.g, color.b, color.a };
|
||||
}
|
||||
|
||||
static float[] ToFloat3(this Color color)
|
||||
{
|
||||
return new float[] { color.r, color.g, color.b };
|
||||
}
|
||||
|
||||
static Color ToColor(JsonNode node)
|
||||
{
|
||||
return node.ArrayItems().Select(x => x.GetSingle()).ToArray().ToColor4();
|
||||
return node.ArrayItems().Select(x => x.GetSingle()).ToArray().ToColor4(srcColorSpace, dstColorSpace);
|
||||
}
|
||||
|
||||
static float[] ToFloat4(JsonNode node)
|
||||
@@ -90,23 +80,23 @@ namespace UniVRM10
|
||||
switch (key)
|
||||
{
|
||||
case "_Color":
|
||||
definition.Color.LitColor = ToColor(kv.Value);
|
||||
definition.Color.LitColor = ToColor(kv.Value, ColorSpace.sRGB, ColorSpace.sRGB);
|
||||
break;
|
||||
|
||||
case "_ShadeColor":
|
||||
definition.Color.ShadeColor = ToColor(kv.Value);
|
||||
definition.Color.ShadeColor = ToColor(kv.Value, ColorSpace.sRGB, ColorSpace.sRGB);
|
||||
break;
|
||||
|
||||
case "_EmissionColor":
|
||||
definition.Emission.EmissionColor = ToColor(kv.Value);
|
||||
definition.Emission.EmissionColor = ToColor(kv.Value, ColorSpace.Linear, ColorSpace.Linear);
|
||||
break;
|
||||
|
||||
case "_OutlineColor":
|
||||
definition.Outline.OutlineColor = ToColor(kv.Value);
|
||||
definition.Outline.OutlineColor = ToColor(kv.Value, ColorSpace.sRGB, ColorSpace.sRGB);
|
||||
break;
|
||||
|
||||
case "_RimColor":
|
||||
definition.Rim.RimColor = ToColor(kv.Value);
|
||||
definition.Rim.RimColor = ToColor(kv.Value, ColorSpace.sRGB, ColorSpace.sRGB);
|
||||
break;
|
||||
|
||||
case "_MainTex":
|
||||
@@ -315,7 +305,7 @@ namespace UniVRM10
|
||||
var dst = new VRMC_materials_mtoon();
|
||||
|
||||
// Color
|
||||
gltfMaterial.pbrMetallicRoughness.baseColorFactor = mtoon.Definition.Color.LitColor.ToFloat4();
|
||||
gltfMaterial.pbrMetallicRoughness.baseColorFactor = mtoon.Definition.Color.LitColor.ToFloat4(ColorSpace.sRGB, ColorSpace.Linear);
|
||||
if (mtoon.TextureIndexMap.MainTex.HasValue)
|
||||
{
|
||||
gltfMaterial.pbrMetallicRoughness.baseColorTexture = new glTFMaterialBaseColorTextureInfo
|
||||
@@ -332,7 +322,7 @@ namespace UniVRM10
|
||||
(value[2], value[3])
|
||||
);
|
||||
}
|
||||
dst.ShadeColorFactor = mtoon.Definition.Color.ShadeColor.ToFloat3();
|
||||
dst.ShadeColorFactor = mtoon.Definition.Color.ShadeColor.ToFloat3(ColorSpace.sRGB, ColorSpace.Linear);
|
||||
if (mtoon.TextureIndexMap.ShadeTexture.HasValue)
|
||||
{
|
||||
dst.ShadeMultiplyTexture = new TextureInfo { Index = mtoon.TextureIndexMap.ShadeTexture.Value };
|
||||
@@ -340,7 +330,7 @@ namespace UniVRM10
|
||||
gltfMaterial.alphaCutoff = mtoon.Definition.Color.CutoutThresholdValue;
|
||||
|
||||
// Outline
|
||||
dst.OutlineColorFactor = ToFloat3(mtoon.Definition.Outline.OutlineColor);
|
||||
dst.OutlineColorFactor = mtoon.Definition.Outline.OutlineColor.ToFloat3(ColorSpace.sRGB, ColorSpace.Linear);
|
||||
dst.OutlineLightingMixFactor = mtoon.Definition.Outline.OutlineLightingMixValue;
|
||||
dst.OutlineWidthMode = (UniGLTF.Extensions.VRMC_materials_mtoon.OutlineWidthMode)mtoon.Definition.Outline.OutlineWidthMode;
|
||||
dst.OutlineWidthFactor = mtoon.Definition.Outline.OutlineWidthValue;
|
||||
@@ -350,7 +340,7 @@ namespace UniVRM10
|
||||
}
|
||||
|
||||
// Emission
|
||||
gltfMaterial.emissiveFactor = mtoon.Definition.Emission.EmissionColor.ToFloat3();
|
||||
gltfMaterial.emissiveFactor = mtoon.Definition.Emission.EmissionColor.ToFloat3(ColorSpace.Linear, ColorSpace.Linear);
|
||||
if (mtoon.TextureIndexMap.EmissionMap.HasValue)
|
||||
{
|
||||
gltfMaterial.emissiveTexture = new glTFMaterialEmissiveTextureInfo
|
||||
@@ -413,7 +403,7 @@ namespace UniVRM10
|
||||
dst.RenderQueueOffsetNumber = mtoon.Definition.Rendering.RenderQueueOffsetNumber;
|
||||
|
||||
// rim
|
||||
dst.ParametricRimColorFactor = mtoon.Definition.Rim.RimColor.ToFloat3();
|
||||
dst.ParametricRimColorFactor = mtoon.Definition.Rim.RimColor.ToFloat3(ColorSpace.sRGB, ColorSpace.Linear);
|
||||
if (mtoon.TextureIndexMap.RimTexture.HasValue)
|
||||
{
|
||||
dst.RimMultiplyTexture = new TextureInfo { Index = mtoon.TextureIndexMap.RimTexture.Value };
|
||||
|
||||
Reference in New Issue
Block a user