Gmaxでのモデル作成が終わりました。さて、FSで読み込むためのbglファイルはどうやって作るか。
FS2004用までなら、Gmaxのエクスポートのメニューでbglファイル形式を選べばOKでした。しかし、FSX用は違います。
幾つかのフリーのツールを使う方法があるかもしれません。しかし、やってみた限りではどうもうまくいきません。
そこで、このページでは、私なりにつかんだ確実な方法をご紹介します。おおまかな方法を言うと、
1.GmaxでGUID値を設定した後、MDL形式でエクスポートする。
2.FSXに配置するためのxmlファイルを書く。
3.xmlファイルをBGLcomp.exeでコンパイルする。
と、簡単なことなのですが、ここまでたどり着くのに、なんやかやで1年近く経ってしまった....
上記の方法ですが、さらに言うと、実は場合によって2通りの方法に分かれます。
2通りの内どちらを使うかは、Gmaxで作ったモデルが、
A、たとえば「東京タワー」のように世界でただ1個しかないものとして配置するか、
B、あるいは「日本民家」のように、一度作った物を多数の場所で再利用して配置するか、
に依ります。
A、ひとつのGmaxモデルを、FSX内の特定の場所に配置する方法。
(この方法は、作成したモデルを公開して、他の人に使ってもらう時にも便利)
(参考文献:FSX SDK ヘルプファイル--EnvironmentKIT--BGLCompilerSDK--CompilingBGL--Scenery Objects--ModelData )
1.Gmaxで3Dモデルを作成し、GUID値を設定(後述)した上でMDL形式でエクスポートする。
・透過させるテクスチャがある場合は、MDLデータにExportする際、表示されるメニューの内、「Export FS10」のチェックを外すこと。こうすることで、とりあえず(暫定的には)SP2による透過トラブルからは逃げることが出来る。
2.FSXに配置するためのxmlファイルを書く。ノートパッドなどで、書けばOK。
(XMLファイルの中身は以下の通り。)
(ただし、#- -#で囲まれた部分は全て削除すること。また、< や > は 小文字に換えること。)
--------------------------------------------------
<FSData version="9.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="bglcomp.xsd">
<SceneryObject instanceId="{CC170F3D-A977-48be-91F8-313FB4329AC2}"
#- GUIDgenなどで仮に作成したGUID -#
lat="N36 8.50" #- 緯度#
lon="E136 13.42" #- 経度#
alt="5" #- オブジェクト設置高 -#
pitch="0" #- 地表に対する、オブジェクトの前後の傾き -#
bank="0" #- 地表に対する、オブジェクトの左右の傾き -#
heading="0" #- オブジェクトの向き 真北=360.0 -#
altitudeIsAgl="TRUE" #- オブジェクト設置高の基準 TRUE=地面からの高さ FALSE=海面からの高さ
(=海抜) -#
(海抜にするためaltitudeIsAgl="FASLE"にして、コンパイルエラーになる場合は、この行を削除してしまう。)
imageComplexity="NORMAL"> #- オブジェクトが表示されるシーナリー複雑さを設定 -#
<LibraryObject name="{80984e6c-3fcc-495b-aeba-7ceb133ef3da}" #- Gmaxでモデリング中に設定したGUID -#
scale="1.0" />
</SceneryObject>
<ModelData
sourceFile="test.MDL" /> #- GmaxでEXPORTしたファイル名 (GUID設定済みのMDLファイル) -#
</FSData>
(注) 上のXMLファイルの中の、<SceneryObject から </SceneryObject> までの、緯度経度や向き、設置校を変化させて <ModelData の前に繰り返し記述すれば、同じモデル(MDL)を、FSX内のいろいろな所に配置できる。電柱や鉄塔など、同じ物体を複数配置するときなどに使える。
----------------------------------------------------
・以上のファイルを拡張子 xml にして保存する。
・モデルファイル ***.MDL と、この xmlファイルを、FSX用のBGLcompilerと同じフォルダに入れて、
xmlファイルをBGLcomp.exeにドラッグすればbglファイルにコンパイルされる。
・こうして出来上がったbglファイルを、FSXのシーナリーフォルダに入れて、FSXのシーナリーライブラリで登録する。
----------------------------------------------------
上のファイルの4行目の{ }中はGUIDの値を入れるが、この値は GUIDgen などを使って、とりあえず作成したGUID値を記述する。
ただし、この行の値は仮の値なので、毎回新たに作る必要はない。一度作った値をずっと使い回してよい。極端な話、この行は無くても良い。SDKに書いてあったので、おまじないのようにして書いているだけである。
しかし、13行目に入れるGUID値は、Gmaxの FS tools メニューで入力する、モデル独自のGUID値である。操作は次のように行う。
・モデリングが終了時に、メニューバーから FS Tools -- LODNameTool を選ぶ。
・Create new GUID for this file をクリック。
・FriendlyName に、このモデルの名前を入力する。(好きな名前でかまわない)。
・Go ボタンをクリック。
・LOD and GUID tools ウインドウを閉じる。
・File -- File Properties -- Customタブ でGUID値を確認し、ついでにその値をコピーしておく。
・モデルをMDL形式でエクスポートする。
----------------------------------------------------
B、ひとつのGmaxモデルを、FSX内の多くの場所に再配置したい場合。
(参考文献: FSDeveloper.com - FSDeveloper Wiki - Exporting a GMax object into FSX )
ひとつのgmaxモデルを、FSX内部の多くの場所に配置するには、上のAの方法のところでも触れたように、<SceneryObject から </SceneryObject> までの、緯度経度や向き、設置校を変化させて <ModelData の前に繰り返し記述すればよい。
しかし、別の方法もある。自作のモデルをまとめて自作ライブラリとしてFSX内に置き、それを参照するやりかたである。
この方法は、作成したモデルを公開して他の人に使ってもらうのには、あまり適していない。なぜなら、自作モデルの他に自作ライブラリも配布しなければならないからである。
ただ、このライブラリを使う方法は、FSXデフォルトライブラリ内のオブジェクトを配置するのと同じやり方であり、デフォルトライブラリのオブジェクトが使えれば自作オブジェクトを作らなくても済むので、マスターしておきたい方法である。
まず、自作のオブジェの配置方法の前に、練習として
FSXデフォルトライブラリ (ネットに一覧を表示したページあり)の3Dオブジェクトをシーナリーに配置する方法から。
手順は次の2つ。
1.FSXに配置するためのxmlファイルを書く。ノートパッドなどで、書けばOK。
( XMLファイルの中身は以下の通り。 < や > は小文字に。)
2.xmlファイルをBGLコンパイラでコンパイルして、出来たbglファイルをFSXに入れる。
( 方法は上記Aのところで述べたやり方と同じ、)
--------------------------------------------------
<FSData version="9.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="bglcomp.xsd">
<SceneryObject
lat="N36 8.5"
lon="E136 13.45"
alt="10M"
pitch="0.0"
bank="0.0"
heading="350"
altitudeIsAgl="TRUE"
imageComplexity="SPARSE">
<LibraryObject name="{93802d8b-ba4f-45eb-a272-9f029a0feeb3}"
scale="1.0"/>
</SceneryObject>
</FSData>
---------------------------------------------------
下から4行目のGUID値は、デフォルトライブラリのオブジェクトに指定されている、固有のGUID値です。 ネットにサムネイル付きで一覧表を載せているところ がありますから、参照してください。有り難いことです。
<SceneryObject から </SceneryObject>の間の、位置情報とオブジェクト情報のデータを変えて繰り返し記述すれば、オブジェクトをいっぺんにいくつでも配置きます。
自作のオブジェクトをいろいろな場所で再配置するのも、このデフォルトライブラリオブジェクトの配置法の応用です。
手順の概略は、
1.自作の3Dオブジェクト用に、FSXライブラリbglを作る。( Library Creater XML 等を使用。)
2.3Dオブジェクト配置用のxmlファイルを書いて、bglにコンパイルする。
作成するxmlファイルは、デフォルトライブラリのオブジェクト配置用と同じ。ただし、GUID値は、自作オブジェクトをGmaxで作成したときに設定した値。
3.2つのbglをFSXに入れる。
これでうまくいくはず。
なお、この場合も、<SceneryObject から </SceneryObject>の間の、位置情報とオブジェクト情報のデータを変えて繰り返し記述すれば、オブジェクトをいっぺんにいくつでも配置きます。
gmaxでのテクスチャ貼り付け方法
Gmax解説のメインページへ
ModelConverterXについて、覚え書き
(今のところわざわざページを起こすほどの中身もないので、備忘録代わりにここに記録。 Oct.2013 )
・「ModelConverterX」とは、GoogleEarthに表示するモデルを作る「SkechUP」によって出力されたデータを、FSX用にコンバートするソフト。
変換の勘所は次の通り。
・テクスチャはどのモデルもtexture0、texture1のように「texture」が標準なので、必ずrenameコマンドで、モデル毎の名前に変更した方が、
一つのシーナリ(テクスチャ)フォルダに、多くのコンバートモデルを入れられる。
・テクスチャをミニマイズすると、確かにDrawcall数は減る。しかし、テクスチャ数が減るモデルもあるが、減らないモデルもある。
ファイルサイズも大きくなることがあって、必ずしもFSXのフレームレート向上につながるとは限らない。
テクスチャが10枚ぐらいまでで、それらが繰り返し貼られる事が多いものなら、ミニマイズする必要はない。
・ミニマイズ作業をすると、****_0.dds のように_(下付線)のあるテクスチャが新たに幾つか作られるが、これらは他のテクスチャとは違う名前になってしまうので、もう一度renameコマンドで他テクスチャと同じ名前にしてupdateコマンドを押す。
こうすると、1個のモデルのテクスチャ名を同じに揃えられるので、後々の管理がしやすい。
・私の環境の場合、いきなりbglへの変換はうまくいかなかった。一度MDL形式にexportしてからbglに変換するとうまくいく。