TerraBuilder によるフォトシーナリ作成

はじめに

ここでは、TerraBuilder LITE を使って FS2002 専用のフォトシーナリを作成する手順について解説します。

FS2000 以前のバージョンの Flight Simulator はフォトシーナリをサポートする機能をもっておらず、アドオンシーナリ作者は写真テクスチャをポリゴン命令で描画することでフォトシーナリを実現していました。FS2002 ではフォトシーナリを正式にサポートするようになっており、これを使うと以下のようなメリットがあります。

  1. テクスチャがテレインメッシュに合わせて貼られるので、アドオン作者側で高度を計算して合わせる必要がない。
  2. テクスチャの剥がれが起こりにくい。
  3. 描画が速い(と、思う)

TerraBuilder は Ver 1.97.07 から FS2002 専用のフォトシーナリを制作できるようになっています。 実際のフォトシーナリの作成には、Microsoft Terrain SDK に含まれるツールが使わていて、TerraBuilder はそのフロントエンドとして機能しています。

名古屋フォトシーナリ 2002 はこのツールを使って作成しています。実際に名古屋フォトシーナリ 2002 を制作したときの手順を紹介しながら、解説していきたいと思います。

2003/6/15 追記: TerraBuilder 最新版では以下の手順がかなり変更されているようですのでご注意ください。

必要なツールの準備

まず、必要なツールを準備します。TerraBuilder, TerrainSDK, FS2002 の3つが必須で、これに加えてペイントソフト、電子地図ソフトなどがあったほうがよいでしょう。

TerraBuilder

TerraBuilder を http://www.terrabuilder.com/ からダウンロード/インストールします。Pro 版と Lite 版の2種類があり、Lite 版は無料ですが Pro 版はシェアウェアになります。FS2002 用のシーナリを作成するだけなら Lite 版で十分です。実際、 名古屋フォトシーナリ 2002 は Lite 版で作っています。

Terrain SDK

次に Microsoft のサイトから Terrain SDK をダウンロード/インストールします。Terrain SDK は、FS2000のページ から Developer's Desk -> FS2000 SDK とたどったページにあります。Terrain SDK はどのディレクトリにインストールしてもかまいませんが、インストールした場所は覚えておいてください。あとで TerraBuilder で指定しますので。

FS2002

これがないと始まりませんね(^^)  シーナリの表示テストに使います。

それと、FS2002 Professional Edition に含まれる imagetool というツールを TerraBuilder から使います。日本語版は Professional Edition しかないのでいいのですが、英語版の Standard Edition には imagetool が入っていません。imagetool は Scenery SDK に入っていますので、ない場合は入手しておいてください。

ペイントソフト

これは必須ではないのですが、画質の調整をしたり、後述する海面の切り抜きをするときに必要になります。私は Paint Shop Pro 7J を使っています。

電子地図ソフト

緯度/経度を調べるときに必要になります。私が使っているのはゼンリンの Z IV ですが、何でもかまいません。

ただ、国産の電子地図の場合、表示される緯度/経度は「東京測地系」と呼ばれる座標系に基づいた値です。FS2002 内で使われるのは「WGS84」と呼ばれる座標系ですので、電子地図ソフトで読みとった座標を FS2002 で使うためには変換処理をしなければなりません。

東京測地系 - WGS84 の変換を行うソフトを私のページで公開していますので、活用ください。

写真の準備

実はこれが一番厄介だったりします。フォトシーナリを作るためには、上空から垂直に撮影されたゆがみのない写真が必要です。このような写真は、垂直航空写真か衛星写真しかありませんが、ふつうに購入するとかなり高価です。

2002/4月頃から、国土地理院が航空写真の閲覧をインターネット上で行うようですので、このサービスが始まったら使ってみるのも手です。ただ、シーナリに使ってかつ第三者に公開することが許されるかどうかは不明です。

写真は1枚の BMP ファイルにしておく必要があります。複数枚の場合は何回かに分けてシーナリを作成しなければなりませんが、隙間が空くことが多いので1枚にまとめておくのがベターです。また、北がぴったり真上にくるように調整が必要です。

