From 07729d8f9c27cd3ee179683ef3e698d80e2dfb78 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Fri, 20 Nov 2020 19:06:17 +0900 Subject: [PATCH] VRMSerializerGenerator --- .../Serialization/SerializerGenerator.cs | 33 +- .../KHR_texture_transform.cs | 2 +- .../ExtensionsAndExtras/gltfExtension.cs | 26 +- .../gltf_mesh_extras_targetNames.cs | 2 +- Assets/VRM/UniGLTF/Scripts/Format/glTF.cs | 1 + .../Scripts/IO/FormatterExtensionsGltf.g.cs | 428 ++++++++-- .../VRM/UniJSON/Scripts/Json/JsonFormatter.cs | 6 + .../UniVRM/Editor/VRMSerializerGenerator.cs | 296 +++++++ .../Editor/VRMSerializerGenerator.cs.meta | 11 + .../VRM/UniVRM/Scripts/Format/VRMExporter.cs | 8 +- .../Format/VRMFormatterExtensionsGltf.g.cs | 797 ++++++++++++++++++ .../VRMFormatterExtensionsGltf.g.cs.meta | 11 + 12 files changed, 1540 insertions(+), 81 deletions(-) create mode 100644 Assets/VRM/UniVRM/Editor/VRMSerializerGenerator.cs create mode 100644 Assets/VRM/UniVRM/Editor/VRMSerializerGenerator.cs.meta create mode 100644 Assets/VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs create mode 100644 Assets/VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs.meta diff --git a/Assets/VRM/UniGLTF/Editor/Serialization/SerializerGenerator.cs b/Assets/VRM/UniGLTF/Editor/Serialization/SerializerGenerator.cs index 7d0964b5d..a50260348 100644 --- a/Assets/VRM/UniGLTF/Editor/Serialization/SerializerGenerator.cs +++ b/Assets/VRM/UniGLTF/Editor/Serialization/SerializerGenerator.cs @@ -81,7 +81,6 @@ namespace UniGLTF {"gltf/meshes[]/primitives[]/attributes/JOINTS_0", "if(value.JOINTS_0!=-1)"}, {"gltf/meshes[]/primitives[]/attributes/WEIGHTS_0", "if(value.WEIGHTS_0!=-1)"}, - {"gltf/meshes[]/primitives[]/extras", "if(value.extras!=null && value.extras.targetNames!=null && value.extras.targetNames.Count>0)"}, {"gltf/meshes[]/weights", "if(value.weights!=null && value.weights.Length>0)" }, {"gltf/materials", "if(value.materials!=null && value.materials.Count>0)" }, {"gltf/materials[]/alphaCutoff", "if(value.alphaMode == \"MASK\")" }, @@ -154,14 +153,16 @@ namespace UniGLTF { } m_used.Add(t); + // // primitive + // try { - var mi = typeof(IFormatter).GetMethod("Value", new Type[] { t }); + var mi = typeof(JsonFormatter).GetMethod("Value", new Type[] { t }); if (mi != null) { m_w.Write(@" - public static void GenSerialize(this IFormatter f, $0 value) + public static void GenSerialize(this JsonFormatter f, $0 value) { f.Value(value); } @@ -177,8 +178,11 @@ namespace UniGLTF { if (t.IsEnum) { + // + // enum + // m_w.Write(@" - public static void GenSerialize(this IFormatter f, $0 value) + public static void GenSerialize(this JsonFormatter f, $0 value) { f.Value((int)value); } @@ -189,7 +193,7 @@ namespace UniGLTF { var et = t.GetElementType(); m_w.Write(@" /// $1 - public static void GenSerialize(this IFormatter f, $0[] value) + public static void GenSerialize(this JsonFormatter f, $0[] value) { f.BeginList(value.Length); foreach (var x in value) @@ -208,10 +212,13 @@ namespace UniGLTF { { if (t.GetGenericTypeDefinition() == typeof(List<>)) { + // + // array + // var et = t.GetGenericArguments()[0]; m_w.Write(@" /// $1 - public static void GenSerialize(this IFormatter f, List<$0> value) + public static void GenSerialize(this JsonFormatter f, List<$0> value) { f.BeginList(value.Count); foreach (var x in value) @@ -228,10 +235,13 @@ namespace UniGLTF { else if (t.GetGenericTypeDefinition() == typeof(Dictionary<,>) && t.GetGenericArguments()[0] == typeof(string)) { + // + // object + // var et = t.GetGenericArguments()[1]; m_w.Write(@" /// $1 - public static void GenSerialize(this IFormatter f, Dictionary value) + public static void GenSerialize(this JsonFormatter f, Dictionary value) { f.BeginMap(value.Count); foreach (var kv in value) @@ -252,13 +262,20 @@ namespace UniGLTF { Debug.LogWarningFormat("unknown type: {0}", t); } } + else if (t == typeof(glTFExtension)) + { + // skip + } else { + // + // reflection + // Debug.LogFormat("{0}({1})", path, t.Name); m_w.Write(@" /// $1 - public static void GenSerialize(this IFormatter f, $0 value) + public static void GenSerialize(this JsonFormatter f, $0 value) { f.BeginMap(0); // dummy " diff --git a/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/KHR_texture_transform.cs b/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/KHR_texture_transform.cs index c23ad460d..8e4dbd4a3 100644 --- a/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/KHR_texture_transform.cs +++ b/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/KHR_texture_transform.cs @@ -111,7 +111,7 @@ namespace UniGLTF f.EndMap(); - info.extensions.Serialized.Add(ExtensionName, f.GetStore().ToString()); + info.extensions.Serialized.Add(ExtensionName, f.GetStore().Bytes); } } } diff --git a/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/gltfExtension.cs b/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/gltfExtension.cs index a8a994439..6efc2b539 100644 --- a/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/gltfExtension.cs +++ b/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/gltfExtension.cs @@ -1,4 +1,6 @@ +using System; using System.Collections.Generic; +using System.Text; using UniJSON; namespace UniGLTF @@ -8,16 +10,19 @@ namespace UniGLTF /// public class glTFExtension { + // NO BOM + static Encoding Utf8 = new UTF8Encoding(false); + #region for Export - public readonly Dictionary Serialized; + public readonly Dictionary> Serialized; public glTFExtension() { - Serialized = new Dictionary(); + Serialized = new Dictionary>(); } public static glTFExtension Create(string key, string serialized) { var e = new glTFExtension(); - e.Serialized.Add(key, serialized); + e.Serialized.Add(key, new ArraySegment(Utf8.GetBytes(serialized))); return e; } #endregion @@ -41,4 +46,19 @@ namespace UniGLTF } #endregion } + + public static class GltfExtensionFormatterExtensions + { + public static void GenSerialize(this JsonFormatter f, glTFExtension v) + { + //CommaCheck(); + f.BeginMap(); + foreach (var kv in v.Serialized) + { + f.Key(kv.Key); + f.Raw(kv.Value); + } + f.EndMap(); + } + } } diff --git a/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/gltf_mesh_extras_targetNames.cs b/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/gltf_mesh_extras_targetNames.cs index bccde0051..ccc02c4c4 100644 --- a/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/gltf_mesh_extras_targetNames.cs +++ b/Assets/VRM/UniGLTF/Scripts/Format/ExtensionsAndExtras/gltf_mesh_extras_targetNames.cs @@ -83,7 +83,7 @@ namespace UniGLTF f.Value(n); } f.EndList(); - var targetNamesJson = f.GetStore().ToString(); + var targetNamesJson = f.GetStore().Bytes; if (gltfMesh.extras == null) { diff --git a/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs b/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs index 07c181cdb..bb6a83aab 100644 --- a/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs +++ b/Assets/VRM/UniGLTF/Scripts/Format/glTF.cs @@ -381,6 +381,7 @@ namespace UniGLTF { var f = new JsonFormatter(); f.GenSerialize(this); + var json = f.ToString().ParseAsJson().ToString(" "); RemoveUnusedExtensions(json); diff --git a/Assets/VRM/UniGLTF/Scripts/IO/FormatterExtensionsGltf.g.cs b/Assets/VRM/UniGLTF/Scripts/IO/FormatterExtensionsGltf.g.cs index c54748b36..a17ad7ab8 100644 --- a/Assets/VRM/UniGLTF/Scripts/IO/FormatterExtensionsGltf.g.cs +++ b/Assets/VRM/UniGLTF/Scripts/IO/FormatterExtensionsGltf.g.cs @@ -10,13 +10,9 @@ namespace UniGLTF { static public class IFormatterExtensionsGltf { - public static void GenSerialize(this IFormatter f, glTF_VRM_extensions value) - { - - } - + /// gltf - public static void GenSerialize(this IFormatter f, glTF value) + public static void GenSerialize(this JsonFormatter f, glTF value) { f.BeginMap(0); // dummy @@ -105,11 +101,21 @@ namespace UniGLTF { f.Key("extensionsRequired"); f.GenSerialize(value.extensionsRequired); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/asset - public static void GenSerialize(this IFormatter f, glTFAssets value) + public static void GenSerialize(this JsonFormatter f, glTFAssets value) { f.BeginMap(0); // dummy @@ -133,16 +139,26 @@ namespace UniGLTF { f.Key("minVersion"); f.GenSerialize(value.minVersion); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } - public static void GenSerialize(this IFormatter f, String value) + public static void GenSerialize(this JsonFormatter f, String value) { f.Value(value); } /// gltf/buffers - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -153,7 +169,7 @@ namespace UniGLTF { } /// gltf/buffers[] - public static void GenSerialize(this IFormatter f, glTFBuffer value) + public static void GenSerialize(this JsonFormatter f, glTFBuffer value) { f.BeginMap(0); // dummy @@ -167,6 +183,16 @@ namespace UniGLTF { f.Key("byteLength"); f.GenSerialize(value.byteLength); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + if(value.name!=null) { f.Key("name"); f.GenSerialize(value.name); @@ -175,13 +201,13 @@ namespace UniGLTF { f.EndMap(); } - public static void GenSerialize(this IFormatter f, Int32 value) + public static void GenSerialize(this JsonFormatter f, Int32 value) { f.Value(value); } /// gltf/bufferViews - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -192,7 +218,7 @@ namespace UniGLTF { } /// gltf/bufferViews[] - public static void GenSerialize(this IFormatter f, glTFBufferView value) + public static void GenSerialize(this JsonFormatter f, glTFBufferView value) { f.BeginMap(0); // dummy @@ -216,6 +242,16 @@ namespace UniGLTF { f.Key("target"); f.GenSerialize(value.target); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + if(value.name!=null) { f.Key("name"); f.GenSerialize(value.name); @@ -224,13 +260,13 @@ namespace UniGLTF { f.EndMap(); } - public static void GenSerialize(this IFormatter f, glBufferTarget value) + public static void GenSerialize(this JsonFormatter f, glBufferTarget value) { f.Value((int)value); } /// gltf/accessors - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -241,7 +277,7 @@ namespace UniGLTF { } /// gltf/accessors[] - public static void GenSerialize(this IFormatter f, glTFAccessor value) + public static void GenSerialize(this JsonFormatter f, glTFAccessor value) { f.BeginMap(0); // dummy @@ -295,16 +331,26 @@ namespace UniGLTF { f.Key("name"); f.GenSerialize(value.name); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } - public static void GenSerialize(this IFormatter f, glComponentType value) + public static void GenSerialize(this JsonFormatter f, glComponentType value) { f.Value((int)value); } /// gltf/accessors[]/max - public static void GenSerialize(this IFormatter f, Single[] value) + public static void GenSerialize(this JsonFormatter f, Single[] value) { f.BeginList(value.Length); foreach (var x in value) @@ -314,18 +360,18 @@ namespace UniGLTF { f.EndList(); } - public static void GenSerialize(this IFormatter f, Single value) + public static void GenSerialize(this JsonFormatter f, Single value) { f.Value(value); } - public static void GenSerialize(this IFormatter f, Boolean value) + public static void GenSerialize(this JsonFormatter f, Boolean value) { f.Value(value); } /// gltf/accessors[]/sparse - public static void GenSerialize(this IFormatter f, glTFSparse value) + public static void GenSerialize(this JsonFormatter f, glTFSparse value) { f.BeginMap(0); // dummy @@ -344,11 +390,21 @@ namespace UniGLTF { f.Key("values"); f.GenSerialize(value.values); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/accessors[]/sparse/indices - public static void GenSerialize(this IFormatter f, glTFSparseIndices value) + public static void GenSerialize(this JsonFormatter f, glTFSparseIndices value) { f.BeginMap(0); // dummy @@ -367,11 +423,21 @@ namespace UniGLTF { f.Key("componentType"); f.GenSerialize(value.componentType); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/accessors[]/sparse/values - public static void GenSerialize(this IFormatter f, glTFSparseValues value) + public static void GenSerialize(this JsonFormatter f, glTFSparseValues value) { f.BeginMap(0); // dummy @@ -385,11 +451,21 @@ namespace UniGLTF { f.Key("byteOffset"); f.GenSerialize(value.byteOffset); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/textures - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -400,7 +476,7 @@ namespace UniGLTF { } /// gltf/textures[] - public static void GenSerialize(this IFormatter f, glTFTexture value) + public static void GenSerialize(this JsonFormatter f, glTFTexture value) { f.BeginMap(0); // dummy @@ -414,6 +490,16 @@ namespace UniGLTF { f.Key("source"); f.GenSerialize(value.source); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + if(value.name!=null) { f.Key("name"); f.GenSerialize(value.name); @@ -423,7 +509,7 @@ namespace UniGLTF { } /// gltf/samplers - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -434,7 +520,7 @@ namespace UniGLTF { } /// gltf/samplers[] - public static void GenSerialize(this IFormatter f, glTFTextureSampler value) + public static void GenSerialize(this JsonFormatter f, glTFTextureSampler value) { f.BeginMap(0); // dummy @@ -458,6 +544,16 @@ namespace UniGLTF { f.Key("wrapT"); f.GenSerialize(value.wrapT); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + if(value.name!=null) { f.Key("name"); f.GenSerialize(value.name); @@ -466,18 +562,18 @@ namespace UniGLTF { f.EndMap(); } - public static void GenSerialize(this IFormatter f, glFilter value) + public static void GenSerialize(this JsonFormatter f, glFilter value) { f.Value((int)value); } - public static void GenSerialize(this IFormatter f, glWrap value) + public static void GenSerialize(this JsonFormatter f, glWrap value) { f.Value((int)value); } /// gltf/images - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -488,7 +584,7 @@ namespace UniGLTF { } /// gltf/images[] - public static void GenSerialize(this IFormatter f, glTFImage value) + public static void GenSerialize(this JsonFormatter f, glTFImage value) { f.BeginMap(0); // dummy @@ -512,11 +608,21 @@ namespace UniGLTF { f.Key("mimeType"); f.GenSerialize(value.mimeType); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/materials - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -527,7 +633,7 @@ namespace UniGLTF { } /// gltf/materials[] - public static void GenSerialize(this IFormatter f, glTFMaterial value) + public static void GenSerialize(this JsonFormatter f, glTFMaterial value) { f.BeginMap(0); // dummy @@ -576,11 +682,21 @@ namespace UniGLTF { f.Key("doubleSided"); f.GenSerialize(value.doubleSided); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/materials[]/pbrMetallicRoughness - public static void GenSerialize(this IFormatter f, glTFPbrMetallicRoughness value) + public static void GenSerialize(this JsonFormatter f, glTFPbrMetallicRoughness value) { f.BeginMap(0); // dummy @@ -609,11 +725,21 @@ namespace UniGLTF { f.Key("roughnessFactor"); f.GenSerialize(value.roughnessFactor); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/materials[]/pbrMetallicRoughness/baseColorTexture - public static void GenSerialize(this IFormatter f, glTFMaterialBaseColorTextureInfo value) + public static void GenSerialize(this JsonFormatter f, glTFMaterialBaseColorTextureInfo value) { f.BeginMap(0); // dummy @@ -627,11 +753,21 @@ namespace UniGLTF { f.Key("texCoord"); f.GenSerialize(value.texCoord); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/materials[]/pbrMetallicRoughness/metallicRoughnessTexture - public static void GenSerialize(this IFormatter f, glTFMaterialMetallicRoughnessTextureInfo value) + public static void GenSerialize(this JsonFormatter f, glTFMaterialMetallicRoughnessTextureInfo value) { f.BeginMap(0); // dummy @@ -645,11 +781,21 @@ namespace UniGLTF { f.Key("texCoord"); f.GenSerialize(value.texCoord); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/materials[]/normalTexture - public static void GenSerialize(this IFormatter f, glTFMaterialNormalTextureInfo value) + public static void GenSerialize(this JsonFormatter f, glTFMaterialNormalTextureInfo value) { f.BeginMap(0); // dummy @@ -668,11 +814,21 @@ namespace UniGLTF { f.Key("texCoord"); f.GenSerialize(value.texCoord); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/materials[]/occlusionTexture - public static void GenSerialize(this IFormatter f, glTFMaterialOcclusionTextureInfo value) + public static void GenSerialize(this JsonFormatter f, glTFMaterialOcclusionTextureInfo value) { f.BeginMap(0); // dummy @@ -691,11 +847,21 @@ namespace UniGLTF { f.Key("texCoord"); f.GenSerialize(value.texCoord); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/materials[]/emissiveTexture - public static void GenSerialize(this IFormatter f, glTFMaterialEmissiveTextureInfo value) + public static void GenSerialize(this JsonFormatter f, glTFMaterialEmissiveTextureInfo value) { f.BeginMap(0); // dummy @@ -709,11 +875,21 @@ namespace UniGLTF { f.Key("texCoord"); f.GenSerialize(value.texCoord); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/meshes - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -724,7 +900,7 @@ namespace UniGLTF { } /// gltf/meshes[] - public static void GenSerialize(this IFormatter f, glTFMesh value) + public static void GenSerialize(this JsonFormatter f, glTFMesh value) { f.BeginMap(0); // dummy @@ -743,11 +919,21 @@ namespace UniGLTF { f.Key("weights"); f.GenSerialize(value.weights); } + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + f.EndMap(); } /// gltf/meshes[]/primitives - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -758,7 +944,7 @@ namespace UniGLTF { } /// gltf/meshes[]/primitives[] - public static void GenSerialize(this IFormatter f, glTFPrimitives value) + public static void GenSerialize(this JsonFormatter f, glTFPrimitives value) { f.BeginMap(0); // dummy @@ -787,11 +973,21 @@ namespace UniGLTF { f.Key("targets"); f.GenSerialize(value.targets); } + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + f.EndMap(); } /// gltf/meshes[]/primitives[]/attributes - public static void GenSerialize(this IFormatter f, glTFAttributes value) + public static void GenSerialize(this JsonFormatter f, glTFAttributes value) { f.BeginMap(0); // dummy @@ -839,7 +1035,7 @@ namespace UniGLTF { } /// gltf/meshes[]/primitives[]/targets - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -850,7 +1046,7 @@ namespace UniGLTF { } /// gltf/meshes[]/primitives[]/targets[] - public static void GenSerialize(this IFormatter f, gltfMorphTarget value) + public static void GenSerialize(this JsonFormatter f, gltfMorphTarget value) { f.BeginMap(0); // dummy @@ -873,7 +1069,7 @@ namespace UniGLTF { } /// gltf/nodes - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -884,7 +1080,7 @@ namespace UniGLTF { } /// gltf/nodes[] - public static void GenSerialize(this IFormatter f, glTFNode value) + public static void GenSerialize(this JsonFormatter f, glTFNode value) { f.BeginMap(0); // dummy @@ -938,11 +1134,21 @@ namespace UniGLTF { f.Key("camera"); f.GenSerialize(value.camera); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/nodes[]/children - public static void GenSerialize(this IFormatter f, Int32[] value) + public static void GenSerialize(this JsonFormatter f, Int32[] value) { f.BeginList(value.Length); foreach (var x in value) @@ -953,7 +1159,7 @@ namespace UniGLTF { } /// gltf/skins - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -964,7 +1170,7 @@ namespace UniGLTF { } /// gltf/skins[] - public static void GenSerialize(this IFormatter f, glTFSkin value) + public static void GenSerialize(this JsonFormatter f, glTFSkin value) { f.BeginMap(0); // dummy @@ -983,6 +1189,16 @@ namespace UniGLTF { f.Key("skeleton"); f.GenSerialize(value.skeleton); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + if(value.name!=null) { f.Key("name"); f.GenSerialize(value.name); @@ -992,7 +1208,7 @@ namespace UniGLTF { } /// gltf/scenes - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -1003,7 +1219,7 @@ namespace UniGLTF { } /// gltf/scenes[] - public static void GenSerialize(this IFormatter f, gltfScene value) + public static void GenSerialize(this JsonFormatter f, gltfScene value) { f.BeginMap(0); // dummy @@ -1012,6 +1228,16 @@ namespace UniGLTF { f.Key("nodes"); f.GenSerialize(value.nodes); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + if(value.name!=null) { f.Key("name"); f.GenSerialize(value.name); @@ -1021,7 +1247,7 @@ namespace UniGLTF { } /// gltf/animations - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -1032,7 +1258,7 @@ namespace UniGLTF { } /// gltf/animations[] - public static void GenSerialize(this IFormatter f, glTFAnimation value) + public static void GenSerialize(this JsonFormatter f, glTFAnimation value) { f.BeginMap(0); // dummy @@ -1051,11 +1277,21 @@ namespace UniGLTF { f.Key("samplers"); f.GenSerialize(value.samplers); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/animations[]/channels - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -1066,7 +1302,7 @@ namespace UniGLTF { } /// gltf/animations[]/channels[] - public static void GenSerialize(this IFormatter f, glTFAnimationChannel value) + public static void GenSerialize(this JsonFormatter f, glTFAnimationChannel value) { f.BeginMap(0); // dummy @@ -1080,11 +1316,21 @@ namespace UniGLTF { f.Key("target"); f.GenSerialize(value.target); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/animations[]/channels[]/target - public static void GenSerialize(this IFormatter f, glTFAnimationTarget value) + public static void GenSerialize(this JsonFormatter f, glTFAnimationTarget value) { f.BeginMap(0); // dummy @@ -1098,11 +1344,21 @@ namespace UniGLTF { f.Key("path"); f.GenSerialize(value.path); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/animations[]/samplers - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -1113,7 +1369,7 @@ namespace UniGLTF { } /// gltf/animations[]/samplers[] - public static void GenSerialize(this IFormatter f, glTFAnimationSampler value) + public static void GenSerialize(this JsonFormatter f, glTFAnimationSampler value) { f.BeginMap(0); // dummy @@ -1132,11 +1388,21 @@ namespace UniGLTF { f.Key("output"); f.GenSerialize(value.output); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/cameras - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) @@ -1147,7 +1413,7 @@ namespace UniGLTF { } /// gltf/cameras[] - public static void GenSerialize(this IFormatter f, glTFCamera value) + public static void GenSerialize(this JsonFormatter f, glTFCamera value) { f.BeginMap(0); // dummy @@ -1171,11 +1437,21 @@ namespace UniGLTF { f.Key("name"); f.GenSerialize(value.name); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/cameras[]/orthographic - public static void GenSerialize(this IFormatter f, glTFOrthographic value) + public static void GenSerialize(this JsonFormatter f, glTFOrthographic value) { f.BeginMap(0); // dummy @@ -1199,11 +1475,21 @@ namespace UniGLTF { f.Key("znear"); f.GenSerialize(value.znear); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } /// gltf/cameras[]/perspective - public static void GenSerialize(this IFormatter f, glTFPerspective value) + public static void GenSerialize(this JsonFormatter f, glTFPerspective value) { f.BeginMap(0); // dummy @@ -1227,16 +1513,26 @@ namespace UniGLTF { f.Key("znear"); f.GenSerialize(value.znear); } + if(value.extensions!=null) + { + f.Key("extensions"); f.GenSerialize(value.extensions); + } + + if(value.extras!=null) + { + f.Key("extras"); f.GenSerialize(value.extras); + } + f.EndMap(); } - public static void GenSerialize(this IFormatter f, ProjectionType value) + public static void GenSerialize(this JsonFormatter f, ProjectionType value) { f.Value((int)value); } /// gltf/extensionsUsed - public static void GenSerialize(this IFormatter f, List value) + public static void GenSerialize(this JsonFormatter f, List value) { f.BeginList(value.Count); foreach (var x in value) diff --git a/Assets/VRM/UniJSON/Scripts/Json/JsonFormatter.cs b/Assets/VRM/UniJSON/Scripts/Json/JsonFormatter.cs index edfc41a98..c56b5582a 100644 --- a/Assets/VRM/UniJSON/Scripts/Json/JsonFormatter.cs +++ b/Assets/VRM/UniJSON/Scripts/Json/JsonFormatter.cs @@ -266,6 +266,12 @@ namespace UniJSON m_w.Write('"'); } + public void Raw(ArraySegment x) + { + CommaCheck(); + m_w.Write(x); + } + // ISO-8601: YYYY-MM-DD“T”hh:mm:ss“Z” public void Value(DateTimeOffset x) { diff --git a/Assets/VRM/UniVRM/Editor/VRMSerializerGenerator.cs b/Assets/VRM/UniVRM/Editor/VRMSerializerGenerator.cs new file mode 100644 index 000000000..f42de27e0 --- /dev/null +++ b/Assets/VRM/UniVRM/Editor/VRMSerializerGenerator.cs @@ -0,0 +1,296 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using UniGLTF; +using UniJSON; +using UnityEditor; +using UnityEngine; + +namespace VRM +{ + public static class VRMSerializerGenerator + { + const BindingFlags FIELD_FLAGS = BindingFlags.Instance | BindingFlags.Public; + + static string OutPath + { + get + { + return Path.Combine(UnityEngine.Application.dataPath, + "VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs"); + } + } + + /// + /// AOT向けにシリアライザを生成する + /// + [MenuItem(VRM.VRMVersion.MENU + "/VRM: Generate Serializer")] + static void GenerateSerializer() + { + var path = OutPath; + + using (var g = new Generator(path)) + { + var rootType = typeof(glTF_VRM_extensions); + g.Generate(rootType, "vrm"); + } + } + + class Generator : IDisposable + { + String m_path; + Stream m_s; + StreamWriter m_w; + + static Dictionary s_snippets = new Dictionary + { + {"vrm/humanoid/humanBones[]/axisLength", "if(value.axisLength>0)"}, + {"vrm/humanoid/humanBones[]/center", "if(value.center!=Vector3.zero)"}, + {"vrm/humanoid/humanBones[]/max", "if(value.max!=Vector3.zero)"}, + {"vrm/humanoid/humanBones[]/min", "if(value.min!=Vector3.zero)"}, + }; + + public Generator(string path) + { + m_path = path; + m_s = File.Open(path, FileMode.Create); + m_w = new StreamWriter(m_s, Encoding.UTF8); + + // begin + m_w.Write(@" +using System; +using System.Collections.Generic; +using UniJSON; +using UnityEngine; +using VRM; + +namespace VRM { + + static public class IFormatterExtensionsGltf + { + +"); + } + + public void Dispose() + { + // end + m_w.Write(@" + } // class +} // namespace +"); + + m_w.Dispose(); + m_s.Dispose(); + UnityPath.FromFullpath(m_path).ImportAsset(); + } + + HashSet m_used = new HashSet + { + typeof(object), + }; + + public void Generate(Type t, string path, int level = 0) + { + if (m_used.Contains(t)) + { + // 処理済み + return; + } + m_used.Add(t); + + // + // primitive + // + try + { + var mi = typeof(JsonFormatter).GetMethod("Value", new Type[] { t }); + if (mi != null) + { + m_w.Write(@" + public static void GenSerialize(this JsonFormatter f, $0 value) + { + f.Value(value); + } +".Replace("$0", t.Name)); + + return; + } + } + catch (AmbiguousMatchException) + { + // skip + } + + if (t.IsEnum) + { + // + // enum + // + m_w.Write(@" + public static void GenSerialize(this JsonFormatter f, $0 value) + { + f.Value((int)value); + } +".Replace("$0", t.Name)); + } + else if (t.IsArray) + { + var et = t.GetElementType(); + m_w.Write(@" + /// $1 + public static void GenSerialize(this JsonFormatter f, $0[] value) + { + f.BeginList(value.Length); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + " + .Replace("$0", et.Name) + .Replace("$1", path) + ); + Generate(et, path + "[]", level + 1); + } + else if (t.IsGenericType) + { + if (t.GetGenericTypeDefinition() == typeof(List<>)) + { + // + // array + // + var et = t.GetGenericArguments()[0]; + m_w.Write(@" + /// $1 + public static void GenSerialize(this JsonFormatter f, List<$0> value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } +" +.Replace("$0", et.Name) +.Replace("$1", path)); + Generate(et, path + "[]", level + 1); + } + else if (t.GetGenericTypeDefinition() == typeof(Dictionary<,>) + && t.GetGenericArguments()[0] == typeof(string)) + { + // + // object + // + var et = t.GetGenericArguments()[1]; + m_w.Write(@" + /// $1 + public static void GenSerialize(this JsonFormatter f, Dictionary value) + { + f.BeginMap(value.Count); + foreach (var kv in value) + { + f.Key(kv.Key); + f.GenSerialize(kv.Value); + } + f.EndMap(); + } + +" +.Replace("$0", et.Name) +.Replace("$1", path)); + Generate(et, path + "{}", level + 1); + } + else + { + Debug.LogWarningFormat("unknown type: {0}", t); + } + } + else if (t == typeof(glTFExtension)) + { + // skip + } + else + { + // + // reflection + // + Debug.LogFormat("{0}({1})", path, t.Name); + + m_w.Write(@" + /// $1 + public static void GenSerialize(this JsonFormatter f, $0 value) + { + f.BeginMap(0); // dummy +" +.Replace("$0", t.Name) +.Replace("$1", path) +); + + foreach (var fi in t.GetFields(FIELD_FLAGS)) + { + if (fi.FieldType == typeof(object)) + { + continue; + } + if (fi.IsLiteral && !fi.IsInitOnly) + { + continue; + } + if (fi.FieldType == typeof(string) || fi.FieldType.IsEnum || fi.FieldType.IsArray || fi.FieldType.IsGenericType) + { + + } + else if (fi.FieldType == typeof(glTF_KHR_materials_unlit)) + { + + } + else if (fi.FieldType.IsClass && fi.FieldType.GetFields(FIELD_FLAGS).Length == 0) + { + continue; + } + + var snipet = fi.FieldType.IsClass ? "if(value." + fi.Name + "!=null)" : ""; + var value = default(string); + if (s_snippets.TryGetValue(path + "/" + fi.Name, out value)) + { + snipet = value; + } + + if (value == "") + { + // found, but empty + } + else + { + m_w.Write(@" + $1 + { + f.Key(""$0""); f.GenSerialize(value.$0); + } +" + .Replace("$0", fi.Name) + .Replace("$1", snipet) + ); + } + } + + m_w.Write(@" + f.EndMap(); + } +"); + + foreach (var fi in t.GetFields(FIELD_FLAGS)) + { + Generate(fi.FieldType, path + "/" + fi.Name, level + 1); + } + } + } + } + } +} diff --git a/Assets/VRM/UniVRM/Editor/VRMSerializerGenerator.cs.meta b/Assets/VRM/UniVRM/Editor/VRMSerializerGenerator.cs.meta new file mode 100644 index 000000000..5bc512e7f --- /dev/null +++ b/Assets/VRM/UniVRM/Editor/VRMSerializerGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea35ccbf1dc9c654d9b27a2fc54b3f5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VRM/UniVRM/Scripts/Format/VRMExporter.cs b/Assets/VRM/UniVRM/Scripts/Format/VRMExporter.cs index ada6fd4c9..9e694f331 100644 --- a/Assets/VRM/UniVRM/Scripts/Format/VRMExporter.cs +++ b/Assets/VRM/UniVRM/Scripts/Format/VRMExporter.cs @@ -207,8 +207,12 @@ namespace VRM // Serialize VRM var f = new JsonFormatter(); f.GenSerialize(VRM); - var json = f.ToString(); - glTF.extensions = glTFExtension.Create("VRM", json); + if (glTF.extensions == null) + { + glTF.extensions = new glTFExtension(); + } + var bytes = f.GetStoreBytes(); + glTF.extensions.Serialized.Add("VRM", bytes); } } } diff --git a/Assets/VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs b/Assets/VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs new file mode 100644 index 000000000..aa128de95 --- /dev/null +++ b/Assets/VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs @@ -0,0 +1,797 @@ + +using System; +using System.Collections.Generic; +using UniJSON; +using UnityEngine; +using VRM; + +namespace VRM { + + static public class IFormatterExtensionsGltf + { + + + /// vrm + public static void GenSerialize(this JsonFormatter f, glTF_VRM_extensions value) + { + f.BeginMap(0); // dummy + + if(value.exporterVersion!=null) + { + f.Key("exporterVersion"); f.GenSerialize(value.exporterVersion); + } + + if(value.specVersion!=null) + { + f.Key("specVersion"); f.GenSerialize(value.specVersion); + } + + if(value.meta!=null) + { + f.Key("meta"); f.GenSerialize(value.meta); + } + + if(value.humanoid!=null) + { + f.Key("humanoid"); f.GenSerialize(value.humanoid); + } + + if(value.firstPerson!=null) + { + f.Key("firstPerson"); f.GenSerialize(value.firstPerson); + } + + if(value.blendShapeMaster!=null) + { + f.Key("blendShapeMaster"); f.GenSerialize(value.blendShapeMaster); + } + + if(value.secondaryAnimation!=null) + { + f.Key("secondaryAnimation"); f.GenSerialize(value.secondaryAnimation); + } + + if(value.materialProperties!=null) + { + f.Key("materialProperties"); f.GenSerialize(value.materialProperties); + } + + f.EndMap(); + } + + public static void GenSerialize(this JsonFormatter f, String value) + { + f.Value(value); + } + + /// vrm/meta + public static void GenSerialize(this JsonFormatter f, glTF_VRM_Meta value) + { + f.BeginMap(0); // dummy + + if(value.title!=null) + { + f.Key("title"); f.GenSerialize(value.title); + } + + if(value.version!=null) + { + f.Key("version"); f.GenSerialize(value.version); + } + + if(value.author!=null) + { + f.Key("author"); f.GenSerialize(value.author); + } + + if(value.contactInformation!=null) + { + f.Key("contactInformation"); f.GenSerialize(value.contactInformation); + } + + if(value.reference!=null) + { + f.Key("reference"); f.GenSerialize(value.reference); + } + + + { + f.Key("texture"); f.GenSerialize(value.texture); + } + + if(value.allowedUserName!=null) + { + f.Key("allowedUserName"); f.GenSerialize(value.allowedUserName); + } + + if(value.violentUssageName!=null) + { + f.Key("violentUssageName"); f.GenSerialize(value.violentUssageName); + } + + if(value.sexualUssageName!=null) + { + f.Key("sexualUssageName"); f.GenSerialize(value.sexualUssageName); + } + + if(value.commercialUssageName!=null) + { + f.Key("commercialUssageName"); f.GenSerialize(value.commercialUssageName); + } + + if(value.otherPermissionUrl!=null) + { + f.Key("otherPermissionUrl"); f.GenSerialize(value.otherPermissionUrl); + } + + if(value.licenseName!=null) + { + f.Key("licenseName"); f.GenSerialize(value.licenseName); + } + + if(value.otherLicenseUrl!=null) + { + f.Key("otherLicenseUrl"); f.GenSerialize(value.otherLicenseUrl); + } + + f.EndMap(); + } + + public static void GenSerialize(this JsonFormatter f, Int32 value) + { + f.Value(value); + } + + /// vrm/humanoid + public static void GenSerialize(this JsonFormatter f, glTF_VRM_Humanoid value) + { + f.BeginMap(0); // dummy + + if(value.humanBones!=null) + { + f.Key("humanBones"); f.GenSerialize(value.humanBones); + } + + + { + f.Key("armStretch"); f.GenSerialize(value.armStretch); + } + + + { + f.Key("legStretch"); f.GenSerialize(value.legStretch); + } + + + { + f.Key("upperArmTwist"); f.GenSerialize(value.upperArmTwist); + } + + + { + f.Key("lowerArmTwist"); f.GenSerialize(value.lowerArmTwist); + } + + + { + f.Key("upperLegTwist"); f.GenSerialize(value.upperLegTwist); + } + + + { + f.Key("lowerLegTwist"); f.GenSerialize(value.lowerLegTwist); + } + + + { + f.Key("feetSpacing"); f.GenSerialize(value.feetSpacing); + } + + + { + f.Key("hasTranslationDoF"); f.GenSerialize(value.hasTranslationDoF); + } + + f.EndMap(); + } + + /// vrm/humanoid/humanBones + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/humanoid/humanBones[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_HumanoidBone value) + { + f.BeginMap(0); // dummy + + if(value.bone!=null) + { + f.Key("bone"); f.GenSerialize(value.bone); + } + + + { + f.Key("node"); f.GenSerialize(value.node); + } + + + { + f.Key("useDefaultValues"); f.GenSerialize(value.useDefaultValues); + } + + if(value.min!=Vector3.zero) + { + f.Key("min"); f.GenSerialize(value.min); + } + + if(value.max!=Vector3.zero) + { + f.Key("max"); f.GenSerialize(value.max); + } + + if(value.center!=Vector3.zero) + { + f.Key("center"); f.GenSerialize(value.center); + } + + if(value.axisLength>0) + { + f.Key("axisLength"); f.GenSerialize(value.axisLength); + } + + f.EndMap(); + } + + public static void GenSerialize(this JsonFormatter f, Boolean value) + { + f.Value(value); + } + + /// vrm/humanoid/humanBones[]/min + public static void GenSerialize(this JsonFormatter f, Vector3 value) + { + f.BeginMap(0); // dummy + + + { + f.Key("x"); f.GenSerialize(value.x); + } + + + { + f.Key("y"); f.GenSerialize(value.y); + } + + + { + f.Key("z"); f.GenSerialize(value.z); + } + + f.EndMap(); + } + + public static void GenSerialize(this JsonFormatter f, Single value) + { + f.Value(value); + } + + /// vrm/firstPerson + public static void GenSerialize(this JsonFormatter f, glTF_VRM_Firstperson value) + { + f.BeginMap(0); // dummy + + + { + f.Key("firstPersonBone"); f.GenSerialize(value.firstPersonBone); + } + + + { + f.Key("firstPersonBoneOffset"); f.GenSerialize(value.firstPersonBoneOffset); + } + + if(value.meshAnnotations!=null) + { + f.Key("meshAnnotations"); f.GenSerialize(value.meshAnnotations); + } + + if(value.lookAtTypeName!=null) + { + f.Key("lookAtTypeName"); f.GenSerialize(value.lookAtTypeName); + } + + if(value.lookAtHorizontalInner!=null) + { + f.Key("lookAtHorizontalInner"); f.GenSerialize(value.lookAtHorizontalInner); + } + + if(value.lookAtHorizontalOuter!=null) + { + f.Key("lookAtHorizontalOuter"); f.GenSerialize(value.lookAtHorizontalOuter); + } + + if(value.lookAtVerticalDown!=null) + { + f.Key("lookAtVerticalDown"); f.GenSerialize(value.lookAtVerticalDown); + } + + if(value.lookAtVerticalUp!=null) + { + f.Key("lookAtVerticalUp"); f.GenSerialize(value.lookAtVerticalUp); + } + + f.EndMap(); + } + + /// vrm/firstPerson/meshAnnotations + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/firstPerson/meshAnnotations[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_MeshAnnotation value) + { + f.BeginMap(0); // dummy + + + { + f.Key("mesh"); f.GenSerialize(value.mesh); + } + + if(value.firstPersonFlag!=null) + { + f.Key("firstPersonFlag"); f.GenSerialize(value.firstPersonFlag); + } + + f.EndMap(); + } + + /// vrm/firstPerson/lookAtHorizontalInner + public static void GenSerialize(this JsonFormatter f, glTF_VRM_DegreeMap value) + { + f.BeginMap(0); // dummy + + if(value.curve!=null) + { + f.Key("curve"); f.GenSerialize(value.curve); + } + + + { + f.Key("xRange"); f.GenSerialize(value.xRange); + } + + + { + f.Key("yRange"); f.GenSerialize(value.yRange); + } + + f.EndMap(); + } + + /// vrm/firstPerson/lookAtHorizontalInner/curve + public static void GenSerialize(this JsonFormatter f, Single[] value) + { + f.BeginList(value.Length); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/blendShapeMaster + public static void GenSerialize(this JsonFormatter f, glTF_VRM_BlendShapeMaster value) + { + f.BeginMap(0); // dummy + + if(value.blendShapeGroups!=null) + { + f.Key("blendShapeGroups"); f.GenSerialize(value.blendShapeGroups); + } + + f.EndMap(); + } + + /// vrm/blendShapeMaster/blendShapeGroups + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/blendShapeMaster/blendShapeGroups[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_BlendShapeGroup value) + { + f.BeginMap(0); // dummy + + if(value.name!=null) + { + f.Key("name"); f.GenSerialize(value.name); + } + + if(value.presetName!=null) + { + f.Key("presetName"); f.GenSerialize(value.presetName); + } + + if(value.binds!=null) + { + f.Key("binds"); f.GenSerialize(value.binds); + } + + if(value.materialValues!=null) + { + f.Key("materialValues"); f.GenSerialize(value.materialValues); + } + + + { + f.Key("isBinary"); f.GenSerialize(value.isBinary); + } + + f.EndMap(); + } + + /// vrm/blendShapeMaster/blendShapeGroups[]/binds + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/blendShapeMaster/blendShapeGroups[]/binds[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_BlendShapeBind value) + { + f.BeginMap(0); // dummy + + + { + f.Key("mesh"); f.GenSerialize(value.mesh); + } + + + { + f.Key("index"); f.GenSerialize(value.index); + } + + + { + f.Key("weight"); f.GenSerialize(value.weight); + } + + f.EndMap(); + } + + /// vrm/blendShapeMaster/blendShapeGroups[]/materialValues + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/blendShapeMaster/blendShapeGroups[]/materialValues[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_MaterialValueBind value) + { + f.BeginMap(0); // dummy + + if(value.materialName!=null) + { + f.Key("materialName"); f.GenSerialize(value.materialName); + } + + if(value.propertyName!=null) + { + f.Key("propertyName"); f.GenSerialize(value.propertyName); + } + + if(value.targetValue!=null) + { + f.Key("targetValue"); f.GenSerialize(value.targetValue); + } + + f.EndMap(); + } + + /// vrm/secondaryAnimation + public static void GenSerialize(this JsonFormatter f, glTF_VRM_SecondaryAnimation value) + { + f.BeginMap(0); // dummy + + if(value.boneGroups!=null) + { + f.Key("boneGroups"); f.GenSerialize(value.boneGroups); + } + + if(value.colliderGroups!=null) + { + f.Key("colliderGroups"); f.GenSerialize(value.colliderGroups); + } + + f.EndMap(); + } + + /// vrm/secondaryAnimation/boneGroups + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/secondaryAnimation/boneGroups[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_SecondaryAnimationGroup value) + { + f.BeginMap(0); // dummy + + if(value.comment!=null) + { + f.Key("comment"); f.GenSerialize(value.comment); + } + + + { + f.Key("stiffiness"); f.GenSerialize(value.stiffiness); + } + + + { + f.Key("gravityPower"); f.GenSerialize(value.gravityPower); + } + + + { + f.Key("gravityDir"); f.GenSerialize(value.gravityDir); + } + + + { + f.Key("dragForce"); f.GenSerialize(value.dragForce); + } + + + { + f.Key("center"); f.GenSerialize(value.center); + } + + + { + f.Key("hitRadius"); f.GenSerialize(value.hitRadius); + } + + if(value.bones!=null) + { + f.Key("bones"); f.GenSerialize(value.bones); + } + + if(value.colliderGroups!=null) + { + f.Key("colliderGroups"); f.GenSerialize(value.colliderGroups); + } + + f.EndMap(); + } + + /// vrm/secondaryAnimation/boneGroups[]/bones + public static void GenSerialize(this JsonFormatter f, Int32[] value) + { + f.BeginList(value.Length); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/secondaryAnimation/colliderGroups + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/secondaryAnimation/colliderGroups[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_SecondaryAnimationColliderGroup value) + { + f.BeginMap(0); // dummy + + + { + f.Key("node"); f.GenSerialize(value.node); + } + + if(value.colliders!=null) + { + f.Key("colliders"); f.GenSerialize(value.colliders); + } + + f.EndMap(); + } + + /// vrm/secondaryAnimation/colliderGroups[]/colliders + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/secondaryAnimation/colliderGroups[]/colliders[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_SecondaryAnimationCollider value) + { + f.BeginMap(0); // dummy + + + { + f.Key("offset"); f.GenSerialize(value.offset); + } + + + { + f.Key("radius"); f.GenSerialize(value.radius); + } + + f.EndMap(); + } + + /// vrm/materialProperties + public static void GenSerialize(this JsonFormatter f, List value) + { + f.BeginList(value.Count); + foreach (var x in value) + { + f.GenSerialize(x); + } + f.EndList(); + } + + /// vrm/materialProperties[] + public static void GenSerialize(this JsonFormatter f, glTF_VRM_Material value) + { + f.BeginMap(0); // dummy + + if(value.name!=null) + { + f.Key("name"); f.GenSerialize(value.name); + } + + if(value.shader!=null) + { + f.Key("shader"); f.GenSerialize(value.shader); + } + + + { + f.Key("renderQueue"); f.GenSerialize(value.renderQueue); + } + + if(value.floatProperties!=null) + { + f.Key("floatProperties"); f.GenSerialize(value.floatProperties); + } + + if(value.vectorProperties!=null) + { + f.Key("vectorProperties"); f.GenSerialize(value.vectorProperties); + } + + if(value.textureProperties!=null) + { + f.Key("textureProperties"); f.GenSerialize(value.textureProperties); + } + + if(value.keywordMap!=null) + { + f.Key("keywordMap"); f.GenSerialize(value.keywordMap); + } + + if(value.tagMap!=null) + { + f.Key("tagMap"); f.GenSerialize(value.tagMap); + } + + f.EndMap(); + } + + /// vrm/materialProperties[]/floatProperties + public static void GenSerialize(this JsonFormatter f, Dictionary value) + { + f.BeginMap(value.Count); + foreach (var kv in value) + { + f.Key(kv.Key); + f.GenSerialize(kv.Value); + } + f.EndMap(); + } + + + /// vrm/materialProperties[]/vectorProperties + public static void GenSerialize(this JsonFormatter f, Dictionary value) + { + f.BeginMap(value.Count); + foreach (var kv in value) + { + f.Key(kv.Key); + f.GenSerialize(kv.Value); + } + f.EndMap(); + } + + + /// vrm/materialProperties[]/textureProperties + public static void GenSerialize(this JsonFormatter f, Dictionary value) + { + f.BeginMap(value.Count); + foreach (var kv in value) + { + f.Key(kv.Key); + f.GenSerialize(kv.Value); + } + f.EndMap(); + } + + + /// vrm/materialProperties[]/keywordMap + public static void GenSerialize(this JsonFormatter f, Dictionary value) + { + f.BeginMap(value.Count); + foreach (var kv in value) + { + f.Key(kv.Key); + f.GenSerialize(kv.Value); + } + f.EndMap(); + } + + + /// vrm/materialProperties[]/tagMap + public static void GenSerialize(this JsonFormatter f, Dictionary value) + { + f.BeginMap(value.Count); + foreach (var kv in value) + { + f.Key(kv.Key); + f.GenSerialize(kv.Value); + } + f.EndMap(); + } + + + } // class +} // namespace diff --git a/Assets/VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs.meta b/Assets/VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs.meta new file mode 100644 index 000000000..c5f181fe4 --- /dev/null +++ b/Assets/VRM/UniVRM/Scripts/Format/VRMFormatterExtensionsGltf.g.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 280f4d5430b0b04449ef06d6f1b4db36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: