UPRの様々なバッチングについてまとめ

今更ですがUnityのURPの機能でSRP BacherDynamic Batching などまとめてみました。

  • GPU Instancing
  • SRP Bacher
  • Dynamic Baching
  • Static Baching

GPU Instancing

https://docs.unity3d.com/ja/Manual/GPUInstancing.html
・同じマテリアル且同じメッシュのオブジェクトをまとめて描画する機能
・使用するにはマテリアルにEnable GPU Instancingを設定
・そのシェーダーのシェーダーバリアント数が倍増する
・違うメッシュに適用できない
・Skinned Meshは使えない
・Billboardのパーティクルは使えない。メッシュパーティクルは使える。ParticleSystemにEnable GPU Instancingを設定する必要があります。

説明:https://docs.unity3d.com/Manual/PartSysInstancing.html

SPR Batcher

https://docs.unity3d.com/Manual/SRPBatcher.html

日本語:https://blogs.unity3d.com/jp/2019/02/28/srp-batcher-speed-up-your-rendering/
・同じシェーダーバリアントのマテリアルの違うメッシュてもまとめて描画する機能
・使用するにはURP設定ファイルのSPR Batcherをチェックすること
・シェーダーはSPR Batcherに対応しないと使えません。

(シェーダーはSPR Batcherのcompatibleやnot compatibleを表示する)
・シェーダーのシェーダーバリアント数が多いと効きにくいです。
・違うメッシュに適用できます。
・Skinned Meshは使える(Unity 2019.3.0 Alpha 5から)
・メッシュやBillboardのパーティクルは使えません。


Dynamic Batching

https://docs.unity3d.com/ja/Manual/DrawCallBatching.html
・同じマテリアルのProperty入力一致の小さいメッシュのオブジェクトをまとめて描画する機能
・使用するにはURP設定ファイルのDynamic Batchingをチェックしましょう。
・CPU 上でゲームオブジェクトのすべての頂点をワールド空間に変換することによって機能するので、このCPU処理がドローコールより重い場合使う利点がありません。
・ライトマップ付きオブジェクト 、マルチパスのシェーダーは使えない。プラスとマイナススケールのオブジェクトは一緒にバッチ処理できません。
・メッシュとBillboardのパーティクルは使えます。

Static Batching

https://docs.unity3d.com/ja/Manual/DrawCallBatching.html
・右上のStaticのBatching Staticを設定した同じマテリアルのメッシュに適用できます
・ドローコールは減らせるが、メモリ消費量が増える
・ビルドの時点でゲームオブジェクトのすべての頂点をワールド空間に変換するとによって機能するので、アプリのサイズが増える
・大量な同じメッシュのバッチングには向かない、バッチングできたメッシュを全オブジェクトに適用するからメモリ消費が増える

・シェーダーバリアントの判別はマテリアルのキーワードリストで判別している為
同じ設定のマテリアルがあっても、別シェーダーのキーワードが残ると違うシェーダーバリアントと判別されてバッチ処理が分かれることになります。
・バッチ処理できるマテリアルを一気に処理することではなく、決まった順番バッチ処理していくので違うシェーダーバリアントのマテリアルが混ざるとバッチ処理が分断されます。
・影のレンダー処理もバッチ処理できるが、こちらは同じシェーダーバリアントでもバッチ処理しないことがあります。
幸い影はレンダーで生成しないように設定できるので、影響の少ない影を生成しないようにすれば軽くなる(キャラの顔、壁についてるもの、小物など)
・MeshRendererとSkinnedMeshRendererは同じマテリアルでも一緒にバッチ処理できない
・シェーダーがSRP Batcherサポートしても SpriteRendererには効かないようです。

MK Toon – Stylized Shader

MK Toonは簡単に言えば、

セルルックスタライズルックランプルックなど様々なToon表現ができるシェーダーです。

もっと簡単にいえば、アニメやアメコミ、漫画、みたいな質感が作れるシェーダーです。

アーティストフレンドリーで機能豊富なスタイライズシェーダであり、非常にカスタマイズされたノンフォトリアリスティックなビジュアルを実現することができます。
シェーディングやコントラストを調整しやすいので使用しています。

BuiltinLightweightUniversalの各レンダーパイプラインに対応

・スタイライズされたレンダリング
・ライトモデルを変更するだけで、拡張された標準的なシェーダーとして使用することができます。
・フォールバックを自動的に処理するため、ほぼすべてのプラットフォームで高い安定性を発揮
・アーティスト向けに調整されていて、簡単に使えます

本気出せば、きれいなアウトライン化するために、スムージングされた法線を持つ新しいメッシュを作成できたりもします。

ランプテスクチャも生成できます。

MKToon設定について

Light Theshold
シーン内のDirectional Lightを設定後、マテリアル側で影の割合を調整します。

■マテリアル設定

Diffuse
Light Thesholdで設定した影の境界線をぼかすことができます。
グラデーション

カラーグレーディング
コントラスト、サチュレーション、ブライトネスの適用をコントロールします。

Rim
リムライトを追加できます。
輪郭に環境を入れたい時に使用しますが、最近は余計な情報が増えるので使わなくなりました。

ディゾルブ
与えられたパターンに基づいてサーフェイスを溶解します。

頂点アニメーション
バーテックス・アニメーションには3つの一般的なアニメーションがあり、これらはシェーダー側で計算されます(追加の設定は必要ありません)。

マテリアル使用例について

ハイパーカジュアルでは基本テクスチャを使用しないゲームが多かったのですが
最近ではミッドコア化していますので、テクスチャを使用しているパターンも
増えてきています。画面内のコントラスト•色の意味(ポジティブ•ネガティブ)を「ゲームとして重要な部分」はどこなのか?をし意識し画面内の絵作りをしていきましょう。

類似のシェーダー

似たようなシェーダーではToony Colors Pro 2などあります。
Toony Colors Pro2リンク