開発中のメイン画面前回まで2Dだった地形が立体化した。見た目は良くなったが、課題もあるようだ。
◎地形の立体化ユニットの表示方式が確定したので、今度は地形の立体化を試みます。
元々XNAで立体地形を作成したわけですが、地形種別を増やすとパフォーマンスが著しく低下してゲームにならなくなってしまうため、正射影画像を取得して板ポリゴンに貼り付けました。
これにより、上空から見ると立体的に見えるようになりましたが、地上から一人称視点で見渡すと平面だということがバレバレです。そこで、画像を板ポリゴンではなくメタセコイアの地形に貼り付けようと思います。
メタセコイアの地形は以前試したことがありますが、
・川などの地形種別が表現できない
・高さ情報を取得できない
この2点のために採用を諦めました。しかし今はこの2点を補うことができるので、改めて試してみようというわけです。
◎地形画像のマッピングまずは、以前と同様にグレースケールマップから地形を自動作成します。

マップ画像を拡大して4×4=16枚にしたので、縦横の分割数も4で割り切れる数値(64)にしました。
次に、作成された地形にマップ画像を張り付けていきます。
1.マップ画像を読み込んだ材質を
マッピング方式=平面で新規に作成
2.16×16個分の平面を選択
3.選択部処理→面に現在の材質を指定
4.マッピング機能で平面を選択し、シフトキーを押しながら
マッピング基本図形を90度回転させて面の方向を調整
5.マッピング機能で選択面にフィット
※1マップ画像分完了6.材質をコピーし、画像ファイルを差し替える
7.2、3、5を実施する
(5を省くとXNAでおかしくなる)
※1マップ画像分完了10.6〜7を繰り返す

分割数を増やして起伏を滑らかにしたり、自動や手動で頂点数を減らすことも可能ですが、細かい調整は後にして、まずはXNAで試しましょう。
◎入れ替えテストというわけで、板ポリゴンを立体地形に入れ替えました。

ふむ…。
カメラをズームアップしても山が立体的に見えますし、パフォーマンスも出てるので、基本的にはイケそうですね。
しかし、山の方は映像がおかしい所があります。正射影画像を3Dモデルに貼り付けた影響かもしれません。
それと、静止画ではわかりませんが、地形のスクロールとユニットのスクロールがズレます。
板ポリゴンと入れ替えただけなのに倍率を合わせてもズレるので不思議に思いましたが、実は地形立体化の影響で空中に浮いてました。
とりあえず平原の平均的な高さに合わせましたが、ズームアップした状態でスクロールすると結構ズレます。ちゃんと高さ情報を取得して合わせないとダメっぽいのですが、以前はユニットの原点が中央か足元かだけでズレが生じたことを考えると、シビアな精度が要求されるかもしれません。
大丈夫かなぁ…。
◎2Dマップ画像の取得2Dマップ画像を取得するなら、フリーのマップエディタでもできそうです。
ちょっと悩みましたが、理想のマップエディタを探し当てるのも面倒ですし、自由に改造できる柔軟性も考慮して、既存のマップ画像取得プログラムを改造して一括出力しました。
元の正射影画像(左図)と2D正射影画像(右図)2D画像は、マップの起伏を一律にならして正射影で取得しました。法線の影響のためか影が付いてますが、むしろ微妙な変化が面白そうなので、これで試してみましょう。
jpg画像(左図)とbmp画像(右図)むむ…以前よりは良くなったようですが、山の映像はまだおかしいですね。
それと、jpgとbmpでかなり雰囲気が違ったので両方挙げてみました。jpgだとぼやけるのでbmpにしようとしたのですが、bmpの輪郭が黒いのは何故でしょうか?
◎黒い原因と対処bmpの輪郭が黒い理由が判明しました。
黒い部分には透明度が設定されてました。
元の3Dマップは複数のパターン画像を重ね合わせているので、境界線に透明度が設定されます。これをbmpフォーマットで保存すると、自動的に32ビットで保存されてしまうのです。
XNAでは保存する際のビット数を指定できないので、C#でBMPファイルを32ビット→24ビットに落とすプログラムを作成しました。
テストコードしかし、実行すると32ビットBMPが作成されてしまいました。クローン作成後の PixelFormat を表示すると、Format32bppRgb でした。Bitmap.Clone()の引数でフォーマットを指定しても、ビット数は減らせないようです。
仕方がないのでピクセル単位でコピーしました。ちょっと遅いのが難点ですが、頻繁に使うわけでもないからまぁいいか。
採用コード◎深度バッファ設定山の映像が乱れる問題ですが、深度バッファを設定してないことが原因でした。深度バッファを設定したら直りました。

映像的にはOKですね。あとは地形とユニットのスクロールのズレだけです。
◎次回予告次回は地形の高さを取得してユニットの配置を調整し、スクロールのズレの解消を目指します。これが成功すれば地形の作成/表示方式も確定ですね。
テーマ : ゲーム製作 関連 - ジャンル : ゲーム
コメントの投稿