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>

このような Collada コードを OpenCollada フレームワークで解析すると、

Sax FWL Error: Could not resolve sid ...

ジョイント階層内のすべてのジョイントに対して。ただし、Maya-2013 はそのような collada を問題なくインポートできます。これは OpenCollada のバグですか、それとも FBX エクスポーターの Collada 仕様に違反していますか?

4

2 に答える 2

1

仕様の内容は次のとおりです (1.4.1、ページ 5-114)。

<source>「ジョイント:で (共有されていない) 要素によって参照される sid によって指定されたノード。ssemantic="JOINT"sid通常<Name_array>、1 つの名前が 1 つsid(ノード) を表す場所に格納されます。スキン コントローラのインスタンス化時に、<skeleton>要素はsidルックアップを開始する場所を定義します。 .ジョイント マトリックスは、実行時にこれらのノードから取得できます。"

<controller>これは、要素内のジョイント名配列の名前sidと 内のジョイント ノードの名前を照合するだけで十分であることを意味します。スケルトン要素は、一致するノードs の<visual_scene>検索を開始する場所を明示的に示します。sid

したがって、FBX エクスポーターは、OpenCOLLADA が読み取ることができる有効な COLLADA ファイルを (この場合に関する限り) 作成しています。OpenCOLLADA パッチを提出してくれた user2156664 に感謝します。

sidつまり、要素内で一致する s が見つかるルート ノードを明示的に指定することをお勧めします<skeleton>。その理由は、マーカスが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 に答える