私の場合は、運良く坂川典正氏が作成された名古屋の垂直航空写真がありましたので、これを使いました。


オリジナルの BMP ファイル (1/10に縮小)

この画像は 4096 x 4096(!) という巨大な BMP ファイルで、ほぼ名古屋全域をカバーしていました。解像度はだいたい 8m/pixel 程度です。

ただ、みてわかるとおり完全な正方形ではなく、ところどころ抜けているところがあります。

TerraBuilder の起動/画像の読み込み

それでは TerraBuilder を起動しましょう。

次に、File メニュー から Wizards - PhotoTerrain を選んでください。

 

PhotoReal source texture に、使用するテクスチャのファイル名を指定して、「次へ」をクリックします。

使用するフォトの上緯度/経度を入力します。緯度/経度は ':' で区切って入力してください。

なお、画像の解像度は1ピクセル 4.8平方メートルにロックされていますので、左側にある「Lock」ボタンをはずしておきます。事前に解像度が正確にわかっている場合はここに値を指定し、画像左下の緯度・経度を入力すればいいのですが、わからない場合は上下左右端の緯度/経度を入力します。

ちなみに緯度/経度の値はあとでキャリブレーションできるので、とりあえず適当に入れておいても大丈夫です。入力が終わったら「次へ」を押します。

次の「Step 3」は不要なのでスキップしてください。

「Step 4」では、シーナリを出力するフォルダ名を指定してください。なお、このフォルダには Texture と Scenery の2つのフォルダが作成されます。

ウィザードが終了した時点で、いったんプロジェクトを保存しておいたほうがいいです。

なお、名古屋フォトシーナリの場合、画像が長方形になっていないので、やむなく4つの区域に区切って処理しています(つまり、TerraBuilder を4回使っている)

キャリブレーションを行う

次に、緯度/経度のキャリブレーションを行います。前のステップで緯度/経度を正確に入れている場合にはこのステップは不要です。

キャリブレーションには 「2 Point Calibration」と「Point-Scale Calibration 」の2通りがあります。前者は2つのポイントの緯度/経度を入力してキャリブレーションする方法、後者は1つのポイントの緯度/経度と、画像の解像度を入力してキャリブレーションする方法です。

今回は前者の方法を使います。

まず、キャリブレーションを行う位置を決めます。名古屋フォトシーナリ 2002 の場合は、1つめの位置は名古屋駅前のモニュメントの中心位置、もう一つはJR中央線が矢田川と交差する位置を使いました。あらかじめ電子地図ソフトで座標を読みとっておき、WGS84 に変換しておきます。

次に TerraBuilder 上で右クリックし、「Calibrate Extents...」-「2 Point Calibration」を選びます。アイコンが変わりますので1つ目のポイントをクリックして緯度/経度を入力し、ついで2つ目のポイント上でクリックして緯度/経度を入力します。


名古屋駅前のモニュメント位置で1つめのキャリブレーションを行う

これでキャリブレーション完了です。TerraBuilder のステータスバーに、マウス位置の緯度/経度が常に表示されていますので、確認してみてください。

シーナリの生成

それではいよいとシーナリを生成します。

「Write Source Code」メニューから「Compile To BGL」を選ぶと以下のダイアログがでます。

Terrain SDK の指定

右下の Terrain SDK Location で、Terrain SDK をインストールしたフォルダを指定しておいてください。この作業は1回だけ行っておけばよいです。

INF ファイルの生成と Resample

次に resample.exe 用の INF ファイルの生成と resample 処理を行います。

resample.exe とは、Terrain SDK が提供するツールで、BMP ファイルの分割処理と、TMF ファイルの生成を行います。TMF ファイルはシーナリファイルである BGL ファイルの一段階前の状態のファイルです。

「Save and view INF File」を押し、INF ファイルを保存します。このとき、必ずシーナリの Texture フォルダに inf ファイルを保存するようにしてください。 こうしないと、あとでテクスチャの処理ができなくて困ります。

そして、「Resample Current Setup」を押して resample.exe を実行し TMF ファイルを作成します。TMF ファイルはどこに保存してもかまいませんが、Scenery フォルダに入れておくのがいいでしょう。

