プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
乱戦パフォーマンス改善01
開発中のメイン画面
乱戦時は3fpsまで低下していたパフォーマンスが60fpsまで改善され、快適にプレイできるようになった。



◎現状分析

部隊移動の調整が進むと、パフォーマンスが劣化してきました。負荷が高いのはDraw()です。
(Update()は定期探索により負荷を一定に保っています)
モーション切替の多発が原因と考えて間違いないでしょう。

乱戦時は5fpsを切ることもありますが、非戦闘時でも回避移動が多発すると20fpsを切ることがあります。

非戦闘時の回避移動は「移動 ←→ 停止」のモーション切替(=テクスチャ切替)が多発します。また、戦闘時は「移動 → 停止 →攻撃」のように遷移するケースも多いので、‘停止’がキーポイントと考えています。

実は‘停止’アニメは歩行アニメの1コマ目の画像をループ描画しているだけなので、「移動 ←→ 停止」はテクスチャ切替が実質的に発生しているわけではありません。

しかし、コード上は‘参照先が同じ別画像’という扱いになるらしく、エフェクト切替処理が発生するようです。これがパフォーマンスの劣化原因と思われます。



◎裏付け調査

モーション切替処理をコメント化して、現状分析が正しいか確認します。

○現状(非コメント化)
・通常移動時:10~60fps(8~90ms)
・数部隊の戦闘時:10~30fps(10~90ms)
・乱戦時:3~15fps(10~120ms)

○停止モーションのみコメント化
・通常移動時:30~60fps(8~10ms)
・数部隊の戦闘時:30fps(8~20ms)
・乱戦時:5~20fps(10~120ms)

○全てコメント化
・60fps(8~10ms)

()内はdraw時間


通常移動時や数部隊の戦闘時は、確かに停止モーションがネックとなっているようです。

停止モーションの改善案はあるのですが…問題は乱戦時ですね。この様子だと、停止モーションを改善しても、乱戦時はほとんど効果なさそうです。



◎開発順序の検討

「(簡単そうだから)停止モーションを先に改善する」という進め方もありますが、

・乱戦のパフォーマンス問題は放置不可
 (いずれ何とかしないとゲームにならない)

・乱戦のパフォーマンス問題が改善できた場合、
 停止モーションも同時に改善されている可能性が高い
 (その場合は停止モーション改善工数が無駄になる)

というわけで、(難しそうですが)乱戦時のパフォーマンス改善にチャレンジしましょう。



◎乱戦時のパフォーマンス改善案検討

「ゲームデザインの調整によって乱戦発生率を下げる」という回避案はありますが、多数部隊が入り乱れる乱戦の魅力は大きいので、この回避案は採用したくありません。
他に良い案はないでしょうか?

案A
・移動/停止/攻撃モーションを1枚の画像に収めて
 切替頻度を低減する
 (計略その他のモーションは画像切替方式とする)
 →1コマ当たりの画像解像度は落とさず、
  アニメ数を減らす方向で検討する
  (歩行開始モーションや攻撃開始モーションを削る)
 →近距離と中距離の攻撃モーションは同じとする
  (弓兵の近距離攻撃モーション等は作らない)

案B
・敵部隊認識中は(移動中でも)常時攻撃モーションとする
 →攻撃モーションを見直して、違和感を軽減する


案Aは、歩行開始モーションや攻撃開始モーションを削る(いきなりループモーションに入る)ので、モーションを切り替える瞬間は不自然に見えますが、パフォーマンスは裏付け調査の「全てコメント化」と同等になります。


案Bは、移動中でも攻撃モーションとなるので不自然に見えますが、やってみると違和感は案外少ないかもしれません。

例えば、戦闘中は部隊が停止しますが、槍騎兵の攻撃モーションは、馬が走り続けていても違和感を感じません。冷静に考えるとヘンですが、しかし馬は走り続けた方がカッコイイのです。
(これはゲーム的表現の「お約束」と言えるかもしれません)

そう考えると、騎兵と一緒に戦っている槍兵も走った方が自然かもしれません。というわけで、部隊が移動中でも停止中でも違和感を感じないように攻撃モーションを見直す、というのがB案です。これにより、画像切替負荷は最初の敵部隊を認識した1回に低減されるので、大幅な改善が見込めます。
(パフォーマンスは「停止モーションのみコメント化」数部隊の戦闘時と同等以上になります)


どちらの案も悪くなさそうですが、「それなら最善のパフォーマンスを目指そう!」というわけで、A案の検討を進めます。



◎アニメ画像の編集方法

移動/停止/攻撃モーションを1枚の画像に収める方法は4つあります。

A1案
・Softimageモデルの3つのモーションを連結し編集する

A2案
・アニメ画像を画像ツールで手動編集する

A3案
・既存のアニメ画像取得ツールを改修して編集する

A4案
・アニメ画像を結合して編集するツールを新規作成する


理想論で言えばA1案がベストですが、この案は問題があります。

1つは、Softimage標準のアニメ編集機能はXNAランタイムで非サポートなので、モーションを手動で編集し直す必要があるということ。

もう1つは、騎兵はまだSoftimage化されていないので、騎兵は1から作る必要があるということ。これはかなりの期間を要するので、今は避けたいです。
(馬を作り直すぐらいなら、先に弓兵を追加したい)


A2案は、アニメ画像を見て断念しました。1枚の画像に32方向×12コマあるので、最低でも64回以上切り貼りする必要があります。兵種を追加したり、モデルやモーションをちょっと手直しする度に毎回手動で切り貼りなんて、とてもやってられません。


残るはA3案A4案ですが、正直どちらも気が進まないです。

既存ツールは、SoftimageやACLのモデルから32方向分のスクリーンショットを取得してアニメ用に並べ替えるという複雑なプログラムになっているので、さらに例外処理を加えるのは避けたいです。しかし移動攻撃モーションのみ別ツールで2段階作業とするのも、いまいちすっきりしません。

どちらがマシか判断できないので、とりあえずA4案でやってみて、気に入らなければA3案とする(機能移植する)ことにします。



◎画像編集ツール作成

画像編集ツールを作成して、新方式用のアニメ画像を出力します。

SpearMan01_MoveAttack01

○従来
攻撃モーション:12コマ(攻撃開始モーション含む)
移動開始モーション:12コマ
移動ループモーション:12コマ

画像解像度:2048×2048
1コマ当たりの解像度:100×100
最大コマ数:20×20=400コマ
使用コマ数:32方向×12コマ=384コマ


○新方式
停止モーション:1コマ
移動モーション:6コマ
攻撃モーション:6コマ

画像解像度:2048×2048
1コマ当たりの解像度:96×96
最大コマ数:21×21=441コマ
使用コマ数:32方向×13コマ=416コマ


上記のように、12コマ×3枚のアニメ画像を、13コマ×1枚に集約しました。解像度はほとんど変わりませんが、移動ループモーションのコマ数を半分に減らしたのが少し気掛かりです。

尚、今回作成した画像編集ツールはわりとシンプルなコードで出来ました。ですが、この機能を既存ツールに集約するとかなり複雑になりそうなので、このまま独立させておきます。



◎実装

メインプログラムを修正し、新方式によるアニメ描画&モーション切替を実装します。



やりました!本当に60fpsを達成しました!
(思わずガッツポーズw)

アニメの劣化は気になる程ではありません。乱戦が快適に展開されて、動作テストが楽しくなってきました^^



◎次回予告

最近は3fpsまで劣化してたので「こんな調子でまともなゲームになるのか?」と内心かなり不安だったのですが、為せば成るもんですね!(^^)

部隊移動が一段落したので、次回は陣形を追加します。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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