您的位置:首页 > 其它

主流的 骨骼蒙皮动画 顶点变换方式的一个细节的思考

2017-08-15 15:31 411 查看
常见的骨骼蒙皮动画的顶点变换大致思路是:

 

将绑定姿势(比如说类人模型的T姿势)下的顶点位置  变换到  对应骨骼的局部空间(用该骨骼的绑定姿势空间下矩阵的逆)   再以该骨骼的所需时间点时对应的矩阵处理,重新变换到模型空间。

如果该顶点对应多个joint,将获得的多个新坐标加权平均。

 

以前一直觉得这个算法在对应多个joint时是错的。

 

以前我的理解是:

以对应两个joint为例,某顶点P的模型空间坐标为Pmodel ,该点在joint0局部空间坐标根据骨骼蒙皮动画约定总是 P0, 在joint1局部空间坐标根据骨骼蒙皮动画约定总是P1。 joint0到模型空间的总矩阵M0,joint1到模型空间的总矩阵M­1。权重分别w­0, w1。

假设绑定姿势对应t0时间点

Pmodelt0 =  P0× M0t0 × w0
 + P1 ×M­1t0 × w1             (1)

求Pmodelt1

 

常见算法的公式是

Pmodelt1 = Pmodelt0  × (M0t0)-1× M0t1 × w0 + Pmodelt0 × (M1t0)-1×
M1t1 × w1                         (2)

如果把等式(1)带入上式,就会得到一个不伦不类的东西。实际上应该是将等式(1)中的两项分别做等式(2)中两项的处理。所以我一直觉得常见算法这里有问题。

 

今天又想了想,原来没毛病。

还延续我的假设,但是如果将P0 设为Pmodelt0  × (M0t0)-1,同理将P1设为Pmodelt0 × (M1t0)-1,这样等式(1)从数学上来说就退化成一个恒等式,如果不化简等式(1),直接带入等式(2),等式(2)就成立了。

从实际意义上来说,如果令在绑定姿势时的模型空间顶点坐标(加权平均后的) 和 顶点坐标在绑定姿势时在各个joint的局部坐标变换到模型空间坐标  相等。

(也就是实际上没必要加权平均了,这时候该点从各个joint算出来的坐标都相等)

也就是绑定姿势时模型空间顶点坐标 乘以 各个joint的逆矩阵,得到一个坐标,令这个坐标为顶点坐标在对应joint的局部坐标。

这时就可以简化顶点的计算方式,也就是常见算法。

这里可以随意假设局部坐标,只要满足假设的这套 局部坐标  可以满足等式1就行。

如果恰好假设以上那个假设,那就很方便计算。

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: