Unity DrawCallの要因

DrawCallは、プラットフォームのパフォーマンスに大きく関わるため、少なくするとパフォーマンスがあがります。
マテリアル、スケールなどが増える要因といわれています。


シーンにDirectional lightとPlaneを作成し、適当なマテリアルをつけ、Planeのスケールを5,1,5。
unity0029.jpg

DrawCallは、1。
シーンにオブジェクトをインポートし、同じマテリアルをつけ、スケールは1,1,1。unity0030.jpg

DrawCallは、2に増加。
オブジェクトを複製してみる。unity0031.jpg

複製したオブジェクトのスケールが同じなので、DrawCallは変わらず2。変わりにBatchingが1となる。
別のオブジェクトをインポート。スケールとマテリアルを先のオブジェクトと同じに設定。unity0032.jpg

別形状のオブジェクトでもスケール・マテリアルが同一なので、DrawCallは変わらず2。Batchingが2と増える。
Planeのスケールも1,1,1にしてみる。
unity0033.jpg

全てのオブジェクトのスケール・マテリアルが同一になり、DrawCallは1。Batchingが3と増える。
オブジェクトに別なマテリアルを割り当てる。unity0034.jpg
unity0035.jpg

シーンにマテリアルが一つ追加されただけなので、割り当てに関係なくDrawCallは、2。Batchingが2となる。

スクリプトでUVをオフセットしてみる。
unity0036.jpg

スクリプトでUVにアクセスした時点で、別マテリアルとして扱われる。

複製したオブジェクトにも同じスクリプトを割り当てる。
unity0037.jpg

全く同じ設定にしてもスクリプトでUVにアクセスした時点で別物として扱われる。
この場合シーンのオブジェクトは別々のマテリアルが割り当てられ、DrawCallは4となる。


DrawCall2・Batching2の状態でDirectional LightにHard Shadowsを設定。
unity0035.jpg
unity0038.jpg

影がキャストされ、Batchingは変わらず2のままだが、DrawCallが8増え10となる。
単純計算で1ジオメトリあたり2つ増えたことになる。

複製オブジェクトの影を消す。
unity0039.jpg

DrawCallが一つ減り、9となる。

更に、スケールを変更。
unity0040.jpg

今度は、DrawCallが2つ増え11となり、Batchingが0になる。

複製オブジェクトのスケールを元に戻して、別形状のオブジェクトをスケール。
unity0041.jpg

今度は、DrawCallが1しか増えない。
ジオメトリの形状に影響されているのがわかる。

DrawCall10の状態でUVをオフセットしてみる。
unity0042.jpg

変化なし。

結果:

+影をキャストしない場合+
スケール・マテリアルを統一、バッチングすることでDrawCallを抑えられる。

+影をキャストする場合+
同じマテリアルでもオブジェクトごとに個別マテリアルとして扱われる。
オブジェクトの影を消すことでDrawCallを抑えられる。
Directional Lightに限りだと思うが、平行ライトから投影される影の形状をバッチングしているので同一ジオメトリのスケールを統一することでDrawCallを抑えられる。


結論:

影をキャストしない場合は、オブジェクトのスケール(多分UVの形状変化に影響)・マテリアルの数にDrawCallが発生している。
影をキャストする場合はUVオフセットに関係なく、個別マテリアル・影の有無・影の形状にDrawCallが発生している。
同じオブジェクトを多用する場合は、最低限スケールをいじらない方が良い。

※4.6でGUIが強化されるらしいのでこの辺も解決するかも?Ver5ではライティングそのものが変わってしまいそう。

テーマ : Unityゲーム制作
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

Rich

Author:Rich
3DCGから派生する関連ソフトの備忘録。

最新記事
カテゴリ
月別アーカイブ
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
PR




注目!!自宅で本気痩せダイエット!!



access
QRコード
QR