Gmaxで地形を作る

 Gmaxは建物や飛行機、自動車といった三次元オブジェクトを作る他に、地形(凹凸のある地表)を作ることも出来る。

準備する物
 1.地表の画像 (衛星写真や航空写真、あるいは図面など)。 BMP形式。
      手順を容易にするため、正方形の画像を用意する。
      画像の縦横の距離(実際の地形の距離)と、画像の縦横のビットマップ数をメモしておくこと。
      FSXで使用する画像はddsがよいので、BMP画像をdds形式に変換したものも準備する。

 2.標高設定画像  (標高を256階調のグレースケールにした画像)。 BMP形式。
      上の地表画像と同じサイズのほうが混乱しない。

 この2つが必要な物だが、2番目の標高設定画像の準備が難しい。数キロメートル四方以上の広い地形を作るなら、ネットを通してGeoTIFF画像を入手して、その画像からグレースケールを作成する方法が紹介されている。しかし、世界中の76mメッシュの地形がFSX並の価格で販売されているのだから、敢えてこういう広くて大きな地形を自作する必要もない。

 自作したいのは、数百メートル四方以内の細かなメッシュの地形である。上の安乗崎のサンプル画像では約6mメッシュになるような地形を作ってみた。256m四方の地形である。これぐらいになれば、切り立った崖や細い馬の背のような地形も再現でき、地表画像とほぼぴったりに合わせられる。
 こういう地形の標高設定画像は、今のところ簡単な作り方が分からないが、そう広くもない地形なので地形図を見ながら手書きすることにする。

制作手順

1.地表画像の作成。(BMP形式)

 基本的に2の乗数ならどんな縦横サイズの画像でもよいのだが、作業を簡単にするために、正方形の画像を用意する。この正方形を1タイルとして作業するわけである。例えば256ドット四方とか512ドット四方で準備する。そしてその一辺が実景の何mに当たるのか確認しておく。
 もし正方形の画像で準備できないなら、その地表画像が何枚かの正方形画像(何枚かのタイル)の中に分割して収まるような感覚で、画像のキャンバスサイズを大きくして正方形にする。画像を拡大するのではなく、画像の回りに余白を作りキャンバスを広げる事に注意。
 とにかく慣れるまでは混乱するので、地表画像は最初から、一辺が2の乗数のドットになる正方形で作っておく。
 正方形で用意できない場合はほとんど無いと思われるが、長方形の場合などは作業手順が少々余分に必要になる。敢えて複雑なことを選ぶ必要はない。
 なお、FSXで使用する画像はddsがよいので、BMP画像をdds形式に変換したものも準備する。

2.標高設定画像の作成。(256階調グレースケールBMP形式)

 まず画像サイズは、1.の地表画像と同じものの方が混乱しない。地理的座標も1.と同じ範囲で作っておく。
 標高用の画像はGioTIFF形式の地表画像からグレースケールを作り出す方法もあるが、少々ややこしいし、細かな標高が取り出せるかどうかも分からない。
 作りたいのは狭い範囲の地形なので、今のところ自分で工夫して手書きで作成する。
 一番標高の高い部分を真白(RGB256,256,256)にし、一番標高の低い部分を真黒(RGB0,0,0)にし、その間は中間の階調で標高に合わせて塗り込んでいく。ここは絵心の見せ所。職人になり切る。
 高さは256段階に分けられるのであるから、例えば標高差が256mの地形なら、1mごとに1階調ずつ色を変える訳だが、そこまで凝らなくても数階調に分ければ、結構見栄えのする地形になる。

3.GmaxでPlaneオブジェクトを作る。

 ・オブジェクトでPlaneを指定して、Planeオブジェクトを作る。
 ・縦横のサイズは、地表画像の実際の距離(m)にする。
 ・縦横のセグメントは適宜でよいのだが、細かなデコボコのある地形を作りたい訳であるから、1〜10mメッシュに相当するようなセグメント数にする。例えば上の画像の場合、一辺が256mなので縦横とも42セグメントにすれば、256/42=6.09、約6mメッシュ相当の地形が出来る訳である。

4.Planeに地表画像を貼り付ける。

 この画像貼り付けは3Dオブジェクトを作る際に比べて単純である。
 ・まずGmax画面で、作成済みのPlaneオブジェクトをsellectしておく。
 ・次に、エクスプローラー等で、地表画像ファイル.BMPをつまんで、Gmaxの作業ウインドウのPlane上にドラッグ&ドロップする。その他UVWmapping作業などは必要ない。

