プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
カメラと同じ角度
開発中の画面
板ポリゴンに移行した状態。ビルボードまでは実装してないが、カメラ固定ならこれで十分かもしれない。



◎CGギャラリー終了

前回通知するのを忘れてましたが、冒頭の顔CGギャラリーは前回の諸葛亮で終了です。他の顔CGも準備出来てますが、それはゲームが出来てからのお楽しみということでw

今は鳳雛さんにイベントCGを描いてもらってます。こちらもブログで少しだけ紹介するつもりですのでお楽しみに!



◎拡大縮小時の位置ずれ

ラスタースクロールで拡大縮小すると、ユニットの表示位置がずれます。表示位置がずれるということは、ユニットをdrawする際のpositionがおかしい、ということです。しかしpositionの計算式を変更すると、地形スクロールと同期しなくなってしまいます。

:拡大縮小時の表示座標補正ミス?
 →表示座標は地形とユニット共通なので、
  地形とユニットがずれる理由にはならない

:画像の原点(origin)までの距離が拡大縮小に影響?
 →いろいろ試したが気にしなくて良さそう

:画面のアスペクト比の問題?
 →いろいろ試したが関係なさそう

:浮動小数点演算の誤差?
 →ずれの量が多すぎるので誤差とは思えない

:やっぱりユニット位置(position)の計算ミス?
 →Excelで計算式をシミュレートすると、XNAプログラムが
  おかしい様子。しかしXNAのプログラムを修正すると、
  拡大縮小だけでなくスクロールまでずれてしまう。
  もしかして、地形表示プログラムもおかしい?

結局地形表示プログラムの抽出元画像領域の計算もおかしかったようです。地形とユニットはちゃんと同期スクロールしてたのに、実は両方とも間違ってました(>_<)

両方修正して、拡大縮小すると…まだ少しずれます。
もう勘弁して~!(泣)



◎拡大縮小時の位置ずれ(決着編)

さらに悩まされましたが、結局の表示座標補正ミスでした。つまり、表示プログラムが3つとも間違ってたわけです(爆)

メインマップクラスのコード

Update()の中で、PキーとLキーをチェックして拡大縮小させています。

問題は、画面中央を中心に拡大縮小するよう表示開始座標(mapViewPos)を補正する計算式です。

表示開始位置 += 拡大前の中央座標 - 拡大後の中央座標

このようにして拡大後も中央を表示するよう補正しているのですが、たかが画面中央を算出するだけで、これほどややこしい計算式が必要とは思いませんでした。



◎残課題の進捗状況

位置ずれの問題が一段落した段階で、前回の残課題のうち3つが解決しました。

・拡大縮小すると、兵士の表示位置がずれる
 →前記表示座標補正プログラムの修正により解決

・描画範囲の右端が表示スケールによって変動する
 →前記地形表示プログラムの修正により解決

・特定の表示スケールにすると、
 画面中央に黒い横線が一本入る
 →浮動小数点演算の誤差による問題であった
 →地形表示プログラムの改善により解決



◎ラスタースクロールのちらつき

目の前の課題を一通りクリアすると、今度は縦スクロール時のちらつきが気になりだしました。

最初はモニタの水平帰線期間中に描き切れないのかと思いましたが、そうではなくて、画像拡大時に色の境界が微妙にぼやけるのが原因でした。色の組み合わせや拡大率によって、ちらつきが目立ったり目立たなかったりします。そういえば、昔の市販ゲームでちらつくのがあった気がするなぁ…。

これは多分高解像度のマップ画像を用意すると回避できますが、逆に言うと、画像の解像度より拡大した場合はちらつきを回避できません。

縦スクロール中はアンチエイリアスを解除し、スクロール終了時にアンチエイリアスを設定すると、回避できるかなぁ?

そんなことを考えていたら、yohさんからビルボードのご提案を頂きました。



◎ビルボードとは?

ビルボードとは、3Dの中に2Dを埋め込む方式で、球体のようにポリゴン数を必要とする物体を綺麗かつ高速に表示するための技法です。私はビルボードという用語を知らなかったのですが、こちらの記事で勉強させて頂きました。

既に2D化したのでこれ以上早くはなりませんが、座標計算はかなり楽になりそうです。地形も板ポリゴンで表示すれば、ラスタースクロールのちらつきを無くせそうです。



◎表示テスト

ビルボードを実装する前に、軽く表示してみましょう。メタセコイアで平面ポリゴンモデルを作成し、マップ画像を張り付けてXNAで表示します。

平面ポリゴンマップ

ちゃんと3Dっぽく見えますね。ラスタースクロールより拡大縮小が綺麗ですし、スクロールのちらつきも心配ありません。ついでにフォグも使えます。やっぱり板ポリゴン最強!(笑)


で、兵士も板ポリゴンで表示してみました。

カスタムコンテントマネージャ使用前

あら?バックの地形も兵士に変わってしまいました。同じ板ポリゴンをロードしたので、モデルインスタンスが複製されなかったようですね。ワールド座標は複製されたようですが、テクスチャはマテリアルだから共通なのか…。

というわけで、XNAViewerランタイム評価時に確立した手法でモデルインスタンスを複製しました。この手法はメモリを浪費するので、エフェクトのコピーを作成する方が効率的と思いますが…まぁ板ポリゴンだし、とりあえずいいか。

カスタムコンテントマネージャ使用後

無事表示できました。見た目は問題無さそうですね。



◎板ポリゴンの展開

表示テストはOKだったので、ラスタースクロールの簡易デモプログラムを板ポリゴンに置き換えました。

板ポリゴンに置き換え

単純に地形の上に置くだけだと、両端がかなり歪みますね。

とりあえず、カメラと同じ角度に立てて、アスペクト比率の設定を外してみました(冒頭図参照)。

カメラの向きが固定であれば、これで十分かもしれません。今回は静止画のみですが、拡大縮小やスクロールはラインスクロールよりも滑らかな感じです。プログラムもシンプルになったし、今後はこれでいきましょう!



◎次回予告

とりあえず板ポリゴンへの移行が完了しました。

ビルボードまで実装した場合、ユニットの向きがおかしく見えないか不安ですが、成功すればカメラの向きも変えられるようになるかもしれないので、ともかく試してみましょう。

というわけで、次回はビルボードの検証です。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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