Imagetool を起動

resample.exe が分割した BMP ファイルは Texture ディレクトリ(inf ファイルと同じディレクトリ)にできます。この BMP ファイルは通常の BMP ファイルで、FS2002 が使用する形式とは少し違います。

FS2002 が使用するビットマップは、拡張子は .bmp ですがフォーマットは DXT1 という特殊なフォーマットで、MIPマッピング用の画像やアルファチャネル画像などが入っています。

通常の BMP ファイルを DXT1 に変換するには、Imagetool を使います。このツールは FS2002 Professional Edition に含まれていて、TerraBuilder から呼び出すようになっています。

作業は簡単で、「Run Imagetool」を押すだけです。これだけで、必要なテクスチャを全部 DXT1 に変換してくれます。なお、この処理はちょっと時間がかかります。

BGL ファイルの生成

最後に BGL ファイルを生成します。

まず、「Compress TMF files」を押して、先ほど作成した TMF ファイルを圧縮します。圧縮しなくても支障はないのでとばしてもいいのですが、BGL ファイルサイズがかなり小さくなりますので圧縮しておいたほうがいいです。

最後に「Convert TMF to BGL file」を押して、BGL ファイルを生成します。このとき、BGL ファイルは必ず Scenery フォルダに保存するようにしてください。

おめでとうございます!これでフォトシーナリが完成しました!

動作確認する

それでは動作確認しましょう。FS2002 を起動し、シーナリライブラリを設定してください。

正しくシーナリが表示されましたか?

 

海面の切り抜き

アルファチャネル

さて、完成したシーナリですが、このままではテクスチャの海面部分にもそのままテクスチャが貼られてしまうので、海面が露出しません。名古屋フォトシーナリの場合は海面が真っ黒になります。

これを防ぐには、テクスチャの海面部分を「切り抜いて」やる必要があります。これには「アルファチャネル」というものを使います。


アルファチャネル

上の画像は名古屋港付近のテクスチャのうちの1枚ですが、通常の画像のほかにアルファチャネルの画像が入っています。アルファチャネルの黒色になっている部分はテクスチャがくりぬかれ、海面になります(デフォルトの地形が現れるのではありません)。

DXTBMP を使う

DXT1 画像のアルファチャネルを作成するには、DXTBMP というフリーソフトウェアを使うのがおすすめです。DXTBMP は MW Graphics サイトからダウンロードできますので、インストールしてください。

DXTBMP を使ってアルファチャネルを作る方法はいくつかありますが、とりあえず簡単に使える方法を説明します。

  1. まず、「File」 - 「Load Extended Bitmap」を選んで該当のテクスチャファイルを開きます。該当テクスチャを探すのはちょっと面倒ですが、がんばって探してください。

  2. 次に、「Image」 - 「Send to Editor」を選んで、画像をペイントソフトに送ります。ペイントソフトの設定は「Pref」-「Select Editor」で事前に設定しておいてください。

  3. ペイントソフトでは、くりぬきたい部分を純粋な緑色で塗ってください。RGB でいうと (0, 255, 0) です。それ以外の色はダメです。
    塗りおえたら上書き保存します。

  4. DXTBMP に戻り、「Image」 - 「Reload after edit」 を行ってテクスチャを読み込みなおします。

  5. 「Alpha」 - 「Create Alpha Channel」を選びます。画像の緑色に塗った部分がそのままアルファチャネルになります。

  6. 「File」-「Save Extended Image」を選んでファイルを保存してください(なぜか DXTBMP には上書き保存がない、、、)

ほかにもいろいろやりかたはありますので試行錯誤してください。ちなみに私の場合は、アルファチャネルを別の BMP ファイルにしておいて、「Alpha」-「Import Alpha Channel」でインポートするようにしています。 特に、以下に述べる季節/夜間用テクスチャ作成時は、アルファチャネル用のビットマップを使い回しできるのでこちらの方法のほうがいいでしょう。

 

他の季節/夜間用テクスチャを作る

上記の方法で作ったフォトシーナリは、季節時間帯にかかわらず同じテクスチャが表示されます。

