diff --git a/Assets/UniGLTF/MeshUtility/Editor/ExportDialog/ExportDialogState.cs b/Assets/UniGLTF/MeshUtility/Editor/ExportDialog/ExportDialogState.cs index 0ae1dd4d3..26fb20e70 100644 --- a/Assets/UniGLTF/MeshUtility/Editor/ExportDialog/ExportDialogState.cs +++ b/Assets/UniGLTF/MeshUtility/Editor/ExportDialog/ExportDialogState.cs @@ -41,8 +41,16 @@ namespace MeshUtility if (value != null && AssetDatabase.IsMainAsset(value)) { assetPath = AssetDatabase.GetAssetPath(value); - isPrefab = true; - value = PrefabUtility.LoadPrefabContents(assetPath); + try + { + var prefab = PrefabUtility.LoadPrefabContents(assetPath); + value = prefab; + isPrefab = true; + } + catch (ArgumentException ex) + { + // Debug.LogWarning(ex); + } } if (m_root.GameObject == value) { diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/MaterialExporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/MaterialExporter.cs index b31901418..20a5ea7b9 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/MaterialExporter.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/MaterialExporter.cs @@ -15,21 +15,21 @@ namespace UniGLTF public interface IMaterialExporter { - glTFMaterial ExportMaterial(Material m, TextureExporter textureManager); + glTFMaterial ExportMaterial(Material m, TextureExporter textureExporter); } public class MaterialExporter : IMaterialExporter { - public virtual glTFMaterial ExportMaterial(Material m, TextureExporter textureManager) + public virtual glTFMaterial ExportMaterial(Material m, TextureExporter textureExporter) { var material = CreateMaterial(m); // common params material.name = m.name; - Export_Color(m, textureManager, material); - Export_Emission(m, textureManager, material); - Export_Normal(m, textureManager, material); - Export_OcclusionMetallicRoughness(m, textureManager, material); + Export_Color(m, textureExporter, material); + Export_Emission(m, textureExporter, material); + Export_Normal(m, textureExporter, material); + Export_OcclusionMetallicRoughness(m, textureExporter, material); return material; } diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs index d83d12c4b..434003be0 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs @@ -85,7 +85,7 @@ namespace UniVRM10 #endif var message = TryParseOrMigrate(scriptedImporter.assetPath, migrateToVrm1, out GltfParser parser); - if (string.IsNullOrEmpty(message)) + if (!string.IsNullOrEmpty(message)) { // fail to parse vrm1 return; diff --git a/Assets/VRM10/Editor/Vrm10ExportDialog.cs b/Assets/VRM10/Editor/Vrm10ExportDialog.cs index de7d75f80..3b031b7ec 100644 --- a/Assets/VRM10/Editor/Vrm10ExportDialog.cs +++ b/Assets/VRM10/Editor/Vrm10ExportDialog.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Reflection; using MeshUtility; +using UniGLTF; using UnityEditor; using UnityEngine; using VrmLib; @@ -322,14 +323,168 @@ namespace UniVRM10 exporter.Export(model, option); // material - // var textureExporter = new TextureExporter(AssetTextureUtil.IsTextureEditorAsset); - // var materialExporter = new Vrm10MaterialExporter(); - // foreach (var m in materials) - // { - - // } + var textureExporter = new TextureExporter(AssetTextureUtil.IsTextureEditorAsset); + var materialExporter = new Vrm10MaterialExporter(); + foreach (Material m in model.Materials) + { + var glTFMaterial = materialExporter.ExportMaterial(m, textureExporter); + exporter.Storage.Gltf.materials.Add(glTFMaterial); + } + // // export VRM extensions + // + { + var vrm = new UniGLTF.Extensions.VRMC_vrm.VRMC_vrm + { + Humanoid = new UniGLTF.Extensions.VRMC_vrm.Humanoid + { + HumanBones = new UniGLTF.Extensions.VRMC_vrm.HumanBones + { + }, + }, + Meta = new UniGLTF.Extensions.VRMC_vrm.Meta + { + AllowExcessivelySexualUsage = false, + AllowExcessivelyViolentUsage = false, + AllowPoliticalOrReligiousUsage = false, + AllowRedistribution = false, + }, + }; + + // humanoid + for (int i = 0; i < model.Nodes.Count; ++i) + { + var bone = model.Nodes[i]; + switch (bone.HumanoidBone) + { + case HumanoidBones.hips: vrm.Humanoid.HumanBones.Hips = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + case HumanoidBones.spine: vrm.Humanoid.HumanBones.Spine = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.chest: vrm.Humanoid.HumanBones.Chest = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.upperChest: vrm.Humanoid.HumanBones.UpperChest = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.neck: vrm.Humanoid.HumanBones.Neck = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.head: vrm.Humanoid.HumanBones.Head = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftEye: vrm.Humanoid.HumanBones.LeftEye = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightEye: vrm.Humanoid.HumanBones.RightEye = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.jaw: vrm.Humanoid.HumanBones.Jaw = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftUpperLeg: vrm.Humanoid.HumanBones.LeftUpperLeg = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftLowerLeg: vrm.Humanoid.HumanBones.LeftLowerLeg = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftFoot: vrm.Humanoid.HumanBones.LeftFoot = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftToes: vrm.Humanoid.HumanBones.LeftToes = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightUpperLeg: vrm.Humanoid.HumanBones.RightUpperLeg = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightLowerLeg: vrm.Humanoid.HumanBones.RightLowerLeg = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightFoot: vrm.Humanoid.HumanBones.RightFoot = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightToes: vrm.Humanoid.HumanBones.RightToes = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftShoulder: vrm.Humanoid.HumanBones.LeftShoulder = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftUpperArm: vrm.Humanoid.HumanBones.LeftUpperArm = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftLowerArm: vrm.Humanoid.HumanBones.LeftLowerArm = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftHand: vrm.Humanoid.HumanBones.LeftHand = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightShoulder: vrm.Humanoid.HumanBones.RightShoulder = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightUpperArm: vrm.Humanoid.HumanBones.RightUpperArm = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightLowerArm: vrm.Humanoid.HumanBones.RightLowerArm = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightHand: vrm.Humanoid.HumanBones.RightHand = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftThumbProximal: vrm.Humanoid.HumanBones.LeftThumbProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftThumbIntermediate: vrm.Humanoid.HumanBones.LeftThumbIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftThumbDistal: vrm.Humanoid.HumanBones.LeftThumbDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftIndexProximal: vrm.Humanoid.HumanBones.LeftIndexProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftIndexIntermediate: vrm.Humanoid.HumanBones.LeftIndexIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftIndexDistal: vrm.Humanoid.HumanBones.LeftIndexDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftMiddleProximal: vrm.Humanoid.HumanBones.LeftMiddleProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftMiddleIntermediate: vrm.Humanoid.HumanBones.LeftMiddleIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftMiddleDistal: vrm.Humanoid.HumanBones.LeftMiddleDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftRingProximal: vrm.Humanoid.HumanBones.LeftRingProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftRingIntermediate: vrm.Humanoid.HumanBones.LeftRingIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftRingDistal: vrm.Humanoid.HumanBones.LeftRingDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftLittleProximal: vrm.Humanoid.HumanBones.LeftLittleProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftLittleIntermediate: vrm.Humanoid.HumanBones.LeftLittleIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.leftLittleDistal: vrm.Humanoid.HumanBones.LeftLittleDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightThumbProximal: vrm.Humanoid.HumanBones.RightThumbProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightThumbIntermediate: vrm.Humanoid.HumanBones.RightThumbIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightThumbDistal: vrm.Humanoid.HumanBones.RightThumbDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightIndexProximal: vrm.Humanoid.HumanBones.RightIndexProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightIndexIntermediate: vrm.Humanoid.HumanBones.RightIndexIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightIndexDistal: vrm.Humanoid.HumanBones.RightIndexDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightMiddleProximal: vrm.Humanoid.HumanBones.RightMiddleProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightMiddleIntermediate: vrm.Humanoid.HumanBones.RightMiddleIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightMiddleDistal: vrm.Humanoid.HumanBones.RightMiddleDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightRingProximal: vrm.Humanoid.HumanBones.RightRingProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightRingIntermediate: vrm.Humanoid.HumanBones.RightRingIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightRingDistal: vrm.Humanoid.HumanBones.RightRingDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightLittleProximal: vrm.Humanoid.HumanBones.RightLittleProximal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightLittleIntermediate: vrm.Humanoid.HumanBones.RightLittleIntermediate = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + + case HumanoidBones.rightLittleDistal: vrm.Humanoid.HumanBones.RightLittleDistal = new UniGLTF.Extensions.VRMC_vrm.HumanBone { Node = i }; break; + } + } + + // meta + + // expression + + // lookAt + + // firstPerson + + UniGLTF.Extensions.VRMC_vrm.GltfSerializer.SerializeTo(ref exporter.Storage.Gltf.extensions, vrm); + } + { + // springBone + } + { + // constraint + } var exportedBytes = exporter.Storage.ToBytes(); @@ -353,7 +508,7 @@ namespace UniVRM10 static string ToAssetPath(string path) { - var assetPath = UnityPath.FromFullpath(path); + var assetPath = UniGLTF.UnityPath.FromFullpath(path); return assetPath.Value; } } diff --git a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs index 486390cc1..3d3e6d280 100644 --- a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs +++ b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs @@ -18,17 +18,10 @@ namespace UniVRM10 UniGLTF.Extensions.VRMC_vrm.VRMC_vrm m_vrm; - List<(string, UnityEngine.Object)> m_external = new List<(string, UnityEngine.Object)>(); - public RuntimeUnityBuilder(UniGLTF.GltfParser parser, IEnumerable<(string, UnityEngine.Object)> externalObjectMap = null) : base(parser, externalObjectMap) { m_model = VrmLoader.CreateVrmModel(parser); - if (externalObjectMap != null) - { - m_external.AddRange(externalObjectMap); - } - // for `VRMC_materials_mtoon` this.GltfMaterialImporter.GltfMaterialParamProcessors.Insert(0, Vrm10MToonMaterialImporter.TryCreateParam); @@ -236,17 +229,7 @@ namespace UniVRM10 async Task LoadVrmAsync(IAwaitCaller awaitCaller, VRM10Controller controller, UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm) { // meta - controller.Meta = m_external.Select(x => x.Item2 as VRM10MetaObject).FirstOrDefault(x => x != null); - // external meta != null のとき m_meta は null になる - if (controller.Meta != null) - { - // texture の 取得 - if (Vrm10MToonMaterialImporter.TryGetMetaThumbnailTextureImportParam(Parser, vrm, out VRMShaders.TextureImportParam param)) - { - var texture = await TextureFactory.GetTextureAsync(param); - } - } - else if (vrm.Meta != null) + if (vrm.Meta != null) { var src = vrm.Meta; m_meta = ScriptableObject.CreateInstance(); @@ -286,8 +269,7 @@ namespace UniVRM10 } // expression - controller.Expression.ExpressionAvatar = m_external.Select(x => x.Item2 as VRM10ExpressionAvatar).FirstOrDefault(x => x != null); - if (controller.Expression.ExpressionAvatar == null && vrm.Expressions != null) + if (vrm.Expressions != null) { controller.Expression.ExpressionAvatar = ScriptableObject.CreateInstance(); @@ -299,7 +281,7 @@ namespace UniVRM10 var clip = ScriptableObject.CreateInstance(); clip.Preset = expression.Preset; clip.ExpressionName = expression.Name; - clip.name = expression.ExtractKey(); + clip.name = expression.ExtractName(); clip.IsBinary = expression.IsBinary.GetValueOrDefault(); clip.OverrideBlink = expression.OverrideBlink; clip.OverrideLookAt = expression.OverrideLookAt; @@ -573,15 +555,12 @@ namespace UniVRM10 m_humanoid = null; } - if (m_meta != null) + if (take(m_meta)) { - if (take(m_meta)) - { - m_meta = null; - } + m_meta = null; } - if (m_exressionAvatar != null) + if (m_exressionAvatar != null && m_exressionAvatar.Clips != null) { foreach (var x in m_exressionAvatar.Clips) { diff --git a/Assets/VRM10/Runtime/IO/Vrm10MToonMaterialImporter.cs b/Assets/VRM10/Runtime/IO/Vrm10MToonMaterialImporter.cs index de563072c..00695284c 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10MToonMaterialImporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10MToonMaterialImporter.cs @@ -214,7 +214,7 @@ namespace UniVRM10 /// public static bool TryGetMetaThumbnailTextureImportParam(GltfParser parser, UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm, out TextureImportParam value) { - if (!vrm.Meta.ThumbnailImage.HasValue) + if (vrm?.Meta == null || !vrm.Meta.ThumbnailImage.HasValue) { value = default; return false; diff --git a/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs b/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs new file mode 100644 index 000000000..cdbab35a9 --- /dev/null +++ b/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs @@ -0,0 +1,272 @@ +using System; +// using System.Collections.Generic; +using System.Linq; +using UniGLTF; +using UniGLTF.ShaderPropExporter; +using UnityEngine; +using VRMShaders; + +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) + { + return base.ExportMaterial(m, textureExporter); + } + + var material = new glTFMaterial + { + name = m.name, + + emissiveFactor = new float[] { 0, 0, 0 }, + }; + + // default values + var mtoon = new UniGLTF.Extensions.VRMC_materials_mtoon.VRMC_materials_mtoon + { + Version = "", + + TransparentWithZWrite = false, + + RenderQueueOffsetNumber = 0, + + ShadeFactor = new float[] { 0, 0, 0 }, + + // ShadeMultiplyTexture; + + // Lighting + ShadingShiftFactor = 0, + + ShadingToonyFactor = 0, + + LightColorAttenuationFactor = 0, + + GiIntensityFactor = 0, + + // MatCap + // AdditiveTexture; + + // Rim + RimFactor = new float[] { 0, 0, 0 }, + + // public int? RimMultiplyTexture; + + RimLightingMixFactor = 0, + + RimFresnelPowerFactor = 0, + + RimLiftFactor = 0, + + // Outline + OutlineWidthMode = UniGLTF.Extensions.VRMC_materials_mtoon.OutlineWidthMode.none, + + OutlineWidthFactor = 0, + + // public int? OutlineWidthMultiplyTexture; + + OutlineScaledMaxDistanceFactor = 0, + + OutlineColorMode = UniGLTF.Extensions.VRMC_materials_mtoon.OutlineColorMode.fixedColor, + + OutlineFactor = new float[] { 0, 0, 0 }, + + OutlineLightingMixFactor = 0, + + // public int? UvAnimationMaskTexture; + + UvAnimationScrollXSpeedFactor = 0, + + UvAnimationScrollYSpeedFactor = 0, + + 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/Vrm10ExporterExtensions.cs.meta b/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs.meta similarity index 83% rename from Assets/VRM10/Runtime/IO/Vrm10ExporterExtensions.cs.meta rename to Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs.meta index 88fdbfa52..cb3f26adf 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10ExporterExtensions.cs.meta +++ b/Assets/VRM10/Runtime/IO/Vrm10MaterialExporter.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 984cd6e6d31fcc348a71adee5a752400 +guid: f6eeec83f2a72884dae19571cf1d749b MonoImporter: externalObjects: {} serializedVersion: 2