mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-01-17 20:00:06 +08:00
c454bc1ed8
* Add integration test for blendshape sync * fix: blendshape sync not being processed This change refactors AnimationDatabase to be part of the same extension context as the TrackObjectRenames functionality (which is renamed back to PathMappings). This then allows us to sequence deactivation of this context to come after blendshape processing completes. Fixes: #461
66 lines
2.5 KiB
C#
66 lines
2.5 KiB
C#
using nadena.dev.modular_avatar.animation;
|
|
using nadena.dev.modular_avatar.core.editor;
|
|
using NUnit.Framework;
|
|
using UnityEngine;
|
|
using VRC.SDK3.Avatars.Components;
|
|
|
|
namespace modular_avatar_tests
|
|
{
|
|
public class RetargetMeshesTest : TestBase
|
|
{
|
|
// Real world case of this test case is with skinned mesh without bones or skinned mesh renderer with null mesh.
|
|
[Test]
|
|
public void RootBoneOnly()
|
|
{
|
|
var root = CreateRoot("root");
|
|
var a = CreateChild(root, "a");
|
|
var b = CreateChild(a, "b");
|
|
|
|
var skinnedMeshRenderer = root.AddComponent<SkinnedMeshRenderer>();
|
|
skinnedMeshRenderer.sharedMesh = new Mesh();
|
|
skinnedMeshRenderer.rootBone = b.transform;
|
|
Debug.Assert(skinnedMeshRenderer.bones.Length == 0);
|
|
|
|
var build_context =
|
|
new nadena.dev.ndmf.BuildContext(root.GetComponent<VRCAvatarDescriptor>(), null);
|
|
var torc = new AnimationServicesContext();
|
|
torc.OnActivate(build_context);
|
|
|
|
var bonedb = new BoneDatabase();
|
|
bonedb.AddMergedBone(b.transform);
|
|
|
|
new RetargetMeshes().OnPreprocessAvatar(root, bonedb, torc.PathMappings);
|
|
|
|
Assert.AreEqual(a.transform, skinnedMeshRenderer.rootBone);
|
|
}
|
|
|
|
[Test]
|
|
public void NoMeshRootBoneOnly()
|
|
{
|
|
var root = CreateRoot("root");
|
|
var a = CreateChild(root, "a");
|
|
var b = CreateChild(a, "b");
|
|
b.transform.localScale = new Vector3(2, 2, 2);
|
|
|
|
var skinnedMeshRenderer = root.AddComponent<SkinnedMeshRenderer>();
|
|
skinnedMeshRenderer.sharedMesh = null;
|
|
skinnedMeshRenderer.localBounds = new Bounds(new Vector3(0, 0, 0), new Vector3(1, 1, 1));
|
|
skinnedMeshRenderer.rootBone = b.transform;
|
|
Debug.Assert(skinnedMeshRenderer.bones.Length == 0);
|
|
|
|
var build_context =
|
|
new nadena.dev.ndmf.BuildContext(root.GetComponent<VRCAvatarDescriptor>(), null);
|
|
var torc = new AnimationServicesContext();
|
|
torc.OnActivate(build_context);
|
|
|
|
var bonedb = new BoneDatabase();
|
|
bonedb.AddMergedBone(b.transform);
|
|
|
|
new RetargetMeshes().OnPreprocessAvatar(root, bonedb, torc.PathMappings);
|
|
|
|
Assert.AreEqual(a.transform, skinnedMeshRenderer.rootBone);
|
|
Assert.AreEqual(new Bounds(new Vector3(0, 0, 0), new Vector3(2, 2, 2)),
|
|
skinnedMeshRenderer.localBounds);
|
|
}
|
|
}
|
|
} |