くまちゃんのiOS/Androidゲームプログラミング

マイペースでゲームつくってます。

ゲームプログラミングのはなし16

【ゲームプログラミングのはなし16】
iPhoneは画像を処理するGPU(グラフィックス プロセッシング ユニット)を持っています。これがあるからこそ、ある程度描画も速くなっているのですが、ゲームで大量のキャラクターを描画させるととたんに遅くなってしまうのでした。でも、世間には大量のキャラクターが描画されても遅くならないアプリは山ほどあります。

いったいどうすればいいのか?

答えは、通常はCPUが画像処理をしてからGPUに転送して描画するところ、最初からGPUだけで処理と描画を行う、なのです。

いや〜、正直、遅い描画でも「GPUは使われている」ので、その点で改善しようともがいていたのは完全に木を見て森を見ずでした。描画速度を向上させるためには、「CPUを使わない」プログラムを書かなくてはならなかったのです。

CPUが画像をこねくり回す工程がオーバーヘッドとなって時間を食っているので、そこをすっ飛ばすのです。

じゃあ、全て最初からそうするように設計したらいいじゃないか、というのはこれまたワケがちゃんとありまして、普通のアプリで描画されるボタンやスライダーや地図やらの「部品」はCPUが処理しないといけないので、こちらのほうがメインなのですよ。むしろ、GPUだけで処理するのは特殊で、まあ言ってしまえばゲームだけです。いろいろと小細工する必要がないのでCPUをすっ飛ばすことができる、と言えるのです。

ですので、普通はiOSアプリのつくりかたを学ぼうとすると主流の方から入って行くので気づきません。ゲーム開発用には違う流儀のOpenGLやらSprite Kit、またはcocos-2Dとかあるよ、とは知っていても、メインのアプリのつくりかたとはいきなり書き方が全く異なるので、ビックリして手を付けるのがおっくうになるのが普通です。メインでとりあえずのものは作れてしまいますしね。「うぬ〜、300個のキャラクター動かしたい〜!」なんて思わなければ悩む必要もないですから。(続く)
https://itunes.apple.com/jp/app/doragondanku/id866740873?mt=8&uo=4&at=10l8JW&ct=hatenablog