季節はまあどうでもいいのですが、夜間は少々問題です。というのは、この方法で作ったテクスチャは夜間になると全く発光しないので、完全な暗闇になってしまうからです。

ここでは他の季節/夜間用のテクスチャを作る方法について説明します。

フォトを用意する

まず、夜間用と他の季節用のフォトを作成しなければなりません。画像サイズは最初の画像と必ず同じにしなければなりません。

季節/夜間テクスチャには以下の6種類があります。

それぞれのテクスチャにはサフィックスがついているので、どの種類のテクスチャがわかるようになっています。たとえば、夜間用のテクスチャは ....Lm.bmp という名前になっています。TerraBuilder では、デフォルトでは夏用のテクスチャが生成されます。

季節/夜間用テクスチャを使う場合、上記6セットを必ず全部用意しなければなりません。夜間だけ別フォトにして、それ以外は1種類、、、ということはできないのです。 さもないと、特定の季節でテクスチャが貼られないという現象が起こります。

とはいえ、6種類もフォトを用意するのは大変です。名古屋フォトの場合、そもそもフォトは1枚しかありませんでしたので、このフォトは夏用に使い、冬と夜間のテクスチャだけでっちあげ 、それ以外は他のフォトをコピーして使い回すことにしました。

冬のテクスチャを作るのは割と簡単です。ペイントソフトで元のフォトを開いて、彩度を少しさげ、明度を上げてやります。これで一面冬景色になります。


冬用のフォト

夜間はかなり難しいです。明度、彩度、カラーバランスなどを駆使して、「それらしく」見えるようにします。名古屋フォトの場合、以下の2つのレイヤを作っています。

上のレイヤは、透過率を数十%にして、下のレイヤにかぶせています。

場合によっては、ある程度「手書きで」調整が必要になると思います(実際名古屋フォトでもやってます)
# 伊藤さんのイラストレイテッドシーナリみたいだ (^^)


夜間用のフォト

シーナリを生成する

現バージョンの TerraBuilder は、季節/夜間用テクスチャを作る能力がありません。このため、TerraBuilder が作成する inf ファイルを手直ししなければなりません。

.inf ファイルを保存するまでの作業は同じですが、その後 inf ファイルを手で修正します。具体的には、.inf ファイルに以下の2行を加えます。

Season の行には、'fall', 'spring', 'harsh winter',  'mild winter', 'lightmap' のいずれかを記述します。夏の場合は何も書かなくていいです。

夜間の場合の例を示します。

[Source]
	Type = CUSTOM
	SourceDir = "D:\USR\FS\NAGPHOTO"
	SourceFile = "NagLm.bmp"
	Lat = 35.288989
	Lon = 136.815158
	NumOfCellsPerLine = 4096
	NumOfLines = 4096
	CellXdimensionDeg = 0.00005803900824652430
	CellYdimensionDeg = 0.00005323621961805455
	ScaleinMeters = 1.000000
	SampleIsCentered = 0
	MakeBMP = 0
	BlockWidth = 0
[Destination]
	DestDir = "D:\USR\FS\NAGPHOTO"
	DestBaseFileName = "nag1"
	NorthLat = 35.192
	SouthLat = 35.075
	EastLong = 136.866
	WestLong = 136.825
	WithSeasons = 1
	Season = lightmap

あとは resample 処理以降の処理を行ってシーナリ/テクスチャを生成します。

この作業を、各季節/夜間のフォト毎に繰り返してください。なお、BGL ファイルはどの季節でも同じものができるので1個だけ用意すればOKです。違うのはテクスチャだけです。

 

AutoGenとの相性について

TerraBuilder が生成したフォトシーナリは、通常の AutoGen シーナリとの相性がよくありません。フォトシーナリを配置した場所には AutoGen シーナリが全く生成されません。

フォトシーナリ上に AutoGen シーナリを表示させるためには、テクスチャと同じディレクトリに AGN ファイル(拡張子が .agn のファイル)をおけばよいです。AGN ファイルを生成するには、AutoGen SDK を使用してください。


戻る