首页 > 解决方案 > 在 Unity 和原始装备中查找骨骼旋转之间的偏移量

问题描述

目标:

计算可用于校正骨骼变换的旋转,以便在手动旋转时按预期旋转。

详细说明:

角色的骨骼变换未正确导入 Unity,即。左手的Z轴不是看向手的顶部,而是向后看,而右手的Z轴是向前看。

如果您之前在另一个应用程序中看到过该装备,则骨骼默认旋转与您所期望的不同。

我想创建一个类,将角色置于 T-Pose 中,然后映射骨骼旋转。(我会假设 Unity 在幕后做了类似的事情,这就是我的想法。)所以这个类将与这样的 API 一起使用:

/// This should return the rotation, where the bone pointing forward rotated by rotation.
/// Ie. when rotation = Quaternion.Identity the left hand should look forward.
Quaternion CorrectRotation(HumanBodyBones bone, Quaternion rotation)
{
    return Quaternion.Inverse(tPoseRotations[bone]) * rotation;
}

问题是,我似乎找不到映射这些旋转的好方法。

我最后一次尝试是这样的:

Vector3 boneDirection = (boneTransform.position - parentTransform.position).normalized;
Quaternion mappedRotation = Quaternion.LookRotation(boneDirection, parentTransform.up);

正如您在这张图片中看到的那样,使用这种方法,双手朝相同的方向向前看,但仍未正确旋转,它们与所需结果有偏差。(正确的旋转由紫色指针表示。)

当给定其他旋转时,指针以相同的偏移量跟随,所以除了这个不需要的偏移量之外,它们可以正常工作。

所以基本上,我会寻求任何帮助来解决我的问题,无论是通过这种方式,还是使用适用于不同钻机的不同解决方案。

标签: unity3dgame-developmentquaternions

解决方案


推荐阅读