GAMES104, Joint & Skin 本文参考于GAMES104课程动画系统一节,对蒙皮skin和关节joint对于本地坐标系和模型坐标系间的变换做出解释 本文仅代表作者见解,如解释有误或其他观点欢迎讨论 也欢迎
本文仅代表作者见解,如解释有误或其他观点欢迎讨论
也欢迎直接去GAMES104课程学习
蒙皮动画中,skin是与joint相邦定的,他们之间的关系如下:
下面对这些变量做出解释(用V表示蒙皮动画中与关节绑定的一个skin结点,用J表示关节)
V和J受2组状态影响:
1.绑定pose下的初态和动画进行到时间t时刻的状态
2.本地(local)坐标系下和模型(model)坐标系下的状态
可以得到下面这张状态表







其中V和T在初态下模型坐标系的值是已知的,我们最终想通过公式得到模型坐标系下t时刻V的位置.
需要用到的公式如下:
①
V在模型坐标的位置(t时间)=J在模型坐标的位置(t时间)*V在本地坐标的位置
②
J在模型坐标系下(时间t)=根节点在时间t下的值通过结点累加到当前Joint
③
V在本地坐标的位置(t时间)恒等于V在初态下本地坐标的位置
即在本地坐标系下V与J的相对位置是不会变的
④
V在模型坐标的位置(初态)=J在模型坐标位置(初态)*V在本地坐标的位置(初态)
⑤
通过公式④我们可以推出公式⑤,也就是V在初态下本地坐标的位置=J在初态下模型坐标位置的逆
*V在初态下模型坐标的位置
可以汇总为这样一张表:
通过①-⑤,我们最终得到这样一个公式
V在模型坐标的位置(t时间)
=J在模型坐标的位置(t时间) * V在本地坐标的位置
=Inverse Bind Pose Matrix*J在模型坐标的位置(初态)
其中的Inverse Bind Pose Martrix就是Kj
Kj是提前算好的,并乘以一个模型坐标系到世界坐标系的转换矩阵,在数据结构中提前存好