1: 2015-08-22 (土) 14:58:16 njf |
2: 2015-08-22 (土) 15:56:55 njf |
| ドローコールについて詳しく書けるほどGPUなどに知識があるわけではないので、簡単に概要のみ説明します。詳しいことはその手の資料にあたってください。 | | ドローコールについて詳しく書けるほどGPUなどに知識があるわけではないので、簡単に概要のみ説明します。詳しいことはその手の資料にあたってください。 |
| | | |
- | StarlingではGPUを使って描画を行うわけですが、その時GPUに描画の為の情報や画像データをCPUから送ることになります。この処理は一般に遅いと言われています。遅くなる理由については詳しいことは知らないですが、たとえばGPUとCPUは違うプロセッサなのでそれらは違う速度で動いており、データをやり取りするためには同期をとる必要があり、遅延が生じるという話などは聞いたことがあります。 | + | StarlingではGPUを使って描画を行うわけですが、その時GPUに描画の為の情報や画像データをCPUから送ることになります。この処理は一般に遅いと言われています。遅くなる理由については、たとえばGPUとCPUは違うプロセッサなのでそれらは違う速度で動いており、データをやり取りするためには同期をとる必要があり、遅延が生じるという話などがあるようです。 |
| | | |
| 詳細はともかくとして、重要なのは一般にドローコールを減らすことが出来れば処理が速くなるという事です。 | | 詳細はともかくとして、重要なのは一般にドローコールを減らすことが出来れば処理が速くなるという事です。 |
| | | |
| ここではそのような場合にドローコールを減らす方法を解説します。 | | ここではそのような場合にドローコールを減らす方法を解説します。 |
- | | |
- | | |
| | | |
| *ドローコールを調べる [#g47e7829] | | *ドローコールを調べる [#g47e7829] |
| | | |
| *実際にドローコールを減らす [#m4f91c46] | | *実際にドローコールを減らす [#m4f91c46] |
| + | ドローコールの削減にはいろいろな方法があると思いますが、NJFがやってみて一定の効果があったものを以下に紹介します。 |
| + | |
| **Texture Atlasを使う [#rc4c3037] | | **Texture Atlasを使う [#rc4c3037] |
- | 同じビットマップに存在する画像はドローコールを増やさないので、細かな画像はなるべくTexture Atlasにまとめて使うようにしましょう。経験的には2048x2048pixel以下のTexture一枚にまとめられるとモバイルでも最近の端末なら比較的無理がない気がします。もちろん少なければ少ない方が良いです。 | + | 同じビットマップに存在する画像はドローコールを増やさないので、細かな画像はなるべくTexture Atlasにまとめて使うようにしましょう。とはいえ画像が大きすぎるとモバイルではアプリが不安定になります。経験的には2048x2048pixel以下のTexture一枚にまとめられるとモバイルでも最近の端末なら比較的無理がない気がします。しかし古い端末ではつらいかも知れません。もちろん少なければ少ない方が良いです。 |
| **Textureの重ね順に注意する [#vc0dee12] | | **Textureの重ね順に注意する [#vc0dee12] |
- | 画像が多くてTexture Atlasが複数になった場合、重ね順に注意する必要があります。つまり、2つのTexture Atlasの画像を交互に四枚かさねると、ドローコールは4になりますが、同じTexture Atlasの画像を二枚ずつ重ねて4枚だとドローコールは2となります。なるべく描画深度が続けて同じTexture Atlasになるようにするとドローコールは減ります。 | + | 画像が多くてTexture Atlasが複数になった場合、重ね順に注意する必要があります。つまり、2つのTexture Atlasの画像を交互に四枚かさねると、ドローコールは4になりますが、同じTexture Atlasの画像を二枚ずつ二組重ねて4枚だとドローコールは2となります。なるべく同じTexture Atlasが続けて描画されるよう深度を調整するとドローコールは減ります。 |
| | | |
| **通常のフォントによるText表示は使わない [#j2888282] | | **通常のフォントによるText表示は使わない [#j2888282] |
| **表示されていない描画オブジェクトはvisibleをfalseに [#m17cb493] | | **表示されていない描画オブジェクトはvisibleをfalseに [#m17cb493] |
| | | |
- | たとえばモバイルゲームなどに良くあるような、大量のアイコンをスクロールさせるようなUIの場合、表示されていない部分の描画についてもドローコールが増えているときがあります。表示されていない描画オブジェクトのvisibleをfalseにすると一気にドローコールを減らせる場合があります。 | + | たとえばモバイルゲームなどに良くあるような、大量のアイコンをスクロールさせるようなUIの場合、表示されていない部分のアイコンの描画についてもドローコールが増えているときがあります。表示されていない描画オブジェクトのvisibleをfalseにすると一気にドローコールを減らせる場合があります。 |
| + | |
| + | *あまりこだわりすぎない [#l95ab8ef] |
| + | ドローコールの削減は、うまくやるとどんどん減らせるのでつい長時間かけてしまいがちですが、実際には最近の端末の性能が上がってることもあって、少し減らした程度ではあまり速くならないことも多いです。また実際処理が重くなっているのは他の原因である事も少なくありません。 |
| + | あまりこだわりすぎずに他のパフォーマンス評価もしながら適度に時間をかけていきましょう。 |