■ 最初に
本連載記事では、Colladaファイル(拡張子:*.dae/*.zae)を読み込み、表示するプログラムを作成する。プログラムはJavaFXベースで説明するが、Colladaファイル・フォーマットの説明や、ファイル解析方法(解析器)の実装方針などはC言語など他の言語でも利用できるように心がける。
本連載記事では、Colladaファイル(*.dae / *.zae)を読み込める3Dモデルビュアの作成を目的とする。なお、筆者の学習・実験を兼ねているため、間違いや飽きて途中で放棄される可能性を排除しない。
モデルデータ:【巡音ルカモデル】(http://blender.rgr.jp/l/index.html)をBlenderにてColladaファイルにエクスポートしたもの
■ なぜライブラリを使わないか
本題に入る前にライブラリについて触れておく。3Dモデル・ライブラリは世に多く出回っている。例えばJavaFXでは『JavaFX™ 3D Model Importers』(url:
InteractiveMesh.org)により、Colladaをはじめ他の多くの3Dファイルが読み込めることは、『
JavaFX 3Dモデルデータの取込』に紹介した。
ただし、これら3Dモデル・ライブラリでは、同じ拡張子でも中身の読み方が違うために『あるソフトでは読み込めるけど、あるソフトでは読み込めない』ということが度々発生する。読み込めたとしても、一部崩れていてモデルを修正する必要があることも多い。ライブラリを使わず読み込みロジックを自作することで、これらの問題を主導的に解決できるのである。あとは、ゲーム作成の場合には高速化のため、独自のデータ構造を利用することができるなどのメリットもある。
■ Colladaファイル・フォーマット
Colladaファイル・フォーマットとは、ソニー・コンピュータ・エンタテイメントが提唱した3Dモデル用のファイルフォーマットである。PS3の公式開発フォーマットとして使われており、かの有名なSIGGRAPHでも発表され、いまやオープンスタンダード規格として広く使われている。Colladaファイル・フォーマットでは、頂点などのメッシュデータ(ジオメトリorスキン)に加えて、マテリアル(色やテクスチャ)、カメラ、光源、スキニング用のジョイント・ボーンやモーションデータも保持できる。
ファイル・フォーマットの詳細(ファイル仕様のドキュメントとXML Schema)は以下の公式ページを参照のこと。リンク先は英語だが、ドキュメントに関しては日本語のものがweb上に転がっているので探してみるのもよい。
■ 基本構造
Colladaはテキストとして保存されたXML文書である。このため読込に時間はかかるが、データをテキストエディタで確認できるため、デバッグがとても楽である。Colladaファイルができた理由としては、乱立する3Dモデルファイル間のコンバートに利用することが想定されているため、インポートした後は独自ファイル形式で保存するのが一般的と思われる。簡単な独自ファイル形式として、読み込んだデータをそのままシリアライズしてファイル保存するのが高速でかつ楽であると思われる。
Colladaファイルは、以下のようにColladaノードをルート・ノードとする構造化データである。例えばメッシュを利用したい場合は『library_geometries』ノードを解析して、データを取得する。ファイルの表示には、テキスト・エディタはもちろん、Webブラウザで開けば階層化された表示が行われる。
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>...</asset>
<library_cameras>...</library_cameras>
<library_lights>...</library_lights>
<library_images>...</library_images>
<library_effects>...</library_effects>
<library_materials>...</library_materials>
<library_geometries>...</library_geometries>
<library_controllers>...</library_controllers>
<library_visual_scenes>...</library_visual_scenes>
<scene>...</scene>
</COLLADA>
次回はColladaファイルの読み方を見ていく。