diff --git a/Assets/VRM10/Runtime/Migration/MeshUpdater.cs b/Assets/VRM10/Runtime/Migration/MeshUpdater.cs index 01fc05ef6..5fdf3fe61 100644 --- a/Assets/VRM10/Runtime/Migration/MeshUpdater.cs +++ b/Assets/VRM10/Runtime/Migration/MeshUpdater.cs @@ -82,6 +82,7 @@ namespace UniVRM10 var uv = AddAccessor(mesh.VertexBuffer.TexCoords); var weights = AddAccessor(mesh.VertexBuffer.Weights); var joints = AddAccessor(mesh.VertexBuffer.Joints); + var color = AddAccessor(mesh.VertexBuffer.Colors); var morphTargets = new MorphAccessor[] { }; if (mesh.MorphTargets != null) @@ -99,13 +100,17 @@ namespace UniVRM10 gltfPrim.indices = AddAccessor(subIndices); gltfPrim.attributes.POSITION = position.Value; gltfPrim.attributes.NORMAL = normal.Value; + gltfPrim.attributes.TANGENT = -1; + gltfPrim.attributes.COLOR_0 = color.GetValueOrDefault(-1); gltfPrim.attributes.TEXCOORD_0 = uv.Value; + gltfPrim.attributes.TEXCOORD_1 = -1; gltfPrim.attributes.WEIGHTS_0 = weights.GetValueOrDefault(-1); gltfPrim.attributes.JOINTS_0 = joints.GetValueOrDefault(-1); foreach (var (gltfMorph, morph) in Enumerable.Zip(gltfPrim.targets, morphTargets, (l, r) => (l, r))) { gltfMorph.POSITION = morph.Position.GetValueOrDefault(-1); gltfMorph.NORMAL = morph.Normal.GetValueOrDefault(-1); + gltfMorph.TANGENT = -1; } } } diff --git a/Assets/VRM10/Runtime/Migration/MigrationVrmSpringBone.cs b/Assets/VRM10/Runtime/Migration/MigrationVrmSpringBone.cs index 0a4760fc7..6e50bcc67 100644 --- a/Assets/VRM10/Runtime/Migration/MigrationVrmSpringBone.cs +++ b/Assets/VRM10/Runtime/Migration/MigrationVrmSpringBone.cs @@ -129,10 +129,13 @@ namespace UniVRM10 // その差異に対応して、7cmの遠さに node を追加する。 foreach (var x in sa["boneGroups"].ArrayItems()) { - foreach (var y in x["bones"].ArrayItems()) + if (x.ContainsKey("bones")) { - var joints = TraverseFirstChild(gltf.nodes, gltf.nodes[y.GetInt32()]).ToArray(); - AddTail7cm(gltf, joints); + foreach (var y in x["bones"].ArrayItems()) + { + var joints = TraverseFirstChild(gltf.nodes, gltf.nodes[y.GetInt32()]).ToArray(); + AddTail7cm(gltf, joints); + } } } @@ -163,30 +166,33 @@ namespace UniVRM10 // 5 // ] // }, - foreach (var y in x["bones"].ArrayItems()) + if (x.ContainsKey("bones")) { - var comment = x.GetObjectValueOrDefault("comment", ""); - var spring = new UniGLTF.Extensions.VRMC_springBone.Spring + foreach (var y in x["bones"].ArrayItems()) { - Name = comment, - ColliderGroups = x["colliderGroups"].ArrayItems().Select(z => z.GetInt32()).ToArray(), - Joints = new List(), - }; - - foreach (var z in TraverseFirstChild(gltf.nodes, gltf.nodes[y.GetInt32()])) - { - spring.Joints.Add(new UniGLTF.Extensions.VRMC_springBone.SpringBoneJoint + var comment = x.GetObjectValueOrDefault("comment", ""); + var spring = new UniGLTF.Extensions.VRMC_springBone.Spring { - Node = gltf.nodes.IndexOf(z), - DragForce = x["dragForce"].GetSingle(), - GravityDir = MigrateVector3.Migrate(x["gravityDir"]), - GravityPower = x["gravityPower"].GetSingle(), - HitRadius = x["hitRadius"].GetSingle(), - Stiffness = x["stiffiness"].GetSingle(), - }); - } + Name = comment, + ColliderGroups = x["colliderGroups"].ArrayItems().Select(z => z.GetInt32()).ToArray(), + Joints = new List(), + }; - springBone.Springs.Add(spring); + foreach (var z in TraverseFirstChild(gltf.nodes, gltf.nodes[y.GetInt32()])) + { + spring.Joints.Add(new UniGLTF.Extensions.VRMC_springBone.SpringBoneJoint + { + Node = gltf.nodes.IndexOf(z), + DragForce = x["dragForce"].GetSingle(), + GravityDir = MigrateVector3.Migrate(x["gravityDir"]), + GravityPower = x["gravityPower"].GetSingle(), + HitRadius = x["hitRadius"].GetSingle(), + Stiffness = x["stiffiness"].GetSingle(), + }); + } + + springBone.Springs.Add(spring); + } } } diff --git a/Assets/VRM10/Tests/MigrationTests.cs b/Assets/VRM10/Tests/MigrationTests.cs index d3371eade..d06b496a2 100644 --- a/Assets/VRM10/Tests/MigrationTests.cs +++ b/Assets/VRM10/Tests/MigrationTests.cs @@ -198,13 +198,13 @@ namespace UniVRM10 foreach (var gltf in EnumerateGltfFiles(root)) { - var bytes = File.ReadAllBytes(gltf.FullName); try { - var migrated = MigrationVrm.Migrate(bytes); - var data = new GlbLowLevelParser(gltf.FullName, migrated).Parse(); - UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.TryGet(data.GLTF.extensions, out UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm); - Assert.NotNull(vrm); + Vrm10Data.TryParseOrMigrate(gltf.FullName, true, out Vrm10Data vrm); + using (var loader = new Vrm10Importer(vrm)) + { + loader.LoadAsync().Wait(); + } } catch (UnNormalizedException) {