From b90e781773a88aa29c5f66357bf851ca830fc61c Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 21 Apr 2021 16:39:22 +0900 Subject: [PATCH] =?UTF-8?q?mtoon=20material=20export=20=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VRM10/Runtime/IO/Vrm10MaterialExporter.cs | 205 ++---------------- .../VRM10/Runtime/IO/Vrm10MaterialImporter.cs | 2 +- 2 files changed, 21 insertions(+), 186 deletions(-) diff --git a/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs b/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs index 77d7a7bed..234053eef 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs @@ -1,5 +1,4 @@ -using System; -using UniGLTF; +using UniGLTF; using UnityEngine; using VRMShaders; @@ -7,103 +6,6 @@ namespace UniVRM10 { public class Vrm10MaterialExporter : MaterialExporter { - protected override glTFMaterial CreateMaterial(Material m) - { - switch (m.shader.name) - { - case "VRM/UnlitTexture": - return Export_VRMUnlitTexture(m); - - case "VRM/UnlitTransparent": - return Export_VRMUnlitTransparent(m); - - case "VRM/UnlitCutout": - return Export_VRMUnlitCutout(m); - - case "VRM/UnlitTransparentZWrite": - return Export_VRMUnlitTransparentZWrite(m); - - case "VRM/MToon": - return Export_VRMMToon(m); - - default: - return base.CreateMaterial(m); - } - } - - static glTFMaterial Export_VRMUnlitTexture(Material m) - { - var material = glTF_KHR_materials_unlit.CreateDefault(); - material.alphaMode = "OPAQUE"; - return material; - } - static glTFMaterial Export_VRMUnlitTransparent(Material m) - { - var material = glTF_KHR_materials_unlit.CreateDefault(); - material.alphaMode = "BLEND"; - return material; - } - static glTFMaterial Export_VRMUnlitCutout(Material m) - { - var material = glTF_KHR_materials_unlit.CreateDefault(); - material.alphaMode = "MASK"; - return material; - } - static glTFMaterial Export_VRMUnlitTransparentZWrite(Material m) - { - var material = glTF_KHR_materials_unlit.CreateDefault(); - material.alphaMode = "BLEND"; - return material; - } - - static glTFMaterial Export_VRMMToon(Material m) - { - var material = glTF_KHR_materials_unlit.CreateDefault(); - - switch (m.GetTag("RenderType", true)) - { - case "Transparent": - material.alphaMode = "BLEND"; - break; - - case "TransparentCutout": - material.alphaMode = "MASK"; - material.alphaCutoff = m.GetFloat("_Cutoff"); - break; - - default: - material.alphaMode = "OPAQUE"; - break; - } - - switch ((int)m.GetFloat("_CullMode")) - { - case 0: - material.doubleSided = true; - break; - - case 1: - Debug.LogWarning("ignore cull front"); - break; - - case 2: - // cull back - break; - - default: - throw new NotImplementedException(); - } - - return material; - } - - #region CreateFromMaterial - - static readonly string[] TAGS = new string[]{ - "RenderType", - // "Queue", - }; - public override glTFMaterial ExportMaterial(Material m, TextureExporter textureExporter) { if (m.shader.name != MToon.Utils.ShaderName) @@ -111,14 +13,27 @@ namespace UniVRM10 return base.ExportMaterial(m, textureExporter); } + // convert MToon intermediate value from UnityEngine.Material + var def = MToon.Utils.GetMToonParametersFromMaterial(m); + + // gltfMaterial var material = new glTFMaterial { name = m.name, - emissiveFactor = new float[] { 0, 0, 0 }, + pbrMetallicRoughness = new glTFPbrMetallicRoughness + { + baseColorFactor = def.Color.LitColor.ToArray(), + baseColorTexture = new glTFMaterialBaseColorTextureInfo + { + index = textureExporter.ExportSRGB(def.Color.LitMultiplyTexture), + }, + }, + + emissiveFactor = def.Emission.EmissionColor.ToArray(), }; - // default values + // VRMC_materials_mtoon var mtoon = new UniGLTF.Extensions.VRMC_materials_mtoon.VRMC_materials_mtoon { Version = "", @@ -129,7 +44,10 @@ namespace UniVRM10 ShadeColorFactor = new float[] { 0, 0, 0 }, - // ShadeMultiplyTexture; + ShadeMultiplyTexture = new UniGLTF.Extensions.VRMC_materials_mtoon.TextureInfo + { + Index = textureExporter.ExportSRGB(def.Color.ShadeMultiplyTexture), + }, // Lighting ShadingShiftFactor = 0, @@ -172,92 +90,9 @@ namespace UniVRM10 UvAnimationRotationSpeedFactor = 0, }; - // var prop = PreShaderPropExporter.GetPropsForSupportedShader(m.shader.name); - // if (prop == null) - // { - // Debug.LogWarningFormat("Fail to export shader: {0}", m.shader.name); - // } - // else - // { - // foreach (var keyword in m.shaderKeywords) - // { - // material.keywordMap.Add(keyword, m.IsKeywordEnabled(keyword)); - // } - - // // get properties - // //material.SetProp(prop); - // foreach (var kv in prop.Properties) - // { - // switch (kv.ShaderPropertyType) - // { - // case ShaderPropertyType.Color: - // { - // var value = m.GetColor(kv.Key).ToArray(); - // material.vectorProperties.Add(kv.Key, value); - // } - // break; - - // case ShaderPropertyType.Range: - // case ShaderPropertyType.Float: - // { - // var value = m.GetFloat(kv.Key); - // material.floatProperties.Add(kv.Key, value); - // } - // break; - - // case ShaderPropertyType.TexEnv: - // { - // var texture = m.GetTexture(kv.Key); - // if (texture != null) - // { - // var value = kv.Key == "_BumpMap" - // ? textureExporter.ExportNormal(texture) - // : textureExporter.ExportSRGB(texture) - // ; - // if (value == -1) - // { - // Debug.LogFormat("not found {0}", texture.name); - // } - // else - // { - // material.textureProperties.Add(kv.Key, value); - // } - // } - - // // offset & scaling - // var offset = m.GetTextureOffset(kv.Key); - // var scaling = m.GetTextureScale(kv.Key); - // material.vectorProperties.Add(kv.Key, - // new float[] { offset.x, offset.y, scaling.x, scaling.y }); - // } - // break; - - // case ShaderPropertyType.Vector: - // { - // var value = m.GetVector(kv.Key).ToArray(); - // material.vectorProperties.Add(kv.Key, value); - // } - // break; - - // default: - // throw new NotImplementedException(); - // } - // } - // } - - // foreach (var tag in TAGS) - // { - // var value = m.GetTag(tag, false); - // if (!String.IsNullOrEmpty(value)) - // { - // material.tagMap.Add(tag, value); - // } - // } - UniGLTF.Extensions.VRMC_materials_mtoon.GltfSerializer.SerializeTo(ref material.extensions, mtoon); return material; } - #endregion } } diff --git a/Assets/VRM10/Runtime/IO/Vrm10MaterialImporter.cs b/Assets/VRM10/Runtime/IO/Vrm10MaterialImporter.cs index 781602b40..5ca26aa08 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10MaterialImporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10MaterialImporter.cs @@ -27,7 +27,7 @@ namespace UniVRM10 } public static Color ToColor3(this float[] src, Color defaultValue = default) { - if (src == null || src.Length != 3) + if (src == null || src.Length < 3) { throw new NotImplementedException(); }