0. Index
- Introduction
- Namespaces
- Installation
- Download
- Bibliography
1. Introduction
LightWaveのデータファイルからの直接ロードをサポートするライブラリとして,Object, Scene Library(資料[1]),Teddy 3D(資料[2]),Luna(資料[3])などがあります.P/Invokeを用いれば,.NET Frameworkからこれらのライブラリを利用することも出来るでしょう.しかしStreamとの親和性やシリアライズサポート,セキュリティ保護の点で,新たにC#でネイティブ実装するに足るメリットがあると考えました.Surface,Texture,Clip周りのロードはフォーマットが複雑なため実装を後回しにし,まずはVer.0.1として最低限の情報のロードに対応したものをリリースします.
特徴は以下の通りです.
- StreamからLWO2形式のデータを読み込み,レイヤー・頂点・頂点マップ・ポリゴン・ポリゴンタグ情報・クリップ情報・サーフェイス情報を取得する
- StreamからLWS3形式のデータを読み込み,階層構造・モーション情報・一部のレンダリングパラメータを取得する
- モーション情報から補間されたモーションパラメータを計算するためのライブラリが付属
- シリアライズサポート
現バージョンでは以下のような情報の読み込みに対応できていません.
- LWS3のテクスチャ情報,サーフェイス情報及びClip情報全てが失われます
またロードしたデータの検証用に,LightWaveのデータをロードしXファイルのテキスト形式に変換するライブラリも作成しました.アニメーション付き階層構造のデータを出力可能です.アニメーションデータは元データのキーフレームの時刻及びその中間点時刻の姿勢情報を出力しています.本来出力時に計算すべきデータで,出力に対応していないデータは以下の通りです.
- 元データの階層名,メッシュ名は出力されません(Xファイル形式では名前に使える文字に制限があるため)
- 回転コントローラのTarget,IKには対応していません
- 法線情報,UVマップ情報,頂点カラー情報,頂点共有情報,ブレンディング係数の出力に対応していません
- ボーン情報の出力に対応していません
- 両面ポリゴンの展開に対応していません
2. Namespaces
ここではネームスペースごとにクラスの概要を説明していきます.
各クラスについての詳しい説明は,付属のヘルプをご覧下さい.
- LWLoader
-
LWLoaderネームスペースには本ライブラリで使用される基本的な型情報が定義されています.簡単なベクトル型に加え,FourCC構造体,ロード機能を公開するManagedLoaderクラス,時間変化する数値表現を行うEnvelopeInfoクラスなどが定義されています.また,オブジェクトファイル・シーンファイル両方で使用されるSurfaceInfoクラスとClipInfoクラスも,このネームスペースで定義されています.
- LWLoader.ObjectFile
-
LWLoader.ObjectFileネームスペースにはLWO2ファイル形式固有のデータを表現するための型情報が定義されています.MeshInfoクラスがLWO2ファイルに対応します.データはLWO2ファイル形式を強く意識した階層構造で保持しています.大抵のフィールドについてはLWO2ファイルフォーマット(資料[4])に対応しています.サーフェイス・テクスチャ情報は非常にデータ項目が多いため,現在はほとんど読み飛ばしています.
また,LWO2ファイル形式には法線やUVマップを計算するためのパラメータは格納されているのですが,計算後の値そのものは格納されていないことがあって,場合によっては自前で計算する必要があります.法線やUVマップの計算方法に関しては,前述のドキュメントやLuna(資料[3])のソースコードなどが参考になるでしょう. - LWLoader.SceneFile
-
LWLoader.SceneFileネームスペースにはLWS3ファイル形式固有のデータを表現するための型情報が定義されています.SceneInfoクラスがLWO3ファイルに対応します.データはLWO3ファイル形式を強く意識した階層構造で保持しています.大抵のフィールドについてはLWS3ファイルフォーマット(資料[5])に対応しています.サーフェイス・テクスチャ・クリップ情報に関しては,LWO2との兼ね合いもあって現在は完全に読み飛ばしています.LWS3ファイルからLWO2ファイルが参照されていても自動では読み込みません.ファイル名とレイヤー番号が記録されていますので,ユーザーの目的に応じて柔軟な対応が可能となっています.
- LWLoader.XFile
-
LWLoader.XFileネームスペースにはLightWave Data Loaderのデータ型からテキスト形式XFileへのエクスポータが利用する型が定義されています.エクスポータ本体であるExporterクラスと,専用コールバックであるMeshLoadHandlerデリゲート型が定義されています.
3. Installation
本ライブラリには2つのDLLが含まれています.依存関係や特権が少なくて済むようにロードルーチン本体と付加機能は分離してあります.
- LWLoader.dll
-
LightWave Data Loader本体の機能を利用するには,このDLLを参照設定に加えます.System.dll及びSystem.Drawing.dllに依存しています.
- LWX.dll
-
テキスト形式XFileへのエクスポータ本体です.LWLoader.dllに加え,Microsoft.DirectX.dll,Microsoft.DirectX.Direct3D.dll,Microsoft.DirectX.Direct3DX.dll(いずれもAssembly Version 1.0.1901.0)に依存しています,
4. Download
LWLib0.1.1568.zip
ReleaseビルドのLWLoader.dllとLWX.dllとヘルプのみが入っています.通常使用であればこちらのみダウンロードすれば十分です.
LWLib0.1.1568-src.zip
全てのソースファイルと,Xファイル形式エクスポータのテストコードが入っています.Visual C# .NET 2003形式のソリューションファイルとNDocのプロジェクトファイルも同梱されています.
5. Bibliography
参考資料
- Object, Scene Library[dstorm.co.jp]
→LightWave日本国内代理店であるDStormによるI/Oライブラリです.C言語用,ソース付き. - Teddy 3D Graphics Library[sourceforge.net]
→シーングラフ+LightWaveのローダー+SDLを利用したレンダラー.ソース付き. - DirectX用ライブラリLuna
→シーングラフ+LightWaveのローダー+DirectXを利用したレンダラー.ソース付き. - LWO version 2ファイルフォーマット[dstorm.co.jp]
→DSTORM社による日本語訳です. - LWS version 3ファイルフォーマット[dstorm.co.jp]
→DSTORM社による日本語訳です.