【问题标题】:What is the correct mapping of inverse bind matrices?逆绑定矩阵的正确映射是什么?
【发布时间】:2021-03-02 10:02:22
【问题描述】:

glTF 文件为每个皮肤定义了一个反向绑定矩阵数组和一个关节列表。

假设关节列表是:

{2,5,7,4,3,6}

如果我们移动它以使索引从 0 开始,我们得到

{0,3,5,2,1,4}

在这种情况下,inverse_matrix[2] 可以指两件事之一。它可以引用数组中的第二个关节,即关节5,也可以引用关节2。

同样的问题也适用于权重数组。

换一种方式。如果从 gltf 文件中获取数据并将缓冲区加载到着色器中。我需要弄清楚如何将着色器中的顶点索引映射到其对应的 4 个皮肤矩阵。

所以如果joints[2] maps to (3,1,0,0)

我需要知道我是否应该在ibm[3]ibm[1]ibm[2]ibm[3] 获取逆绑定矩阵(因为joints[3] 的值是2)。

我希望这不会令人困惑。

【问题讨论】:

    标签: animation graphics 3d gltf skeletal-mesh


    【解决方案1】:

    glTF 2.0 specification § Skins 说(强调我的)

    每个皮肤由inverseBindMatrices 属性定义(它指向一个带有IBM 数据的访问器),用于将被皮肤的坐标带入与每个关节相同的空间;和一个joints 数组属性,它列出了节点索引,这些节点索引用作关节来为皮肤设置动画。 关节的顺序在skin.joints数组中定义,必须与inverseBindMatrices数据的顺序一致。

    这直接回答了您的问题。我将在这里给出更详细的解释:

    • 有两个ID:节点ID和关节ID
    • 节点 ID:nodes 数组中节点的索引
    • 关节 ID:joints 数组中关节的索引
      • joints 数组中的关节用节点 ID 指定;联合ID不同
        "nodes" : [
            {                           // 0
                "name" : "Cave"
            },
            {                           // 1
                "name" : "TailBone",
            },
            // snipped for brievity
            {                           // 29
                "name" : "Root"
            }
        ],
        "skins" : [
            {
                "inverseBindMatrices" : 6,
                "joints" : [
                    29,
                    1,
                ]
            }
        ]
    

    对于这个.glTFinverseBindMatrix[0] 将是对于joint[0],这个关节由节点 29 给出; inverseBindMatrix[1] 将用于joint[1],此连接由节点 1 给出。

    如果我们移动它以使索引从 0 开始,我们得到

    {0,3,5,2,1,4}

    我不认为这是正确的。你为什么要转?您基本上只需要一个节点 ID 到骨骼 ID 之间的映射,直到您将 glTF 数据消化并加载到您自己的结构中(之后节点 ID 与骨骼 ID 不同,没有用处)

    Node   Bone
    29      0
    1       1
    

    在计算skin 矩阵时,请确保遵循joints 数组的顺序。在上面的例子中,skin[0] 应该是 joints[0],即节点 29。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多