Animation 什么是逆绑定矩阵的正确映射?
glTF文件为每个蒙皮定义一个反向绑定矩阵数组和关节列表 假设关节列表为: {2,5,7,4,3,6} 如果我们移动它,使指数从0开始,我们得到 {0,3,5,2,1,4} 在这个场景中,Animation 什么是逆绑定矩阵的正确映射?,animation,graphics,3d,gltf,skeletal-mesh,Animation,Graphics,3d,Gltf,Skeletal Mesh,glTF文件为每个蒙皮定义一个反向绑定矩阵数组和关节列表 假设关节列表为: {2,5,7,4,3,6} 如果我们移动它,使指数从0开始,我们得到 {0,3,5,2,1,4} 在这个场景中,逆矩阵[2]可以指两件事中的一件。它可以引用数组中的第二个关节,即关节5,也可以引用关节2 同样的问题也适用于权重数组 换一种方式。如果从gltf文件按原样获取数据并将缓冲区加载到着色器中。我需要弄清楚如何将着色器中的顶点索引映射到对应的4个蒙皮矩阵 因此,如果关节[2]映射到(3,1,0,0) 我需要知道我是
逆矩阵[2]
可以指两件事中的一件。它可以引用数组中的第二个关节,即关节5,也可以引用关节2
同样的问题也适用于权重数组
换一种方式。如果从gltf文件按原样获取数据并将缓冲区加载到着色器中。我需要弄清楚如何将着色器中的顶点索引映射到对应的4个蒙皮矩阵
因此,如果关节[2]映射到(3,1,0,0)
我需要知道我是否应该在ibm[3]
和ibm[1]
或ibm[2]
和ibm[3]
获取反向绑定矩阵(因为joints[3]
处的值是2)
我希望这不会令人困惑。说(我的重点)
每个蒙皮由InverseBindMatrix
属性定义(该属性指向具有IBM数据的访问器),用于将蒙皮的坐标带入与每个关节相同的空间;以及一个joints
数组属性,该属性列出了用作关节的节点索引,以设置蒙皮动画关节的顺序在皮肤.关节
数组中定义,它必须与逆索引矩阵
数据的顺序匹配。
这直接回答了你的问题。我将在这里给出更详细的解释:
- 有两个ID:节点ID和关节ID
- 节点ID:
数组中节点的索引节点
- 关节ID:
数组中关节的索引关节
- 使用节点ID指定
数组中的关节;但关节ID不同关节
- 使用节点ID指定
“节点”:[
{ // 0
“名称”:“洞穴”
},
{ // 1
“名称”:“尾骨”,
},
//为布里维蒂剪断
{ // 29
“名称”:“根”
}
],
“皮肤”:[
{
“逆宾得矩阵”:6,
“关节”:[
29,
1.
]
}
]
对于该.glTF
,逆宾德矩阵[0]
将用于关节[0]
,该关节由节点29给出inverseBindMatrix[1]
将用于关节[1],该关节由节点1给出
如果我们移动它,使指数从0开始,我们得到
{0,3,5,2,1,4}
我认为这是不对的。你为什么要换班?在消化glTF数据并将其加载到您自己的结构中之前,您基本上只需要在节点ID和骨骼ID之间进行映射(在此之后,节点ID与骨骼ID不同没有任何用处)
计算蒙皮
矩阵时,请确保遵循关节
阵列的顺序。在上面的示例中,skin[0]
应该用于关节[0],即节点29
Node Bone
29 0
1 1