OpenGL:骨骼动画,为什么在使用GPU时我需要反向绑定姿势?

时间:2013-06-15 21:20:08

标签: opengl glsl skeletal-mesh

我实现了一个带有软件皮肤的MD5 Loader。 md5中的绑定姿势是最终的,绝对位置和旋转,你只需要对关节相关的权重进行计算。

我试图实现GPU皮肤,但我陷入了困境。由于这些坐标是最终的,为什么我不能将我的3d矢量和四元数转换为矩阵并将其上传到着色器?正如我在这里读到的那样:http://3dgep.com/?p=1356,我需要将我的骨架与绑定姿势的倒数相乘。但我不明白这一部分,因为我一直认为我只需要将最终矩阵上传到GPU并计算其余部分(权重之和等等)

你能解释一下逆绑定姿势的行为吗?

2 个答案:

答案 0 :(得分:13)

作为该文章的原作者,我将尝试解释逆绑定姿势的乘法:

“反向绑定姿势”基本上“撤消”已在其绑定姿势中应用于模型的任何转换。

像这样考虑: 如果你将单位矩阵应用于模型中的每个关节,那么你将得到的是绑定姿势中的模型(你可以通过发送一个填充了身份矩阵的骨架来尝试这个。如果结果是什么结果,那么你是做得对。)

如果你将绑定姿势矩阵(uninverted)应用到模型中的每个关节,那么你将得到的是意大利面,因为你将应用绑定姿势两次!

因此,为了修复意大利面条模型,您只需通过反向绑定姿势将得到的关节变换相乘,即可“撤消”已应用于模型的变换。

我希望这有点清楚......

答案 1 :(得分:6)

老实说,这篇文章有点完全可以解决。看起来反向绑定姿势矩阵用于将顶点变换为骨骼'局部坐标系。

这是必要的,因为骨头'转换是局部的(相对于它们的父关节)。因此,为了为顶点设置动画,您必须将其转换为骨骼的局部坐标系,计算骨骼的局部变换并将其转换回世界系统。