【问题标题】:OpenGL : Bone Animation, Why Do I Need Inverse of Bind Pose When Working with GPU?OpenGL:骨骼动画,为什么在使用 GPU 时需要反向绑定姿势?
【发布时间】:2013-06-12 06:06:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: opengl glsl skeletal-mesh


    【解决方案1】:

    老实说,这篇文章有点难以完全完成。似乎反向绑定姿势矩阵用于将顶点转换到骨骼的局部坐标系。

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

    【讨论】:

    • 那个时候,我想我理解了背后的想法。我们已经上传了绑定姿势的顶点,我只需要根据当前骨架对它们进行变换。由于我的所有顶点都已经在世界空间中,我需要将新骨架的绝对矩阵转换为关节空间,因为我需要偏移,然后将结果与我的顶点相乘,最后与模型视图矩阵相乘。
    【解决方案2】:

    作为那篇文章的原作者,我将尝试解释乘以逆绑定姿势的作用:

    “反向绑定姿势”基本上“撤消”任何已经应用到模型绑定姿势的变换。

    这样考虑: 如果您将单位矩阵应用于模型中的每个关节,那么您将获得处于绑定姿势的模型(您可以通过发送一个填充了单位矩阵的骨架框架来尝试此操作。如果结果是绑定姿势,那么您就是做对了)。

    如果您将绑定姿势矩阵(未反转)应用于模型中的每个关节,那么您将得到意大利面条,因为您将应用绑定姿势两次!

    因此,要修复意大利面条模型,您只需将生成的关节变换乘以反向绑定姿势即可“撤消”已应用于模型的变换。

    我希望这能澄清一点......

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2017-05-03
      • 2017-05-05
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2012-10-17
      相关资源
      最近更新 更多