プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
ネームプレート表示制御01
開発中のメイン画面
とりあえず、山向こうの部隊のネームプレートが表示される問題は解消したようだ。



◎ネームプレート画像集約方式

ネームプレート表示制御は、前々回‘中間テクスチャ方式’で煮詰まってしまいました。しっかり勉強すれば最後まで実装できるはずですが、しかし速度は遅い(9ms以上)ので、実用的ではありません。


実はその後、別の方式を考えてました。

現状は、ネームプレート5枚(左枠/中枠/顔画像/名前/右枠)をspriteBatch.DrawとDrawFontで描画しているのですが、全ネームプレートを1枚の画像に集約し、板ポリに張り付けて、シャドウマップを参照しながらカスタムエフェクトで直接描画する、という方式です。

この方式であれば、公式サンプルと同等の速度が期待できます。少なくとも、中間テクスチャ方式よりは格段に速いでしょう。但し、シェーダーインスタンスで描画しないと、現状のスプライトバッチより遅くなる可能性があります。



◎マス目管理方式

そんなことを考えていた矢先、yohさんから前々回のコメントで‘ZX平面のマス目で管理する方式’をご提案頂きました。

今後‘企画見直し’の段階で、部隊移動(配置)をマス目管理方式とすべきか検討するつもりでしたが、ネームプレート表示制御に利用するとは考えが至りませんでした。
(目前の技術課題に執着するあまり、視界が狭まってました)

貴重なアドバイスを頂きまして、どうもありがとうございました!>yohさん



◎基準データ作成

現在、地形モデルの高さ情報は65×65、地形種別は256×256のマス目で管理しています。

部隊移動等もマス目で管理すると仮定し、先日のマップ拡大に合わせて、今後はマス目を1024×1024で統一管理しましょう。

…というわけで、高さと地形種別のデータを1024×1024の配列に格納しました。今後はこのデータを基準に計算します。



◎直線上に存在するセルの抽出

カメラからターゲットまでの間に障害物(高い山など)が存在するかチェックしたいのですが、どのセルをチェックすれば良いのでしょうか?図にまとめるとこんな感じです。

直線上に存在するセル(PDF)

人間は図を見ると直感的に判断できますが、それをプログラムにするのは意外と難しいような…?

XNA用プログラム1

コーディングだけで丸二日かかりました(爆)



◎視線高度の算出

チェック対象セルを抽出したので、チェック対象セルの位置の地形高度は取得可能になりました。

次に、同位置の視線高度(カメラとターゲットを結ぶ直線の高度)を算出します。

視線高度の算出(PDF)

最後に、地形高度と視線高度を比較して、視線を遮る山が無いかチェックします。

XNA用プログラム2



◎実装

ネームプレート表示制御01

静止画だとわかりませんが、山向こうの部隊のネームプレートが表示されなくなりました。

動作は概ねOKっぽいのですが、問題が2つあります。

・一部のネームプレートが一瞬描画されずチラつくことがある

・パフォーマンスが悪い(1ms → 40ms)

最適化前のベタコーディングとはいえ、ネームプレート表示だけで40msはビックリです。これだけ遅いと何か根本的に間違えてないか不安になりますね(ーー;



◎最適化案

今回のプログラムは‘座標リスト返却方式’です。これは(移動処理などでも使えるよう)汎用性を重視した設計ですが、List.Addを毎フレーム数万回実行すると思われるので、これがネックと予想しました。

そこで、高さチェック専用の‘最も高い標高値のみ返却する方式’を別途作成し、Listを使わないようにすれば、パフォーマンスが向上すると思います。

それでもまだパフォーマンス不足であれば、マス目の解像度を下げて256×256とします。

目標値はズバリ20倍!(40ms → 2ms)



◎次回予告

次回はチラつきバグの調査修正と最適化の予定です。

最適化よりバグ調査の方が大変かも(^^;

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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