2012年2月11日土曜日

Windows版VG-Engineの性能改善

Windows版VG-Engine(=デバッグ環境)で、ちょっとした性能面の問題があり、改善中。
Android版とはまったく無関係。

ちょっとした性能面の問題
その問題とは、描画速度が通常60fps(フレーム/秒)のところ、稀に40~50fpsに落ちるというもの。恒常的に落ちる訳ではなく、あくまでも稀にです。なので、影響としては無視可能なレベルに軽微なんですが、なんか気持ち悪い・・・ということで、問題原因を調査~改修する作業を実施。

原因は概ね判明。(裏がとれないから、想像ですが)
VG-Engineは、仮想VRAM(スタティックメモリ上の領域)に書き込まれた情報を、DirectX9デバイス上のバックバッファに直書きしていたのが、どうやら、それがマズかったようです。仮想VRAM→テクスチャ→ポリゴン→DirectX9デバイスという具合にワンクッション(ツークッション?)入れることで、解消。

常識的に考えれば、元々の処理(直書き)の方が処理ステップ数が少ない筈ですが、上記で解消できたということは、システムメモリとバックバッファ(VRAM上の領域)のバスは直結していないという事だと思います。

要するに、
  • ○:システムメモリ→テクスチャ
  • ○:テクスチャ→ポリゴン→VRAM
  • ×:システムメモリ→VRAM
という感じに(回路上)なっているということ。
(回路上存在しない経路だから遅い)
あくまでも、推測ですが。

まぁ、これで解決してくれたので良しとします。ただし、性能面では解決したものの、テクスチャ経由だとグラフィックが若干粗くなる問題が浮上。直書きとテクスチャ経由を並べたものを図示すると分かり易いです。
(直書き)(テクスチャ経由)

これについては、放置の方向で。
グラフィックが粗い方がビデオゲームっぽい。
でも、Android版だとどうなるか分かりませんが。


追記:
ハードウェア頂点処理を使う設定(D3DCREATE_HARDWARE_VERTEXPROCESSING)を指定してDirect3Dデバイスを作成していたのが問題のような気がしたので、ソフトウェア頂点処理をするように設定し直したところ、それでも問題が解消されたっぽい。でも、粗いグラフィックも捨て難いから、設定ファイル(.iniファイル)で切り替えられるようにするつもり。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...