1

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 中的错误还是违反了 FBX 导出器的 Collada 规范?

4

2 回答 2

1

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

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

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

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

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

于 2014-03-18T19:43:01.010 回答
0

所以简短的回答是:这似乎是 OpenCollada 中的一个错误。

答案很长:

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

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

于 2013-08-01T21:46:46.960 回答