SpriteStudio / SS5PlayerForUnity

OPTPiX SpriteStudio 5 Player for Unity
http://www.webtech.co.jp/spritestudio/
MIT License
39 stars 15 forks source link

全般 ドローコールの増え方がよくわかりません #81

Open SpriteStudio opened 9 years ago

SpriteStudio commented 9 years ago

・1. 1つのアニメで使っているテクスチャが1つの場合

複数アニメ間でもバッチされドローコールは減ります。 ただし、異なるテクスチャや合成方法を使っているアニメ同士では、Z座標が同じ値の場合、 互いのパーツが重なり合っていなくても自動的にはバッチされません。 このため、テクスチャ別にレイヤーを意識したZ座標の指定が必要になります。

例を出すと下記のようになります。

A) 下記の様に3つのアニメプレハブを互いが重なり合わないようにX/YをずらしてZ座標をすべて同じにすると、ドローコールが2か3になります。 (2になるか3になるかは、Unityの内部処理でのオブジェクトの実行順序に依存し、実行時毎に異なる可能性があります)。

例:

B) 上記のZ座標を下記のように3つのレイヤーに分けても、やはりドローコールが3になります。

例:

C) テクスチャAを前面(Z=0) に テクスチャBを背面(Z=10) にするとドローコールは2になります。

例:

・2. 1つのアニメで2つ以上のテクスチャを使っている場合

別のオブジェクト間では、ほとんどバッチングはされません。 (※理由は "Q. 想定以上にドローコールが増えるのはなぜですか?" をご覧ください) つまり、1つのアニメで2つのテクスチャを使いドローコールが2となる場合は、 同じアニメのオブジェクトでパーツが重ならないように配置しても、 ほぼオブジェクトの数だけドローコールが増えます。

テクスチャを2枚使用したアニメーションオブジェクトを3つ配置した場合の例。

この場合テクスチャAとテクスチャBの切り替え時にドローコールが発生し、ドローコールは6になります。

ただし、バッチングが一切きかないかというと、そうではなく、ドローコールが削減される場合があります。 その場合の例には、下記のような場合があります。

この場合ドローコールは(9ではなく)7になります。