はじめに
3Dモデルの表現形式は非常に種類が多く、
使用できるアプリ、できること、できないことをはっきりさせておかないと大変です。
この記事では比較的多くのアプリケーションで使用でき、
表現能力もそこそこあるColladaについて紹介します。
Colladaとは
- 3Dモデルを配布するためのフォーマットで、xmlで記述される.拡張子dae。
- 元々はPS3用に作られたものである。
- 対応ソフトが多く、Blenderでも生成できる。
- ロボット系だとROSのロボットモデルであるURDFのメッシュにも使われている。
- v1.5とv1.4で多少違いがあり、どちらか一方にしか対応してないケースもあるので注意。
- ちなみにテクスチャやボーンにも対応しています。
Khronosからファイルフォーマットの詳細についてダウンロードできます。
日本語版もあり。(ソニー製だから?)
最小セットの例は?
ドキュメントの最後にキューブの例が載っています。
のと、一度blenderで簡単なモデル(デフォルトキューブも可)を
エクスポートして、エディタで開くのが楽でしょう。
どうやって読むの?
人間が読む場合を考えると、最低限xmlの知識が求められます。
公式のリファレンスカードにスキーマがわかりやすくまとめられています。
これと最小セットの例を照らし合わせると大体読めると思います。
最小セットから紐解いてみる
最小セットでは以下のような構造でデータを記述しています。
-
COLLADA
-
asset
- ファイルの属性など
-
library_effects
- material用のeffect
-
library_materials
- ここでmaterialにeffectを指定
-
library_geometries
-
geometry
- この中で頂点、法線、面を指定する
-
-
library_visual_scenes
-
visual_scene
-
node
ごとに座標系設定-
instance_geometry
でgeometry
をシーンに生成
-
-
-
-
scene
-
instance_visual_scene
でシーンを生成
-
-
参照が複雑だったり設定の重複が多い印象です。
プログラムで解釈する方法は?
ロボット系でよく使われるのはcollada-domでしょうか。
githubは軽量版で、フルサイズはsourceforgeにあります。
一方、pycolladaというpythonのライブラリもあります。
hogehogeで作ったdaeがfugafugaで読めないんだけど?
はいきた。
ここがColladaにおいて問題になる点で、
BlenderですらColladaで許容される表現を完全にインポートできていません。
問題になりそうな例をいくつか挙げると、
materialの指定がgeometryとbind_materialの双方で出来てしまう
最小セットの例でもわかりますが、
materialの指定できる箇所が二箇所あります。
library_geometry/geometry/polygons
library_visual_scenes/instance_geometry/bind_material
どちらかしか見てないソフトだと互換性が取れません。
blenderはそもそもmaterialの設定を上手く取れていない気がします。
geometryの中で複数の形状情報が許容されている
geometryが複数の形状情報(polygonsなど)を持つことが許容されていますが、
この場合blenderでは問答無用でgeometry単位で一つの部品になります。
またbind_materialがgeometryのidを指定しているため、
各形状情報でmaterialの色分けをした場合うまくいかないことが予想されます。
なんかこのdae壊れてない?
壊れてるかどうかをチェックしようと思うと、例えば次のようなことが考えられます。
- arrayで指定しているcountが正しいか
- urlを指定している場所でリンク切れがないか(bind_materialのtargetなど)
ちなみに、gazeboの場合bind_materialのtargetでリンク切れを起こすと静かに落ちます。
おわりに
Colladaは表現能力はそこそこ高いのですが、
以下のような問題点が挙げられると思います。
- 表現の自由度は高いが、対応を謳うソフトがそれに対応できるとは限らない。
- 各言語で取り扱える標準のパーサがない。