2012年07月17日

PSS改めPSMの検証報告

コンバンワ、アキさんです。
6月分の分割日記の最後1つを書き忘れてました\(^q^)/



すっごい今更ですが、
「PlayStationSuite」から「PlayStationMobile」に変更になりましたね!
個人的にはPSSの名称は気に入ってたのでちょっと残念。
「Mobile」だとPSケータイみたいな感じに思われそうなんだけどどうなんだろ。



んでは、自作ゲー開発な話。

ここ最近はずっとPSM版をVITA上で実行した際の処理負荷測定やら高速化やらをやってました。
ツイッターの呟きを見る限り、5月半ばあたりからずっと(;´Д`)
最近仕事が忙しかったとはいえ、思った以上に時間食ってたようで…

デバッグ系処理をAndroid版から移植したから
シミュレータやVITAやAndroid端末で実行した際のFPSを調べたのが発端。
シミュレータはまぁ当然60FPSだったんですが、
Android端末(XPERIA arc)は38FPS、VITAにいたっては30FPS…
こりゃイカン!って感じで処理負荷計測&高速化が始まったワケです。

処理食ってたのはモチロン描画。
「VITAはハイスペックだから大丈夫だろー!」とか思って、
Android版をバカ正直に移植したのが間違いでした(テヘ

そこで急遽、高速化作業を始めたのです。
主な作業は3つ。


◆高速化その@ 『DrawArraysのコール』
今回作ってるのは2Dシューティングなので、それなりの数のスプライトが出るんですが
各スプライトを描画する毎にDrawArraysをコールしてたのです(バカ)

幸いそんなにオブジェクトの種類数が多いわけでもないので
使用テクスチャ別にグループ分けし、
同グループのスプライトを1つのポリゴンとして一気に描画する事でかなり改善しました。
半透明処理とかの関係で描画プライオリティとかは気にしないといけないですがね。
ただ、現在製作中のシューティングゲーに関しては
「自機」「敵」「弾」「エフェクト」など使用テクスチャで分けたグループ毎に
ザックリと描画プライオリティを設定しても問題ナッシンでした(´・∀・`)

構成によるかと思いますが、オブジェクトが多いゲームの場合は効果デカいかと。


◆高速化そのA 『更新処理のスレッド化』
サンプル等は余り詳しく見てないので、メイン部分がどうなってるか不明ですが
HelloWorld的な超シンプルなソースから作り始めた自分は結構効果大きかったこの修正。

更新処理をスレッド化させる事で「更新」と「描画」を同時に実行させようって魂胆です。
GLSurfaceView使用のAndroidアプリはコレがスタンダードだとかなんとか。
同期処理が間に合わせなので不具合あるけど、結構FPS改善されました。


◆高速化そのB 『描画処理の再調整』
要は無駄な箇所を削ろうっていう、至ってシンプルな修正。
「マップ描画で全画面描画するんならGraphicsContext.Clear無くて良くね?」
とかそんな系です。

特に自分の場合は解像度対策の為に無駄な描画をしてる箇所があったので、
その辺を上手く回避したら結構高速化できました。
たとえスプライト1枚でも描画サイズがデカければ結構な処理負荷になりますしね。
マップ描画や背景描画は大抵デカいサイズになるので要注意!



ざっと書くとこんな感じでした。
詳細な数値は最近みてないのでわからないですが、かなりFPS改善されたかと思います。
現在はこれらの検証内容を踏まえて自作ライブラリの修正中なので
終了したら実際に自作ゲーを動かしている時のFPSを比較してみます。


少しずつ進んでいるようですが、進んでたのは1ヶ月前程前までで
ここ最近ずっと仕事が修羅場状態なおかげで全然進んでません('A`)
疲れてるのか、寝落ち率も結構高い…
長期でなくてもいいので、ある程度まとまった休暇が欲しいなー
posted by 犬アキ at 04:07| Comment(0) | PSMobile