前提条件
- Unity2022.3.6f1 を使用して書いています
- built-in や URP を使用した各プロジェクトにて確認しています
OverDraw について
描画時に同じ部分を何度も描画していることを指しています。
不透明半透明問わず発生しますが、半透明の場合は全てOverDrawが発生します。
2DのUIは基本半透明のため OverDraw が発生します。3Dなどのメインを描画した後に行うことが多く回避し辛いです。
全てを対策することは現実的とは言えませんし、表現に制限をかけてしまうことがあります。目標とするスペックに対して問題になりやすい部分を開発初期からケアしていくのが良いかなと思います。
OverDraw が発生するとどう問題になるのか
描画に時間がかかり、FPSの低下などにつながります。
特に解像度の高い VR などでは影響が大きくなりやすいです。
OverDraw への対策
開発メンバーと相談を行いながら対策していくことなります。
アセットに影響すること多く、開発メンバーの理解を得て進めることが重要になります。
使用していない描画を削除する
使用していない描画を削除することで、不要な描画を減らすことができます。
Frame Debugger を使用して不要な描画が起きていないか確認することができます。
半透明の描画物を減らす
テクスチャのAlpha抜きで見た目を作っているものをメッシュ化して不透明化することで、半透明の描画物を減らすことができます。
Alphaの値が小さく面積の大きなポリゴンを何十枚と重ねて見た目を作っている場合は 1枚あたりを濃くするなどで枚数を減らす事で削減につながることがあります。
Scene View の Shaded Wireframe や Overdraw を使用して、半透明の描画物を確認することができます。
描画の順番を調整する
不透明は Geometry の 2000 になっていること、
AlphaClip(Cutout)を使用している場合は AlphaTest の 2450 になっていること
半透明は Transaparent の 3000 になっていることを確認します。
不透明で問題のない描画を半透明で行ってしまうと必要のない OverDraw が発生してしまいます。
詳細の順番は、Unity の RenderQueue の定義を参照ください。
考えている順番で描画が行われているようにして OverDraw を削減し、順番を意識することで勿体ない描画に気づきやすくなります。
メッシュを一体成型にする
メッシュを一体成型にすることで、メッシュ内のポリゴンの描画順番による OverDraw を回避することができます。
back カリングなどを使用している場合は、表面のポリゴンが複数重なっているところで OverDraw が発生します。
最後に
放置すると開発中盤や終盤などで大きな問題になることもあります。
FPSが下がれば体感を損ねる事も多いので、対策していくことでプロジェクトへ貢献になると考えています。
目に見える問題よりも影響度合いが見えづらいため、
変更前と変更後で効果量を可視化していくのがおススメです。