エルフレイナ独自のファイル内部の形式を説明します。
[.elp]ファイル
エルフレイナで出力するプロジェクトファイルです。このファイルはエルフレイナのバージョンによってパラメータなどが変わることが多いので載せていません。
ファイル形式
テキストファイルです。
文字コード
ファイルの文字コードは「UTF-8」です。
[.elem]ファイル
「エルフレイナ拡張モデルファイル」です。「モデルデータ」「階層構造」「レンダリングメッシュリスト」「アニメーションデータ」を含むことが出来ます。
対応エルフレイナバージョン
エルフレイナ Ver1.1 時点でのフォーマットです。
ファイル形式
テキストファイルです。
文字コード
ファイルの文字コードは「UTF-8」です。
テキストの基本形式
「.elp」「.elem」ファイルともにテキストの構成は下のようになっています。
MeshDatas {
MeshContainerCount=1
MeshContainer {
Name="ルーン"
MeshCount=12
VertexFormat {
"Position"
"Normal"
"Texture1"
}
}
}
ヘッダ
最初の2行はヘッダです。1行目は上記の通りです。2行目はファイルフォーマットのバージョンですが、変わることはめったにありません。
タグとスコープ
MeshDatas {
;
;
}
青文字がタグ名と呼ばれ、そのあとにある「{ }」の間を「MeshDatas のスコープ」と呼びます。「タグ名」と「{」は同じ行になければいけません。
スコープの中には「複数のデータ(キーも)」「複数のスコープ」が含まれます。
キーとデータ
MeshContainerCount=1
MeshContainer {
Name="ルーン"
MeshCount=12
VertexFormat {
"Position"
"Normal"
"Texture1"
}
}
緑の文字がキー、赤の文字がデータとよばれ、キーとデータの間は「=」で区切られます。データが文字列の場合は「""(ダブルクォーテーション)」で囲まれます。
キーやデータが途中で改行されることは基本的にありません。
例として、上のテキストの3行目のデータは「MeshDatas スコープ内の
MeshContainer スコープ内の Name キーの
"ルーン" データ」となります。
また、= で区切られていない単体文字列の場合は「データ」のみとなります。この場合は、スコープ内に列挙されることが多いです。
キーとデータの並び順、またスコープの並び順は基本的に関係ありません。ただし、データのみの列挙は場合により並び順が関係することがあります。
補足ですが、一番最初の2行のヘッダは、実はデータであり「グローバルスコープ内のデータ」という風に定義されています。
複数のデータ
Ambient=0.43:0.43:0.43:0.43
3,0:1:2
場合によってはひとつのキーに複数のデータが含まれることがあります。この場合は、データとデータの間に「:(コロン)」の区切り文字が入ります。
また、第2分割方法として、「,(コンマ)」が使用されることがあります。データの内容をより分割する場合に使用します。
複数のデータがある場合は、上の方法かスコープで列挙される形のどちらかが使用されます。
フォーマット(設定データ)
Setting スコープ
汎用設定データが含まれます。
キー一覧
SoftVersion または
ElfreinaSoftVersion |
0.0 ~ |
.elem ファイルを保存したエルフレイナのソフトバージョンです。 |
| LoadType |
文字列 |
.elem ファイルのデータタイプです。現在「View」のみです。 |
フォーマット(モデルデータ)
MeshDataList スコープ
モデルデータ(メッシュ)を保存しているスコープです。エルフレイナ Ver 1.00 時点ではひとつのメッシュしか保存されませんが、複数のメッシュを保存させることも出来ます。
キー一覧
| MeshContainerCount |
0 ~ |
メッシュコンテナの数です。MeshContainer のスコープ数でもあります。 |
スコープ一覧
| MeshContainer |
メッシュのデータを含みます。 |
MeshContainer スコープ
メッシュ作成に必要なデータが含まれています。
キー一覧
| Name |
任意の名前 |
メッシュの名前です。 |
| BoneCount |
0 ~ |
メッシュに使われるボーンの数です。 |
| MeshCount |
0 ~ |
メッシュ内で明示的に分割されているメッシュの数です。Mesh スコープの数でもあります。 |
スコープ一覧
| VertexFormat |
メッシュを作成するときに必要な頂点フォーマットの一覧です。 |
| BoneNames |
ボーンの名前リストです。 |
| OffsetMatrices |
座標変換に使用されるオフセットマトリックスのリストです。ボーンの名前のインデックスと一致しています。 |
| Materials |
材質色やテクスチャーなどを含みます。 |
| Mesh |
メッシュの頂点位置や面情報などを含みます。 |
VertexFormat スコープ
メッシュを作成するときに必要な頂点フォーマットの一覧です。キーは存在せず、必要なデータのみが列挙されます。
データ一覧
| Position |
頂点情報に位置情報が含まれることを示します。 |
| Normal |
頂点情報に法線情報が含まれることを示します。 |
| Blend |
頂点情報に頂点ブレンドデータ情報が含まれることを示します。 |
| Diffuse |
頂点情報にディフューズ色情報が含まれることを示します。 |
| Texture |
頂点情報にテクスチャー用UV座標情報が含まれることを示します。 |
BoneNames スコープ
メッシュで使用されるボーンの名前リストが列挙されています。名前の並びはボーンの座標変換パレットのインデックスと一致するようになります。
OffsetMatrices スコープ
メッシュで使用されるボーンのオフセットマトリックスです。BoneNames に列挙されている名前とインデックスが一致されています。
Materials スコープ
複数のマテリアル情報が含まれています。
キー一覧
| MaterialCount |
0 ~ |
マテリアルの数です。Material スコープの数でもあります。 |
スコープ一覧
| Material |
個別のマテリアル情報が含まれます。 |
Material スコープ
材質色やテクスチャー情報が含まれています。
キー一覧
| Name |
マテリアルの名前 |
マテリアルの名前です。 |
| Diffuse |
(全て 0.0 ~ 1.0)a:r:g:b |
ディフューズ(基本)色です。左から「Alpha」「Red」「Green」「Blue」となります。 |
| Ambient |
(全て 0.0 ~ 1.0)a:r:g:b |
環境光に対する色です。 |
| Emissive |
(全て 0.0 ~ 1.0)a:r:g:b |
発光色です。 |
| Specular |
(全て 0.0 ~ 1.0)a:r:g:b |
反射色です。 |
| SpecularSharpness |
0.0 ~ |
反射光に対する鋭さです。 |
| TextureFilename |
ファイル名(絶対パスか相対パス) |
テクスチャーのファイル名です。相対パスの場合は、操作している ELEM ファイルからの相対パスになります。 |
Mesh スコープ
メッシュコンテナ内で分割されているメッシュを保存しています。エルフレイナなどでメッシュ表示切替やアニメーションなどで個別に切り替えが出来るようになります。
キー一覧
| Name |
任意の名前 |
メッシュの名前です。パーツごとの名前になることが多いです。 |
| VertexCount |
0 ~ |
メッシュの頂点数です。 |
| FaceCount |
0 ~ |
メッシュの面(ポリゴン)数です。 |
スコープ一覧
| Positions |
頂点の位置データを格納します。 |
| Normals |
頂点の法線データを格納します。 |
| Diffuse |
頂点のディフューズ色データを格納します。 |
TextureUV または
Texture1UV ~ Texture8UV |
頂点のテクスチャーUV座標データを格納します。各頂点にUV座標がひとつしかない場合は、タグ名が「TextureUV」のように数字が付かないこともあります。 |
| Blends |
頂点のブレンドデータを格納します。 |
| BlendIndices |
頂点のブレンドのインデックスを格納します。 |
| VertexIndices |
面の画数と、頂点のインデックスを格納します。 |
| Attributes |
面のマテリアルインデックスを格納します。 |
Positions スコープ
頂点の位置データが列挙されます。
データ一覧
| (全て double)x:y:z |
頂点の位置。左から「x」「y」「z」 |
Normals スコープ
頂点の法線データが列挙されます。
データ一覧
| (全て double)x:y:z |
頂点の法線。左から「x」「y」「z」 |
Diffuse スコープ
頂点のディフューズ色データが列挙されます。
データ一覧
| (全て double)a:r:g:b |
頂点のディフューズ色。左から「Alpha」「Red」「Green」「Blue」 |
BlendList スコープ
頂点ブレンドに関するデータが列挙されます。
スコープ一覧
| BlendPart |
各ボーンに対応した頂点インデックスなどが格納されています。 |
BlendPart スコープ
各ボーンに対応した頂点インデックスなどが格納されています。
キー一覧
| BoneName |
名前 |
対応するボーンの名前です。 |
| TransformIndex |
0 ~ |
座標変換パレットのインデックスです。 |
スコープ一覧
| VertexBlend |
ボーンに対応した頂点データが列挙されています。 |
VertexBlend スコープ
ボーンに対応した頂点インデックスとウエイト値が列挙されています。
データ一覧
| index, weight |
左が頂点のインデックス、右がボーンに対する頂点のウエイト値です。 |
TextureUV スコープ
頂点のテクスチャ UV座標データが列挙されます。
データ一覧
| (全て double)u:v |
頂点のテクスチャーUV座標。左から「u」「v」 |
VertexIndices スコープ
面の画数、頂点インデックスが列挙されます。
データ一覧
| 画数,頂点インデックス1:頂点インデックス2:… |
左が面の画数、「,(コンマ)」をはさんで、画数分の頂点のインデックスが並んでいます。 |
Attributes スコープ
面のマテリアルインデックスが列挙されます。
データ一覧
フォーマット(階層構造データ)
HierarchyList スコープ
階層データが含まれています。
スコープ一覧
| Node |
階層データです。階層データはネスト構造になっています。 |
Node スコープ
オフセットマトリックスや、初期姿勢データが含まれています。このデータは階層化されています。
キー一覧
| NodeName |
名前 |
ノードの名前です。 |
| InitPostureMatrix |
Matrix M11:M12:… |
初期姿勢用マトリックスです。このパラメータは基本的に「アニメーションマトリックス」×「初期姿勢マトリックス」×「親のマトリックス」で構成されています。 |
スコープ一覧
| Node |
階層データです。階層データはネスト構造になっています。 |
フォーマット(レンダリングメッシュリスト)
RenderingMeshList スコープ
レンダリングメッシュリストのデータが含まれています。
キー一覧
| RenderingMeshCount |
0~ |
描画するメッシュの数です。RenderingMesh スコープの数でもあります。 |
スコープ一覧
| RenderingMesh |
描画するメッシュに関連するデータが含まれています。 |
RenderingMesh スコープ
描画するメッシュの名前と、使用する階層データの名前が列挙されています。
キー一覧
| RenderingMeshName |
名前 |
描画するメッシュの名前です。MeshContainer スコープ内の名前が使用されます。 |
| HierarchyNamesCount |
0~ |
描画するときに使用される階層データの数です。 |
スコープ一覧
| HierarchyNames |
階層データの名前が列挙されています。 |
HierarchyNames スコープ
階層データの名前が列挙されています。これは主にスキンメッシュなどの座標変換パレットでどのマトリックスを使用するかを決めるためにあります。
頂点ブレンドを使用しない場合は、基本的にここに列挙されるデータは1つのみになります。
データ一覧
フォーマット(アニメーションデータ)
AnimationList スコープ
アニメーションに関係するデータが含まれています。
キー一覧
| AnimationCount |
0~ |
アニメーションの数です。AnimationData スコープの数でもあります。 |
スコープ一覧
| AnimationData |
個々のアニメーションデータが含まれます。 |
AnimationData スコープ
個々のアニメーションデータが含まれます。
キー一覧
| AnimationName |
任意の名前 |
アニメーションの名前です。 |
| AnimationTime |
1~ |
アニメーション1ループ分の再生時間です。単位は(ms) |
| FrameParSecond |
1~ |
1秒間のアニメーションフレーム数です。 |
| TransitionTime |
0~ |
アニメーションの変更にかかる時間です。現在、アニメーション変更中は線形式でアニメーションの重みがかかるようになっています。 |
| Priority |
-0x7fffffff~0x7fffffff |
アニメーションの優先度です。複数のアニメーションを再生しているときに、どのアニメーションから計算されるかを決めるためのパラメータです。 |
| Loop |
True or False |
アニメーションを再生したときにループさせるかを指定するフラグです。 |
スコープ一覧
| BoneAnimation |
ボーンアニメーションに関わるデータが含まれます。 |
| UVAnimation |
UVアニメーションに関わるデータが含まれます。 |
BoneAnimation スコープ
ボーンアニメーションに関わるデータが含まれます。
スコープ一覧
| TimeKeys |
全体のボーンアニメーションの時間キーが列挙されています。 |
| AnimationPart |
個々のアニメーションパート(ボーンごとのアニメーション)データが含まれています。 |
AnimationPart スコープ
ボーンごとのアニメーションデータが含まれます。
キー一覧
| NodeName |
名前 |
対応するボーン(ノード)の名前です。 |
スコープ一覧
| TimeKeys |
時間キーです。1.0 が AnimationTime と同じ時間になります。 |
| TransKeys |
平行移動パラメータです。「X:Y:Z」と定義されています。 |
| RotateKeys |
クォータニオンによる回転パラメータです。「X:Y:Z:W」と定義されています。 |
| ScaleKeys |
拡大パラメータです。「X:Y:Z」と定義されています。 |
UVAnimation スコープ
UVアニメーションに関わるデータが含まれます。
スコープ一覧
| TimeKeys |
全体のボーンアニメーションの時間キーが列挙されています。実際には個々のパートのアニメーションデータが優先されるので、このデータは目安でしかありません。 |
| AnimationPart |
個々のアニメ ションパートデータが含まれています。 |
AnimationPart スコープ
個々のアニメーションデータが含まれます。
キー一覧
| MeshContainerName |
名前 |
対応するメッシュコンテナの名前です。 |
| MaterialName |
名前 |
対応するマテリアルの名前です。 |
スコープ一覧
| TimeKeys |
時間キーです。1.0 が AnimationTime と同じ時間になります。 |
| TransKeys |
平行移動パラメータです。「X:Y」と定義されています。 |
| RotateKeys |
回転パラメータです。単位は Radian。 |
| ScaleKeys |
拡大パラメータです。「X:Y」と定義されています。 |