From 3510c54fc3b076f315b7df89595045cfefc72311 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 12 Jul 2022 17:51:53 +0900 Subject: [PATCH] =?UTF-8?q?VRM-1.0=20=E3=81=AE=20targetName=20=E3=82=92=20?= =?UTF-8?q?Mesh.extras=20=E3=81=AE=E3=81=BF=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gltf_mesh_extras_targetNames.cs | 22 +++++++++++++------ .../IO/BlendShapeTargetNameLocationFlags.cs | 19 ++++++++++++++++ .../BlendShapeTargetNameLocationFlags.cs.meta | 11 ++++++++++ .../MeshExporter_DividedVertexBuffer.cs | 2 +- .../MeshIO/MeshExporter_SharedVertexBuffer.cs | 2 +- Assets/VRM10/Runtime/IO/Model/MeshWriter.cs | 2 +- 6 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/BlendShapeTargetNameLocationFlags.cs create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/BlendShapeTargetNameLocationFlags.cs.meta diff --git a/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/gltf_mesh_extras_targetNames.cs b/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/gltf_mesh_extras_targetNames.cs index f1036bb61..4a276480a 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/gltf_mesh_extras_targetNames.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/Format/ExtensionsAndExtras/gltf_mesh_extras_targetNames.cs @@ -91,7 +91,7 @@ namespace UniGLTF return new glTFExtensionExport().Add(ExtraName, f.GetStore().Bytes); } - public static void Serialize(glTFMesh gltfMesh, IEnumerable targetNames) + public static void Serialize(glTFMesh gltfMesh, IEnumerable targetNames, BlendShapeTargetNameLocationFlags blendShapeTargetNameLocation) { // targetNames var f = new JsonFormatter(); @@ -103,13 +103,21 @@ namespace UniGLTF f.EndList(); var targetNamesJson = f.GetStore().Bytes; - var meshExtras = glTFExtensionExport.GetOrCreate(ref gltfMesh.extras); - meshExtras.Add(ExtraName, targetNamesJson); - - foreach (var prim in gltfMesh.primitives) + // mesh + if (blendShapeTargetNameLocation.HasFlag(BlendShapeTargetNameLocationFlags.Mesh)) { - var primExtras = glTFExtensionExport.GetOrCreate(ref prim.extras); - primExtras.Add(ExtraName, targetNamesJson); + var meshExtras = glTFExtensionExport.GetOrCreate(ref gltfMesh.extras); + meshExtras.Add(ExtraName, targetNamesJson); + } + + // primitive + if (blendShapeTargetNameLocation.HasFlag(BlendShapeTargetNameLocationFlags.Primitives)) + { + foreach (var prim in gltfMesh.primitives) + { + var primExtras = glTFExtensionExport.GetOrCreate(ref prim.extras); + primExtras.Add(ExtraName, targetNamesJson); + } } } } diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/BlendShapeTargetNameLocationFlags.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/BlendShapeTargetNameLocationFlags.cs new file mode 100644 index 000000000..ef71a92a7 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/BlendShapeTargetNameLocationFlags.cs @@ -0,0 +1,19 @@ +using System; + +namespace UniGLTF +{ + /// + /// https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#meshes + /// + /// See Implementation Note about `mesh.extras.targetNames` + /// + [Flags] + public enum BlendShapeTargetNameLocationFlags + { + None = 0, + Mesh = 1, + Primitives = 2, + + Both = Mesh | Primitives, + } +} diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/BlendShapeTargetNameLocationFlags.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/BlendShapeTargetNameLocationFlags.cs.meta new file mode 100644 index 000000000..80e72f45c --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/BlendShapeTargetNameLocationFlags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 050edaae24c5b4e45b702dd150deee8a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshExporter_DividedVertexBuffer.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshExporter_DividedVertexBuffer.cs index fac86a104..67327c87b 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshExporter_DividedVertexBuffer.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshExporter_DividedVertexBuffer.cs @@ -129,7 +129,7 @@ namespace UniGLTF } var targetNames = Enumerable.Range(0, mesh.blendShapeCount).Select(x => mesh.GetBlendShapeName(x)).ToArray(); - gltf_mesh_extras_targetNames.Serialize(gltfMesh, targetNames); + gltf_mesh_extras_targetNames.Serialize(gltfMesh, targetNames, BlendShapeTargetNameLocationFlags.Both); return (gltfMesh, Enumerable.Range(0, mesh.blendShapeCount).ToDictionary(x => x, x => x)); } diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshExporter_SharedVertexBuffer.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshExporter_SharedVertexBuffer.cs index 6da415fcd..aae9f9c9b 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshExporter_SharedVertexBuffer.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshIO/MeshExporter_SharedVertexBuffer.cs @@ -188,7 +188,7 @@ namespace UniGLTF } } - gltf_mesh_extras_targetNames.Serialize(gltfMesh, targetNames); + gltf_mesh_extras_targetNames.Serialize(gltfMesh, targetNames, BlendShapeTargetNameLocationFlags.Both); } return (gltfMesh, blendShapeIndexMap); diff --git a/Assets/VRM10/Runtime/IO/Model/MeshWriter.cs b/Assets/VRM10/Runtime/IO/Model/MeshWriter.cs index 7a7ef16f7..063607b67 100644 --- a/Assets/VRM10/Runtime/IO/Model/MeshWriter.cs +++ b/Assets/VRM10/Runtime/IO/Model/MeshWriter.cs @@ -136,7 +136,7 @@ namespace UniVRM10 } var targetNames = src.Meshes[0].MorphTargets.Select(x => x.Name).ToArray(); - gltf_mesh_extras_targetNames.Serialize(gltfMesh, targetNames); + gltf_mesh_extras_targetNames.Serialize(gltfMesh, targetNames, BlendShapeTargetNameLocationFlags.Mesh); return gltfMesh; }