mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-14 06:50:19 -05:00
Merge pull request #1738 from ousttrue/fix10/remove_primitive_targetName
[1.0] VRM-1.0 の targetNames を Mesh.extras のみに修正
This commit is contained in:
@@ -91,7 +91,7 @@ namespace UniGLTF
|
||||
return new glTFExtensionExport().Add(ExtraName, f.GetStore().Bytes);
|
||||
}
|
||||
|
||||
public static void Serialize(glTFMesh gltfMesh, IEnumerable<string> targetNames)
|
||||
public static void Serialize(glTFMesh gltfMesh, IEnumerable<string> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
|
||||
namespace UniGLTF
|
||||
{
|
||||
/// <summary>
|
||||
/// https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#meshes
|
||||
///
|
||||
/// See Implementation Note about `mesh.extras.targetNames`
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum BlendShapeTargetNameLocationFlags
|
||||
{
|
||||
None = 0,
|
||||
Mesh = 1,
|
||||
Primitives = 2,
|
||||
|
||||
Both = Mesh | Primitives,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 050edaae24c5b4e45b702dd150deee8a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user