生成具有随机身体部位的模型后。覆盖这些部分之间的区域,使 3D 模型看起来更好

问题描述 投票:0回答:1

我有包含三个身体部位的人体模型:头部、躯干和腿部。我从 Mixamo 获得了这些模型的装备和动画。我正在采用两个人体模型(父母),并交替从父母那里获取身体部位来创造一个新孩子。我正在根据孩子的装备(从父母之一那里获取)转移身体部位的蒙皮网格。因为父母有一些不同的装备(来自 Mixamo),这些身体部位无法正确连接,并且它们之间有很小的间隙。我正在考虑如何填补这些空白。有人可以帮忙吗...因为我被困住了?那就太好了...

家长:Image of parents

孩子:Image of the child after getting body parts from parents

请注意,情况并非总是如此。还有其他组合,部件的连接将继续+ - 还不错

带皮网状转移码

public static void TransferSkinnedMeshes(SkinnedMeshRenderer[] skinnedMeshRenderersList, Transform newArmature, Transform newParent)
        {
            foreach (var t in skinnedMeshRenderersList)
            {
                string cachedRootBoneName = t.rootBone.name;
                var newBones = new Transform[t.bones.Length];
                for (var x = 0; x < t.bones.Length; x++)
                    foreach (var newBone in newArmature.GetComponentsInChildren<Transform>())
                        if (newBone.name == t.bones[x].name)
                        {
                            newBones[x] = newBone;
                        }

                Transform matchingRootBone = GetRootBoneByName(newArmature, cachedRootBoneName);
                t.rootBone = matchingRootBone != null ? matchingRootBone : newArmature.transform;
                t.bones = newBones;
                Transform transform;
                (transform = t.transform).SetParent(newParent);
                transform.localPosition = Vector3.zero;
            }
        
        }

        static Transform GetRootBoneByName(Transform parentTransform, string name)
        {
            return parentTransform.GetComponentsInChildren<Transform>().FirstOrDefault(transformChild => transformChild.name == name);
        }

我尝试在chatGPT的帮助下编写着色器......但它不起作用。另外,我想从 Mixamo 获得相同的装备,但因为我通过眼规设置自动装备的关键位置,所以无法获得好的结果

c# unity-game-engine 3d runtime shader
1个回答
0
投票

填充网孔是正确的方法。然而,您的情况允许采取一些“简单”的方式,因为两个分开的部分的形状大致相同。这就是我要做的:

  • 首先实现 2D Delaunay 三角剖分(你可以在 Git 上找到免费代码)
  • 计算要连接的两个轮廓(您需要网格上的半边日期结构才能有效地执行此操作)。
  • 在 2D 空间中投影两个轮廓(沿着任一轮廓的法线)
  • 只是为了确保将一个放大一小部分并将另一个缩小一小部分。
  • 在这 2 个轮廓上使用 Delaunay 2D 将它们连接起来。
  • 在 3D 空间中重新投影。 我自己测试过它,对于此类用例来说它非常快速且强大。
© www.soinside.com 2019 - 2024. All rights reserved.