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

den*_*niz 7 opengl glsl skeletal-mesh

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

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

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

小智 15

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

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

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

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

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

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


Nic*_*ler 6

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

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