您的位置:首页 > 其它

关于 骨骼动画之理解蒙皮算法

2016-12-25 16:08 399 查看
把三维骨骼顶点联系至骨骼的位置的过程,称为蒙皮。

蒙皮用的网格是通过顶点联系上骨骼,每个顶点可以绑定一个或者多个骨骼(一般最多允许4根骨骼)。若某顶点只绑定至一根骨骼,它就会完全跟随该骨骼移动。若绑定至多个骨骼,该顶点的位置就等于把它逐一绑定绑定个别骨骼,在通过权重加权平均。

能把网格顶点从原来位置(绑定姿势)变换至骨骼的当前姿势的矩阵称为蒙皮矩阵。

蒙皮矩阵不是基变更变换(change of basis)。

基的变更:把物体从一个坐标系转换到另外一个坐标系的过程,明显,蒙皮矩阵并不是基的变更。

蒙皮矩阵把顶点变形至新位置,顶点在变换前后都在模型变换空间中。

求蒙皮矩阵时的一个诀窍是:顶点绑定到关节的位置时,在该关节空间中是不变的(其实变的只是骨骼,所以才叫骨骼动画)。具体可以参考以下从《游戏引擎架构》书籍的截图:







通俗点一点理解就是:模型加载到内存中的位置是在模型空间中的坐标(并不是其绑定的骨骼坐标系下)在做骨骼动画时,动的其实是骨骼,而绑定到该骨骼的顶点会跟随骨骼做动画,所以顶点相对于骨骼位置是不变的(在关节空间下是不变的,变的只是骨骼的位置),因此可以利用这个特性,求出蒙皮矩阵。

一.骨骼文件

在skeleton文件中,保存着骨骼的绑定姿势下的骨骼坐标和骨骼动画数据,应该会有以下类似数据:



在第一部分数据中,骨骼的绑定数据中的position/rotation/scale都是相对于父骨骼的坐标,在读取数据后,需要求出绑定姿势的世界坐标变换;第二部分表示骨骼之间的父子关系;第三部分是具体的骨骼动画,其中的position是在父空间下,rotation/scale都是相对于节点自己的坐标系下。

一.软件蒙皮算法流程

1. 应用动画

2. 蒙皮应用

2.1 计算蒙皮矩阵:根据以上的计算公式:New V = Bind V * BindMatrixInverse * C BindMatrix;附上Ogre的蒙皮矩阵算法: 



以上矩阵就是Ogre计算从绑定姿势下转换到当前姿势下的变换矩
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: