From fbb9932d0c0a3775b496136672abf89f586b3ea8 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 9 Apr 2025 00:23:02 +0900 Subject: [PATCH] =?UTF-8?q?=E3=81=99=E3=81=B9=E3=81=A6=E3=81=AE=E7=B5=8C?= =?UTF-8?q?=E8=B7=AF=E3=81=A7=20ForceTransformUniqueName.Process=20?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/UniHumanoid/AvatarDescription.cs | 51 +++---------------- .../Runtime/UniHumanoid/HumanoidLoader.cs | 3 +- .../UniHumanoid/IO/BvhImporterContext.cs | 2 +- .../UniHumanoid/HumanBuilderTest.cs | 2 +- Assets/VRM/Runtime/IO/VRMImporterContext.cs | 2 +- .../VRM10/Runtime/IO/VrmAnimationImporter.cs | 9 ++-- 6 files changed, 17 insertions(+), 52 deletions(-) diff --git a/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs b/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs index d2bbae906..5c9a89d02 100644 --- a/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs +++ b/Assets/UniGLTF/Runtime/UniHumanoid/AvatarDescription.cs @@ -91,54 +91,19 @@ namespace UniHumanoid public bool hasTranslationDoF; public BoneLimit[] human; - public HumanDescription ToHumanDescription(Transform root, bool forceRename) + public IEnumerable<(Transform, HumanBodyBones)> ToHumanoidMap(Transform root) { - if (forceRename) + var map = new Dictionary(); + foreach (var t in root.GetComponentsInChildren()) { - ForceTransformUniqueName.Process(root); + map[t.name] = t; } - - var transforms = root.GetComponentsInChildren(); - var skeletonBones = new SkeletonBone[transforms.Length]; - var index = 0; - foreach (var t in transforms) - { - skeletonBones[index] = t.ToSkeletonBone(); - index++; - } - - var humanBones = new HumanBone[human.Length]; - index = 0; - foreach (var bonelimit in human) - { - humanBones[index] = bonelimit.ToHumanBone(); - index++; - } - - - return new HumanDescription - { - skeleton = skeletonBones, - human = humanBones, - armStretch = armStretch, - legStretch = legStretch, - upperArmTwist = upperArmTwist, - lowerArmTwist = lowerArmTwist, - upperLegTwist = upperLegTwist, - lowerLegTwist = lowerLegTwist, - feetSpacing = feetSpacing, - hasTranslationDoF = hasTranslationDoF, - }; - } - - public Avatar CreateAvatar(Transform root) - { - return AvatarBuilder.BuildHumanAvatar(root.gameObject, ToHumanDescription(root, true)); + return human.Select(x => (map[x.boneName], x.humanBone)); } public Avatar CreateAvatarAndSetup(Transform root) { - var avatar = CreateAvatar(root); + var avatar = HumanoidLoader.LoadHumanoidAvatar(root, ToHumanoidMap(root)); avatar.name = name; if (root.TryGetComponent(out var animator)) @@ -304,7 +269,7 @@ namespace UniHumanoid modAvatarDesc(avatarDescription); } avatarDescription.SetHumanBones(map); - var avatar = avatarDescription.CreateAvatar(dst.transform); + var avatar = HumanoidLoader.LoadHumanoidAvatar(dst.transform, avatarDescription.ToHumanoidMap(dst.transform)); avatar.name = "created"; return avatar; } @@ -330,7 +295,7 @@ namespace UniHumanoid var avatarDescription = UniHumanoid.AvatarDescription.Create(); avatarDescription.SetHumanBones(map); - var avatar = avatarDescription.CreateAvatar(src.transform); + var avatar = HumanoidLoader.LoadHumanoidAvatar(src.transform, avatarDescription.ToHumanoidMap(src.transform)); avatar.name = "created"; return avatar; } diff --git a/Assets/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs b/Assets/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs index f86f2a844..1f419c29c 100644 --- a/Assets/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs +++ b/Assets/UniGLTF/Runtime/UniHumanoid/HumanoidLoader.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using UniGLTF.Utils; using UnityEngine; namespace UniHumanoid @@ -9,7 +10,7 @@ namespace UniHumanoid { public static Avatar LoadHumanoidAvatar(Transform root, IEnumerable<(Transform, HumanBodyBones)> boneMap) { - UniGLTF.Utils.ForceTransformUniqueName.Process(root); + ForceTransformUniqueName.Process(root); var description = new HumanDescription { diff --git a/Assets/UniGLTF/Runtime/UniHumanoid/IO/BvhImporterContext.cs b/Assets/UniGLTF/Runtime/UniHumanoid/IO/BvhImporterContext.cs index 55faa4768..579ff78d6 100644 --- a/Assets/UniGLTF/Runtime/UniHumanoid/IO/BvhImporterContext.cs +++ b/Assets/UniGLTF/Runtime/UniHumanoid/IO/BvhImporterContext.cs @@ -111,7 +111,7 @@ namespace UniHumanoid // // avatar // - Avatar = description.CreateAvatar(Root.transform); + Avatar = HumanoidLoader.LoadHumanoidAvatar(Root.transform, description.ToHumanoidMap(Root.transform)); Avatar.name = "Avatar"; AvatarDescription = description; var animator = Root.AddComponent(); diff --git a/Assets/UniGLTF_Samples/UniHumanoid/HumanBuilderTest.cs b/Assets/UniGLTF_Samples/UniHumanoid/HumanBuilderTest.cs index 188eb73f3..fb5aa785b 100644 --- a/Assets/UniGLTF_Samples/UniHumanoid/HumanBuilderTest.cs +++ b/Assets/UniGLTF_Samples/UniHumanoid/HumanBuilderTest.cs @@ -124,7 +124,7 @@ namespace UniHumanoid { throw new System.ArgumentException("no animator"); } - animator.avatar = description.CreateAvatar(root); + animator.avatar = HumanoidLoader.LoadHumanoidAvatar(root, description.ToHumanoidMap(root)); // create SkinnedMesh for bone visualize var renderer = SkeletonMeshUtility.CreateRenderer(animator); diff --git a/Assets/VRM/Runtime/IO/VRMImporterContext.cs b/Assets/VRM/Runtime/IO/VRMImporterContext.cs index 98dc2bf7a..e4d735224 100644 --- a/Assets/VRM/Runtime/IO/VRMImporterContext.cs +++ b/Assets/VRM/Runtime/IO/VRMImporterContext.cs @@ -259,7 +259,7 @@ namespace VRM { AvatarDescription = VRM.humanoid.ToDescription(Nodes); AvatarDescription.name = "AvatarDescription"; - HumanoidAvatar = AvatarDescription.CreateAvatar(Root.transform); + HumanoidAvatar = UniHumanoid.HumanoidLoader.LoadHumanoidAvatar(Root.transform, AvatarDescription.ToHumanoidMap(Root.transform)); if (!HumanoidAvatar.isValid || !HumanoidAvatar.isHuman) { throw new Exception("fail to create avatar"); diff --git a/Assets/VRM10/Runtime/IO/VrmAnimationImporter.cs b/Assets/VRM10/Runtime/IO/VrmAnimationImporter.cs index b46c8f2d5..c3af9a539 100644 --- a/Assets/VRM10/Runtime/IO/VrmAnimationImporter.cs +++ b/Assets/VRM10/Runtime/IO/VrmAnimationImporter.cs @@ -104,9 +104,9 @@ namespace UniVRM10 return default; } - public Dictionary GetHumanMap() + public List<(Transform, HumanBodyBones)> GetHumanMap() { - var humanMap = new Dictionary(); + var humanMap = new List<(Transform, HumanBodyBones)>(); if (m_vrma is UniGLTF.Extensions.VRMC_vrm_animation.VRMC_vrm_animation animation && animation.Humanoid != null) { foreach (HumanBodyBones bone in UniGLTF.Utils.CachedEnum.GetValues()) @@ -114,7 +114,7 @@ namespace UniVRM10 var node = GetNodeIndex(animation.Humanoid, bone); if (node.HasValue) { - humanMap.Add(bone, Nodes[node.Value]); + humanMap.Add((Nodes[node.Value], bone)); } } } @@ -259,11 +259,10 @@ namespace UniVRM10 var humanMap = GetHumanMap(); if (humanMap.Count > 0) { - var description = AvatarDescription.Create(humanMap); // // avatar // - var avatar = description.CreateAvatar(Root.transform); + var avatar = HumanoidLoader.LoadHumanoidAvatar(Root.transform, humanMap); avatar.name = "Avatar"; // AvatarDescription = description; var animator = Root.AddComponent();