502.タンジェントがついていないモデルのデータ変換
Fbx2BinVS2015でデータ変換できるFBXファイルは、以下のようなデータです。
1、PNTフォーマットのスタティックモデル
2、PNTフォーマットのアニメーション付きモデル(ボーン付き)
3、PNTnTフォーマットのスタティックモデル(タンジェント付き)
4、PNTnTフォーマットのアニメーション付きモデル(タンジェント・ボーン付き)
それぞれ現時点では
1つのFBXファイルに1つのメッシュの対応です。FBXファイルは複数のメッシュも実装できますが、現時点では未対応です。
また
アニメーション付きモデルについては
つながったボーンである必要があります。詳しくは次項以降を参照ください。
PNTフォーマットのスタティックモデル
Fbx2BinVS2015にはいくつかのサンプルがあります。
Fbx2BinVS2015\mediaディレクトリにありますが、まず、
Chara1ディレクトリにある
スタティックモデルを読み込んでみます。
ファイル・FBXファイルを開くで以下のようなダイアログが出ます。
図0502a
ここで
ファイルの参照をクリックして
Fbx2BinVS2015\media\Chara1\Character_01.fbxを選んでみましょう。以下のような感じです。
図0502b
ここで
スケーリングを
0.01にしているのは、ゲームの単位系とモデルの単位系は必ずしも同じとは限らないからです。ゲームは
BaseCrossの場合は
1.0は1メートルです。しかし、モデルの場合
1.0が
1センチのつもりで作成されているかもわかりません。本当であれば、モデル作成する前に合わせておくのが望ましいです。
読み込むと以下のような画面が現れます。
図0502c
このモデルは
アニメーションもしないし、法線マップ(タンジェント)も実装しないスタティックモデルです。
アニメーションメニューを開いても選択できません。
この
Fbx2BinVS2015で読めるFBXファイルはいくつかの制約があります
1、インデックスごとに頂点が必要
2、1つの頂点に設置できる法線は一つ
3、複数のテクスチャは使用できるが、マテリアルを分ける必要がある。
3について、少し解説しますと、基本的に1つのモデルには1つのテクスチャ、を奨励しますが、
複数のテクスチャを利用できないわけではありません。ただ
1つの頂点に複数のテクスチャを設定できるわけではありませんので、テクスチャごとに
マテリアルを分けるデータになっていれば複数のテクスチャを扱えます。
それでは、
.bmfファイルを保存してみます。
ファイル・バイナリファイルの保存で以下のダイアログが出ます。
図0502d
ここで
OKをクリックすれば
FBXファイルと同じディレクトリに
.bmfファイルが保存されます。
PNTフォーマットのアニメーション付きモデル(ボーン付き)
続いて
ボーン付きモデルについて説明します。上記の要領で
Fbx2BinVS2015\media\Chara_R\Chara_R.fbxを開いてみましょう。スケーリングは上記同様
0.01です。以下の画面が出ます。
図0502e
今度は左上に
0.000000という数字と
ANIME: STOPと出ています。
ここで、
アニメーション・FBXファイルを動かすを選択してください。すると以下のダイアログが出ますので、以下のような設定をします。
図0502f
ここでの設定の意味ですが、
フレーム数というのは
1秒当たりのサンプリングする値です。これはFBXファイル作成時に合わせるのもいいですが、書きだすフレーム数と連動します。
FBXから
.bmfへのデータ変換は
サンプリングという考え方で変換します。つまり、1秒のうち、ボーンの行列を
いくつサンプリングするかという考え方です。当然細かいほうがFBXを作成した内容に近くなります。
しかし、実際にゲームでは必ずしも
細かいほうが良いとは限りません。スピード感を出すゲームであればサンプル数は少なくして再生速度も速くすることで
コミカルなあるいはスピード感のある演出が可能ですしメモリも圧迫しません。
そのあたりはグラフィッカーと協議の上決めるといいでしょう。
話は戻りますが、ここでの設定は
10フレーム/秒で
4秒間ですから、サンプル数は40個になります。1つのサンプルには
ボーン行列の配列になりますので、アニメーションデータ量は
40×ボーン数×行列のサイズになります。
このダイアログで
再生をクリックするとアニメーションが再生されます。左上に
現在再生されてる秒が表示されます。画面を
ダブルクリックすると
停止・再生を繰り返します。
アニメーションに対する制限は
1ラインで作成するということです。FBXでは複数のアニメーションラインを設定できますが、
Fbx2BinVS2015では対応されてません。
では
待機、
歩くといったアニメーションの違いはどう設定するかということですが、
1ライン中の
何秒目から何秒間は歩きのような関係になります。こちらは
ゲームで使用するときに
アニメーション設定というのを行いますので、
つながっていてもいいことになります。
ここで紹介したサンプルも、いくつかのアニメーションが連続して入っています。
それでは
アニメーション付きモデルの保存をしてみましょう
ファイル・バイナリファイルの保存で保存ダイアログが出ます。ここで出てくる
サンプリングは再生時の
フレーム数と同じです。また保存する秒数も
再生秒数と同じです。変更する場合は内容を変更してください。
図0502g
OKで
FBXと同じディレクトリに
.bmfファイルを保存します。
.bmfファイルの表示
このあと、作成した
.bmfファイルをゲームで表示したサンプルは
FullSample502というサンプルです。起動すれば以下の画面が現れます。
実装方法は
FullSample404を参考にしてください。以下が実行画面です。
図0502h
ただ1点、このサンプルはツールで作成したモデルの表示の参考のため、
mediaディレクトリにリソースが保存してあります。
また、メッシュのリソース化は
Scene.cppに記述がありますが、以下のように記述があります。
void Scene::CreateResourses() {
wstring DataDir;
//サンプルのためアセットディレクトリを取得
App::GetApp()->GetAssetsDirectory(DataDir);
wstring strTexture = DataDir + L"trace.png";
App::GetApp()->RegisterTexture(L"TRACE_TX", strTexture);
strTexture = DataDir + L"sky.jpg";
App::GetApp()->RegisterTexture(L"SKY_TX", strTexture);
//データディレクトリを取得
wstring MediaDir;
App::GetApp()->GetDataDirectory(MediaDir);
//スタティックモデルのリソース
auto StaticModelMesh
= MeshResource::CreateStaticModelMesh(MediaDir + L"Chara1\\", L"Character_01.bmf");
App::GetApp()->RegisterResource(L"MODEL_MESH", StaticModelMesh);
//ボーンモデルのリソース
auto BoneModelMesh
= MeshResource::CreateBoneModelMesh(MediaDir + L"Chara_R\\", L"Chara_R.bmf");
App::GetApp()->RegisterResource(L"BONE_MESH", BoneModelMesh);
}
赤くなっているところが、
リソース登録です。これで
mediaディレクトリを取得してその中の該当ディレクトリ内のデータをリソース化しています。