|
1: 2015-08-22 (土) 14:58:16 njf |
| + | *ドローコールとは [#kf888ff4] |
| + | ドローコールについて詳しく書けるほどGPUなどに知識があるわけではないので、簡単に概要のみ説明します。詳しいことはその手の資料にあたってください。 |
| | | |
| + | StarlingではGPUを使って描画を行うわけですが、その時GPUに描画の為の情報や画像データをCPUから送ることになります。この処理は一般に遅いと言われています。遅くなる理由については詳しいことは知らないですが、たとえばGPUとCPUは違うプロセッサなのでそれらは違う速度で動いており、データをやり取りするためには同期をとる必要があり、遅延が生じるという話などは聞いたことがあります。 |
| + | |
| + | 詳細はともかくとして、重要なのは一般にドローコールを減らすことが出来れば処理が速くなるという事です。 |
| + | |
| + | こちらの資料[[http://ics-web.jp/lab-data/140425_starling_optim/]]によると、古い端末でも問題なく動かせるようにするにはドローコール10以下が望ましいそうですが、かなり難しいです。個人的にはここ2~3年の端末ならゲーム画面で20~30程度のドローコールでもそれほど問題ない印象です。 |
| + | |
| + | また、ドローコールを減らすために余分の処理を行ったりすると逆に遅くなる場合もありますし、ゲーム画面以外、たとえばインベントリ画面などでは少々ドローコールが多くて処理が遅くなっても気にならない場合もあります。 |
| + | |
| + | よってあまりこだわりすぎずに描画速度が要求される場面や極端にドローコールが増えている部分について減らす努力をするのが現実的です。 |
| + | |
| + | ここではそのような場合にドローコールを減らす方法を解説します。 |
| + | |
| + | |
| + | |
| + | *ドローコールを調べる [#g47e7829] |
| + | |
| + | まずドローコールを減らすには現在のゲームのドローコールがどれくらいか知る必要があります。 |
| + | 「[[Starlingでパフォーマンス情報の表示]]」で解説したように、 |
| + | |
| + | mStarling.showStats = true; |
| + | |
| + | とすると、ドローコールやメモリの情報が表示できます。Adobe Scoutなども詳細な情報を得るときには便利ですが、まずはこちらの方が手軽です。 |
| + | |
| + | 次にどの描画オブジェクトがドローコールを増やしているか確認する必要があります。最も簡単な方法は、疑わしい描画オブジェクトのvisibleをfalseにする事です。するとStarlingはそのオブジェクトの描画をスキップするので、それで大幅にドローコールが減った場合はその描画オブジェクトが原因と言うことが分かります。 |
| + | |
| + | *他の原因に注意 [#pd207e71] |
| + | |
| + | ドローコールの削減をする前に、本当に遅くなっているのがドローコールのせいかどうか確認しておきましょう。 |
| + | |
| + | Flashを昔から使っていると、動作が遅くなる原因で最初に疑うのが描画関係になってしまうので、ドローコールに目が行きがちですが、GPUの処理はかなり高速のため実際にはそれ以外が原因の場合も多いです。 |
| + | 良くあるのはメモリリークでガベージコレクションが走ってしまっていることや、SharedObjectに頻繁に書き込みすぎている場合、計算などで重い処理をしていたり、描画オブジェクトやアニメーションが多い場合などです。 |
| + | 他にはFlash Professionalを使いモバイルデバイス上でデバッグ実行をしているとかなり遅くなります。 |
| + | また、starlingのデバッグオプションを使っていても遅くなります。 |
| + | 速度の調査を行う場合は、かならずリリース用のパブリッシュを行ってインストールしましょう。 |
| + | |
| + | *実際にドローコールを減らす [#m4f91c46] |
| + | **Texture Atlasを使う [#rc4c3037] |
| + | 同じビットマップに存在する画像はドローコールを増やさないので、細かな画像はなるべくTexture Atlasにまとめて使うようにしましょう。経験的には2048x2048pixel以下のTexture一枚にまとめられるとモバイルでも最近の端末なら比較的無理がない気がします。もちろん少なければ少ない方が良いです。 |
| + | **Textureの重ね順に注意する [#vc0dee12] |
| + | 画像が多くてTexture Atlasが複数になった場合、重ね順に注意する必要があります。つまり、2つのTexture Atlasの画像を交互に四枚かさねると、ドローコールは4になりますが、同じTexture Atlasの画像を二枚ずつ重ねて4枚だとドローコールは2となります。なるべく描画深度が続けて同じTexture Atlasになるようにするとドローコールは減ります。 |
| + | |
| + | **通常のフォントによるText表示は使わない [#j2888282] |
| + | StarlingのTextfieldで通常のフォントを使って描画するとドローコールが増えます。ゲーム画面ではなるべく文字も画像にするか、後述のようにビットマップフォントを使いましょう。 |
| + | |
| + | **ビットマップフォントを使用してかつ他のTexture Atlasと統合する [#c4056c2f] |
| + | ビットマップフォントを使い、かつ他のTexture Atlasと統合するとドローコールが減らせます。具体的には「[[Starlingでビットマップフォントを使う]]」で解説しています。 |
| + | |
| + | **Quadは使わない [#d73be747] |
| + | 簡単に四角形の画像を作れるので便利なQuadですが、使うとドローコールが増えます。Texture Atlasにカラーチップを用意してそれをImageで描画し、拡大縮小するほうが良いでしょう。 |
| + | |
| + | **colorで色を変更しない [#p409cea2] |
| + | 簡単にImageの色を変えられるcolorプロパティはゲームなどで敵にやられたときのエフェクトなどでつい使いたくなりますが、ドローコールが増えます。画像容量に余裕があるならTextuer Atlasに変更した色の画像を別に用意して重ねた方が良いでしょう。 |
| + | |
| + | **表示されていない描画オブジェクトはvisibleをfalseに [#m17cb493] |
| + | |
| + | たとえばモバイルゲームなどに良くあるような、大量のアイコンをスクロールさせるようなUIの場合、表示されていない部分の描画についてもドローコールが増えているときがあります。表示されていない描画オブジェクトのvisibleをfalseにすると一気にドローコールを減らせる場合があります。 |