2013-07-30 46 views
1

中的COLLADA規範解釋,一個instance_controller可具有骨架條目以限定一個關節層級的子集將被搜索以找到關節,如:如何處理一個<instance_controller>未經<skeleton>(FBX COLLADA出口)

<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中的一個Bug還是違反了FBX導出器中的Collada規範?

回答

0

那麼簡單的答案是:這似乎是在OpenCollada一個Bug。

和長回答:

我花了深入探討OpenCollada,實際製備時在指定的位置沒有條目搜索所有關節skinController代碼。它只是因爲導致「沒有可用於搜索的關節」而不是「搜索所有關節」的錯誤而無法工作。我爲OpenCollada創建了一個補丁,並向他們發送了一個pull請求。

這裏是鏈接到拉請求:https://github.com/KhronosGroup/OpenCOLLADA/pull/209

1

這裏的規範說什麼(1.4.1,5-114頁):

「接頭:希德在<source>指定節點簡稱(非共享)元素semantic="JOINT"sid s通常存儲在<Name_array>中,其中一個名稱表示一個sid(節點)。在實例化外觀控制器時,元素定義從何處開始sid查找。可以在運行時從這些節點中獲得。「

這意味着與關節節點在<visual_scene>sid<controller>元件匹配從關節名數組名稱就足夠了,骨架元素只是告訴你明確從哪裏開始你的一致節點sid的搜索。

因此,FBX導出器產生一個有效的COLLADA文件(只要這種情況而言)是OpenCOLLADA應該能夠閱讀。感謝user2156664提交OpenCOLLADA補丁。

也就是說,最好明確指定可以在<skeleton>元素中找到匹配sid的根節點。原因在於,否則可能存在歧義,或者需要具有針對該節點的文檔範圍的唯一ID,這限制了鑽機的重用,如marcus在http://collada.org/public_forum/showthread.php/1390-max-2011-collada-missing-skeleton-node?p=5395&viewfull=1#post5395中所解釋的。所以這仍然可以被視爲FBX導出器錯誤。