当前位置 : 主页 > 编程语言 > 其它开发 >

游戏引擎动画系统中蒙皮与骨骼的映射关系|local本地坐标系与model模型坐标系

来源:互联网 收集:自由互联 发布时间:2022-07-03
GAMES104, Joint & Skin 本文参考于GAMES104课程动画系统一节,对蒙皮skin和关节joint对于本地坐标系和模型坐标系间的变换做出解释 本文仅代表作者见解,如解释有误或其他观点欢迎讨论 也欢迎
GAMES104, Joint & Skin 本文参考于GAMES104课程动画系统一节,对蒙皮skin和关节joint对于本地坐标系和模型坐标系间的变换做出解释

本文仅代表作者见解,如解释有误或其他观点欢迎讨论
也欢迎直接去GAMES104课程学习

image
蒙皮动画中,skin是与joint相邦定的,他们之间的关系如下:
image
下面对这些变量做出解释(用V表示蒙皮动画中与关节绑定的一个skin结点,用J表示关节)
V和J受2组状态影响:
1.绑定pose下的初态和动画进行到时间t时刻的状态
2.本地(local)坐标系下和模型(model)坐标系下的状态
可以得到下面这张状态表

V在初态下 V在时间t下 J在初态下 J在时间t下 模型坐标系 image image image image 本地坐标系 imageimage image

其中V和T在初态下模型坐标系的值是已知的,我们最终想通过公式得到模型坐标系下t时刻V的位置.
需要用到的公式如下:
image
V在模型坐标的位置(t时间)=J在模型坐标的位置(t时间)*V在本地坐标的位置

image
J在模型坐标系下(时间t)=根节点在时间t下的值通过结点累加到当前Joint
image
V在本地坐标的位置(t时间)恒等于V在初态下本地坐标的位置
即在本地坐标系下V与J的相对位置是不会变的
image
V在模型坐标的位置(初态)=J在模型坐标位置(初态)*V在本地坐标的位置(初态)
image
通过公式④我们可以推出公式⑤,也就是V在初态下本地坐标的位置=J在初态下模型坐标位置的逆
*V在初态下模型坐标的位置

可以汇总为这样一张表:image

通过①-⑤,我们最终得到这样一个公式image
V在模型坐标的位置(t时间)
=J在模型坐标的位置(t时间) * V在本地坐标的位置
=Inverse Bind Pose Matrix*J在模型坐标的位置(初态)

其中的Inverse Bind Pose Martrix就是Kjimage

Kj是提前算好的,并乘以一个模型坐标系到世界坐标系的转换矩阵,在数据结构中提前存好image

我是一个还没有想好写点啥的小尾巴
网友评论