Engine

テラインモデルファイル | ファイルフォーマット

テラインモデルファイル　( *.mtm )　のフォーマットリファレンスです。
Version 1.0.0.0

最初のフォーマット

Version 1.1.0.0

[Chg] | ???

ファイルヘッダ
情報ヘッダ
マテリアルスロット
メッシュ
ノード
コライダー

ファイルヘッダ

ファイルヘッダはテラインモデルファイルを識別するためのものになります。

ファイルヘッダ ( MTM_FILE_HEADER 構造体 )

- MTM_FILE_HEADER

名前 | 型 | 説明 | 値
--- | --- | --- | ---
magic | UInt32 | マジック値 | 0x464D544D
version | UInt32 | バージョン | 0x01010000

情報ヘッダ

情報ヘッダはテラインモデル全般の情報を記述します。

情報ヘッダ ( MTM_INFO_HEADER 構造体 )

- MTM_INFO_HEADER 構造体

名前 | 型 | 説明
--- | --- | ---
numMaterialSlot | UInt32 | マテリアルスロットの数
numMesh | UInt32 | メッシュの数
numNode | UInt32 | ノードの数
collShapeSize | UInt32 | コライダーのシリアライズされたシェイプのサイズ ( バイト単位 )
numCollPolygon | UInt32 | コライダーのポリゴン数
numCollPhysicsMaterial | UInt32 | コライダーの物理マテリアルの数

マテリアルスロット

マテリアルスロットは、MTM_INFO_HEADER::numMaterialSlot の値の数だけ存在します。

マテリアルスロット
・
・
・

また、マテリアルスロットは以下のような構造になります。

名前 ( wchar_t[32] )
マテリアルファイル ( *.mtl ) が書き込まれます。 フォーマットはマテリアルファイルを参照してください。 ※ マジック値は書き込まれません

メッシュ

メッシュの記述
セクション
バーテックスバッファ
インデックスバッファ

メッシュの記述

メッシュの記述 ( MTM_MESH_DESC 構造体 )

- MTM_MESH_DESC

名前 | 型 | 説明
--- | --- | ---
numSection | UInt32 | セクションの数
vertexStride | UInt32 | バーテックスのストライド ( バイト単位 )
numVertex | UInt32 | バーテックスの数
indexStride | UInt32 | インデックスのストライド ( バイト単位 )
numIndex | UInt32 | インデックスの数
reserve | UInt32 | 予約領域

セクション

セクションはマテリアル単位で分割されており、MTM_MESH_DESC::numSection の値の数だけ存在します。

セクション
・
・
・

また、セクションは以下のような構造になります。

セクションの記述 MTM_MESH_SECTION_DESC
不透明描画のパート MTM_MESH_OPACITY_PART [ MTM_MESH_SECTION_DESC::numOPPart ]
半透明の一括描画のパート MTM_MESH_TRANSPARENCY_PART [ MTM_MESH_SECTION_DESC::numTLPart ]
半透明のポリゴン単位の描画のパート MTM_MESH_TRANSPARENCY_PART [ MTM_MESH_SECTION_DESC::numTIPart ]

- MTM_MESH_SECTION_DESC 構造体

名前 | 型 | 説明
--- | --- | ---
materialSlotIndex | UInt32 | マテリアルスロットのインデックス
numOPPart | UInt32 | 不透明のパート数
numTLPart | UInt32 | 半透明 ( 一括描画 ) のパート数
numTIPart | UInt32 | 半透明 ( ポリゴン単位の描画 ) のパート数

- MTM_MESH_OPACITY_PART 構造体

名前 | 型 | 説明
--- | --- | ---
baseVertex | UInt32 | バーテックスバッファの読み取り開始位置
numVertex | UInt32 | バーテックスの数
baseIndex | UInt32 | インデックスバッファの読み取り開始位置
numIndex | UInt32 | インデックスの数

- MTM_MESH_TRANSPARENCY_PART 構造体

名前 | 型 | 説明
--- | --- | ---
baseVertex | UInt32 | バーテックスバッファの読み取り開始位置
numVertex | UInt32 | バーテックスの数
baseIndex | UInt32 | インデックスバッファの読み取り開始位置
numIndex | UInt32 | インデックスの数
sortKey | Float32[3] | ソートキー { X, Y, Z }
reserve | UInt32 | 予約領域

バーテックスバッファ

バーテックスバッファは、メッシュを構成する頂点の集合です。
また、バーテックスバッファのバイト単位のサイズは、MTM_MESH_DESC::vertexStride * MTM_MESH_DESC::numVertex になります。

インデックスバッファ

インデックスバッファはポリゴンを形成する頂点を参照するためのインデックスの集合です。
プリミティブの種類はトライアングルリストになります。
また、インデックスバッファのバイト単位のサイズは、MTM_MESH_DESC::indexStride * MTM_MESH_DESC::numIndex になります。

ノード

ノードは MTM_INFO_HEADER::numNode の値の数だけ存在します。

ノード ( MTM_NODE 構造体 )
・
・
・

- MTM_NODE 構造体

名前 | 型 | 説明
--- | --- | ---
aabbMin | Float32[3] | AABB の最小値
aabbMax | Float32[3] | AABB の最大値
meshIndex | Int32 | メッシュのインデックス メッシュを所持しない場合は -1 になります。
parentIndex | Int32 | 親ノードのインデックス 親ノードが存在しない場合は -1 になります。
numChild | Int32 | 子ノードの数
childs | Int32[8] | 子ノードの参照用インデックス配列
reserve | UInt32 | 予約領域

コライダー

コライダーは、

( MTM_INFO_HEADER::collBinarySize > 0 ) &&
( MTM_INFO_HEADER::numCollPolygon > 0 ) &&
( MTM_INFO_HEADER::numCollPhysicsMaterial > 0 )

の場合に存在します。

シェイプ ( UInt8 [ MTM_INFO_HEADER::collBinarySize ] ) ※ Bullet の btBvhTriangleMeshShape をシリアライズしたものになります
ポリゴンのマテリアル参照用インデックステーブル ( UInt32 [ MTM_INFO_HEADER::numCollPolygon ] ) ※ 値は物理マテリアルリストのインデックスになります
物理マテリアルリスト ( MTM_PHYSICS_MATERIAL [ MTM_INFO_HEADER::numCollPhysicsMaterial ] )

- MTM_PHYSICS_MATERIAL 構造体

名前 | 型 | 説明
--- | --- | ---
id | Int32 | 識別子
attr | Int32 | 属性
friction | Float32 | 摩擦係数
restitution | Float32 | 反発係数