プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
深度バッファ設定後ユニット有
開発中のメイン画面
前回まで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マップ画像を取得するなら、フリーのマップエディタでもできそうです。

ちょっと悩みましたが、理想のマップエディタを探し当てるのも面倒ですし、自由に改造できる柔軟性も考慮して、既存のマップ画像取得プログラムを改造して一括出力しました。

正射影000   平面正射影000
元の正射影画像(左図)と2D正射影画像(右図)

2D画像は、マップの起伏を一律にならして正射影で取得しました。法線の影響のためか影が付いてますが、むしろ微妙な変化が面白そうなので、これで試してみましょう。

2Dマップ画像に差し替え(JPG)   2Dマップ画像に差し替え(BMP)
jpg画像(左図)とbmp画像(右図)

むむ…以前よりは良くなったようですが、山の映像はまだおかしいですね。

それと、jpgとbmpでかなり雰囲気が違ったので両方挙げてみました。jpgだとぼやけるのでbmpにしようとしたのですが、bmpの輪郭が黒いのは何故でしょうか?



◎黒い原因と対処

bmpの輪郭が黒い理由が判明しました。
黒い部分には透明度が設定されてました。

元の3Dマップは複数のパターン画像を重ね合わせているので、境界線に透明度が設定されます。これをbmpフォーマットで保存すると、自動的に32ビットで保存されてしまうのです。

XNAでは保存する際のビット数を指定できないので、C#でBMPファイルを32ビット→24ビットに落とすプログラムを作成しました。

テストコード

しかし、実行すると32ビットBMPが作成されてしまいました。クローン作成後の PixelFormat を表示すると、Format32bppRgb でした。Bitmap.Clone()の引数でフォーマットを指定しても、ビット数は減らせないようです。

仕方がないのでピクセル単位でコピーしました。ちょっと遅いのが難点ですが、頻繁に使うわけでもないからまぁいいか。

採用コード



◎深度バッファ設定

山の映像が乱れる問題ですが、深度バッファを設定してないことが原因でした。深度バッファを設定したら直りました。

深度バッファ設定後

映像的にはOKですね。あとは地形とユニットのスクロールのズレだけです。



◎次回予告

次回は地形の高さを取得してユニットの配置を調整し、スクロールのズレの解消を目指します。これが成功すれば地形の作成/表示方式も確定ですね。

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。