在骨骼动画中,绑定姿势扮演着一个重要的角色,还有每个节点的OffsetMatrix,而这些概念中有什么含义及关联呢,下面针对这点进行笔记,以作备忘。
绑定姿势
- 建模人员始终以称为T Pose的姿势对3D模型进行建模,其中角色模型以某个姿势站立,而手和身体显示出类似T的图形, 建模者可以在T型姿势中对角色进行建模,以便装配者可以更轻松地装配角色。这有助于他们放置骨骼并更轻松地调整顶点权重和网格。将所有骨骼放置在3D模型中并开始蒙皮过程后,将保存骨骼的当前姿势。此姿势称为“绑定姿势”。名称显示了整个故事。绑定姿势是您开始将网格物体绑定到其相应骨架的姿势。
骨骼方向
- 骨骼方向 = 绑定姿势旋转 * 关键帧旋转。 由此,我们可以明显知道,关键帧的数据是相对于绑定姿势下的旋转变换数据,而非基于上一关键帧的相对旋转变换数据。
绑定矩阵(bind pose Matrix)
- 骨骼中,每个关节点在绑定姿势下的全局变换矩阵。如果遍历骨骼/节点层次结构,将每个骨骼/节点的局部变换(Assimp中的mTransformation)应用于其子级,我们将获得每个骨骼/节点的全局变换。可以理解为此矩阵表征的是从骨骼空间到网格/模型空间的变换。
OffsetMatrix
- 此矩阵,从意义上,称为inverseBindMatrix,更为合理,是该骨骼在绑定姿势下的全局变换的逆函数。换句话说,特定骨骼的此绑定矩阵的逆等于其offsetMatrix。它表征的是将模型上的顶点从世界空间上转换到骨骼空间。
LocalMatrix
- 每个骨骼/关节相对于父节点的变换矩阵。
动画过程中的蒙皮计算
-
蒙皮的变换 = (M_keyframe * offsetMatrix * V_world). 其中B_keyframe是骨骼在某个目标位置的全局变换,例如由动画剪辑提供。
-
这种复合变换实际上是从绑定姿势(定义了网格顶点的位置)到M_keyframe的偏移量。当应用于顶点时,(M_keyframe * offsetMatrix)会将顶点从绑定位置“移动”到M_keyframe转换到的任何位置。
-
请注意,如果M_keyframe等于绑定变换(例如,根据上述骨骼的mTransformation:s计算得出),则(M_keyframe * offsetMatrix)是标识,并且顶点不会从绑定姿势的原始位置移动。