5.標高設定の画像を読み込む

 ・Modifire Listの中から、Edit Mesh -- Polygon を選択し、すべでのセグメント(ポリゴン)を選択する。選択されたポリゴンは赤い色に変わる。
 選択したのに赤い色に変わらなければ、F2キーを押してみる。
 ・Modifire Listの中から Displace を選択する。 この項目はListの下の方にある。
 ・Paramaters窓のImageセクションの一番上にある「Bitmap」の四角いボタンが「None」と表示されているが、そのボタンを押して、現れた窓の一覧から、標高設定画像.BMPを選択する。
 ・Paramaters窓のMapセクションにある、LengthとWidthの空欄に、画像のサイズを入力する。
  Height欄は1.0のままにしておく。

6.地形に高さを付ける。

 ・Paramaters窓の一番上にあるDisplacementセクションの中にある Strength設定窓の数値を、作りたい標高の最高値にセットする。
 これで地表画像がググッと持ち上がり、設定したセグメント数に従ったメッシュの地形が出来上がる。
 セグメント数が少ないと、狙ったような地形にならないことが分かる。

7.地形を固くする。(地表タイプをアタッチして、ぶつかったらマズい物体、あるいは着陸可能な物体にする。)

 ・テクスチャを貼り付けた地形全体にアタッチをしようとしてもエラーになるので、まずアタッチ用に地形全体をまるまる1個コピーして、何か分かりやすい名前を付けておく。
  要するに、作製した地形と全く同じ形のオブジェクトを別にもう1個、アッタチ用に準備する訳である。アタッチには「アタッチ専用の面(地形)」が必要なのである。
 ・アタッチ用の地形をメニューバーのオブジェクトリストを使って選択してから、アタッチしたい面を選択する。(選択面は赤い色に変わっているはず。右図参照
  面を選択した後、再度メニューバーのオブジェクトリストで、アッタチ用の地形が選ばれているかを確認する。
  もし他の地形や複数の地形が選ばれていたら、アッタチ用の地形のみをここで選択し直しておく。
 ・Gmaxのメインメニューバーにある FS Tool から AttachPointTool を選択。
 ・ダイアログ窓で、Attachセクションの、Plattformボタン を選択。
 ・次に、Surface Typeセクションで地表タイプ(DIRT、CONCREAT等)を選択。
 ・Attachセクションで、Attach to selected geometry!ボタンを押す。


 この作業でエラーが出る場合は、DirectX SDK をダウンロードしてインストールする必要がある。
 また、使用するWindowsのエディションによっては .NET Framework もダウンロードしてインストールする必要もある。

 なお、地形全体を固くする必要がなく、単純な形の平面部分のみ固くするのなら、固くしたい平面の3cmほど上に1枚のplaneを新たに作り、そのplaneに地表タイプをアタッチして着陸可能にする方法をとってもよい。このアタッチ用のPlaneは必要に応じて何枚か追加できる。地形が複雑で大きい場合は、こちらの1枚板法は上記のコピー法に比べてファイルサイズを小さくできる。

8.モデルファイルをエクスポートする。

 ・BGLコンパイラーに使用するMDLファイルを作るのは、3Dオブジェクトを作る場合と全く同じである。
 FS Toolsメニューの中の LODNameTool でGUID値を設定し、FriendlyName を付けた後で、File -- Export と進め、Gmaxでの作業は終了である。

9.モデルファイルをBGLファイルにコンパイルする

 3Dオブジェクトの場合と全く同じである。
 出来たBGLをFSXに登録し、位置や地形を見て、またGmaxに戻り微調整を繰り返す。

10.出来上がった地表が、建物のように光を反射してしまうトラブルの解決方法。

 上記の要領で地形を作成してFSXで表示させると、出来た地形は建物などの3Dオブジェクトと同じように、光を反射する「物体」となってしまう。土で出来た地面のはずなのに、向きによってはビルの壁面やガラスのようにギラッと光ってしまうのである。
 これの解決には、Gmaxで地表画像を設定する際に、マテリアルエディタで次の設定をするとよいようである。
 まだ、試してはいないが、ネットで検索したものを転記しておく。
 まずは、原文のまま。
 In the material editor click on the white rectangle to the left of Specular. A small window will open and then you can change the white color with the slider. If you change the white for black this will prevent all reflection. You can vary the level of reflection by moving the cursor between white and black. White=full reflection, black=no reflection, level of grey=+/- reflection.

で、この原文のあるフォーラムページに、かなり詳しい説明がある。
以下のURLを参照。
 //www.fsdeveloper.com/forum/showthread.php?t=7215


Go to Home-Page (ホームへ