如何在没有<skeleton>(FBX COLLADA导出器)</skeleton> </instance_controller>的情况下处理<instance_controller>

时间:2013-07-30 20:55:46

标签: collada

Collada规范解释了instance_controller可以有骨架条目来定义联合层次结构的哪个子集将被搜索以找到关节,如:

<node>
  <instance_controller url="#skin">
    <skeleton>#root</skeleton>
    <bind_material>...</bind_material>
  </instance_controller>
</node>

但是如果没有这样的指示,它就不会告诉你该做什么。例如,<authoring_tool>FBX COLLADA exporter</authoring_tool>省略了骨架:

<node>
  <instance_controller url="#skin">
    <bind_material>...</bind_material>
  </instance_controller>
</node>

当我用OpenCollada框架解析这样的Collada代码时,我得到了

Sax FWL Error: Could not resolve sid ...

表示联合层次结构中的每个关节。 然而,Maya-2013可以毫无问题地导入这样的collada。那么这是OpenCollada中的Bug还是违反了FBX出口商的Collada规范?

2 个答案:

答案 0 :(得分:1)

这是规范所说的(1.4.1,第5-114页):

&#34;关节:由(非共享)元素<source>引用的semantic="JOINT"中的sid指定的节点。 sid通常存储在<Name_array>中,其中一个名称代表一个sid(节点)。在实例化皮肤控制器时,<skeleton>元素定义了sid查找的起始位置。联合矩阵可以在运行时从这些节点获得。&#34;

这意味着将<controller>元素中联合名称数组中的名称与sid中的联合节点的<visual_scene>相匹配就足够了,骨架元素只是明确地告诉您开始搜索匹配的节点sid s。

因此,FBX Exporter正在生成一个有效的COLLADA文件(就本案而言)OpenCOLLADA应该能够读取。感谢user2156664提交OpenCOLLADA补丁。

也就是说,最好明确指定可在sid元素中找到匹配<skeleton>的根节点。原因在于,否则可能存在歧义,或者需要为节点提供文档范围的唯一ID,这限制了钻机的重复使用,正如marcus在http://collada.org/public_forum/showthread.php/1390-max-2011-collada-missing-skeleton-node?p=5395&viewfull=1#post5395中所解释的那样。因此,这仍然可以被视为FBX Exporter错误。

答案 1 :(得分:0)

所以简短的回答是:它似乎是OpenCollada中的一个Bug。

答案很长:

我深入研究了OpenCollada,实际上skinController代码准备好在没有指定条目的情况下搜索所有关节。它只是没有用,因为一个错误导致“没有关节可用于搜索”而不是“搜索所有关节”。我为OpenCollada创建了一个补丁,并向他们发送了拉取请求。

以下是拉取请求的链接:https://github.com/KhronosGroup/OpenCOLLADA/pull/209