遷移部と描画部に分ける

最近では、3D技術や高解像度及び高解析度などにより、キャラクターの描画処理の負荷が非常に高くなり、全体の処理に対する割合もかなり高くなっています。
特にモバイル用途のノートPCや廉価なロースペックPCだと、この問題が出やすいです。
(これは、シューティングに限った話ではありません。
描画負荷が高かったりリアルタイムなレスポンスが必要なアクション系のゲームには、必要な要素です。)


まぁ要は、グラフィックの負荷を下げる方法として、以下のモノがある。

1.描画処理を端折る
2.ゲーム画面の解像度を下げる
3.低解像度のテクスチャを用意する
4.モデルの頂点数を端折る

(まだあると思うけど。)


とりあえず、1.を解説。


俗に言う「フレームスキップ」と言うヤツです。


キャラクタの移動・衝突判定などの処理を行う箇所を遷移部、キャラクタの描画処理のみを行う箇所を描画部とします。


まず、遷移部の処理を行い、全ての遷移部の処理が完了した後で、描画部の処理を行うようにプログラムを組みます。
2回、情報をなぞることになるため、それって処理速度的どうよ?って事になりそうですが、まぁこうする事による利点を書きます。


・フレームスキップに直ぐに実装出来る。
まぁメインの目的はコレなんですが(笑)
描画部の処理部分を2フレームに1回だけ描画するようにプログラムを組めばよいわけですが、もし遷移部と描画部を混在して書いていたら、どう対処すればいいか想像してみて下さい。
一つ一つの描画処理にフレームスキップの処理を挿入しなきゃなりません。
アフォらしいですね。


では、上記のように分離していたら、どうでしょう?
纏めていた描画部自体を2フレームに1回だけ呼び出すようにすれば、あっという間にフレームスキップ処理を実装する事が出来ます。


・ポーズ機能が比較的楽に実装出来る。
今度は逆に、遷移部を処理しないようにすれば、簡単にポーズ機能が実装出来ます。
...但し、何も対策せずに遷移部を処理しないようにすると、ポーズ解除が出来なくなるわけですが(笑)


・半透明描画対応
現在のバージョンでは、半透明描画を行う場合、Zソート順を考える必要があります。
全ての遷移部の処理が終了した後に、Zソートを含む描画部の処理を行えば、破綻も少なくなる......多分(笑)
(ただ、破綻が起こったとしても、ほんの1フレームの間だけで次のフレームでは正常になるので、許容範囲と言えば許容範囲かもしれません。)

D's STG製作BCは
Douglas's STG製作 Boot Camp
の略称なw