Open2

「Unity パフォーマンスチューニング バイブル」を読むよ

むんすりむんすり

第1章

主にPC環境にてVRCSDKを利用する前提として、重要そうなところをピックアップしていく

1.1.1 指標を決める & 1.1.2 メモリの最大使用量を把握する

  • ワールドを作るのであればフレームレートは気にしたほうが良さそう。

ただ、個人で性能検証のため低スペックPC~高スペックPCを揃えてチェックするのは非現実的なので
普段使いのワールドから幾つかリファレンス用のワールドをピックアップして、目標とすべきフレームレートを決めるのが良さそう?

メモリに関する記述が多いが、本書はモバイルアプリ開発者向けということもありモバイル端末のメモリ制約が厳しいためだろうか?
自分のPC環境(RAM32GB, VRAM12GB)だとVRCをやっていてメモリ不足が原因で落ちる、という事象には出くわしたことがないため優先度は低くても良さそう

1.3 パフォーマンスチューニングに取り組む

  • 心構えの1つ目である「計測し、原因を特定すること。推測はダメ」→これ大事。
    • ユニマジのワールド専攻科で計測の授業があったが、全く同じことを教えてもらったな…
  • 心構えの2つ目、「修正したら必ず結果を比較」も忘れがちだけど重要ですね。

1.3.2 性能低下の種類

  • クラッシュはVRCSDKを使っている限りはまず出くわさないので、「画面の処理落ち」「長いロード時間」に焦点を絞っていきたい。
  • 「長いロード時間」について、本書では「CPU や GPU の処理時間」が原因としているが、VRCでは主にワールド・アバターのダウンロード(orローカルキャッシュ読み込み)~アンパックまでの一連の流れ、つまり「回線速度」が主に絡んでくるような気がする
    • モバイルアプリ開発だと、初回のアセット類のダウンロードさえ終われば基本的には都度の通信によるダウンロードサイズはそこまで大きくはないからでしょうかね?

1.6 メモリを削減しよう

  • Android向けにアバターをアップロードするのであれば、テクスチャの圧縮設定は結構大事。
    • 容量オーバーでエラーが出た場合は一段階テクスチャサイズを落としてやると解決することが多い。

1.9 定常的な負荷を調査する

1.9.2 GPU バウンド

  • 出た!!!オクルージョンカリング!!!

    • 設定するしないでパフォーマンスが劇的に変わる場合がある、というのをよく聞く。
    • ワールドの端っことか、作者が想定していないエリアとかに入るとオブジェクトが急に消えたりするのもオクルージョンカリングの副作用?
  • Static Batchingって何だ…?

https://docs.unity3d.com/ja/2022.3/Manual/static-batching.html

これらしい。インスペクタの右上にあるチェックボックスのやつから設定できるんですね。
ワールドを作る場合、動かないオブジェクトは基本Static Batchingを有効にしておくのが良さそう。

個別に負荷をみる

  • 「まとめて描画する」の具体的な方法とは?

    • Static Batchingを設定することもまとめて描画、と言えるだろうか。
    • Blender等を使って複数オブジェクトを1つのデータに纏める、も方法の一つ?
  • リダクションツールといえばこれ。Mantis LOD Editor。50%オフのセールが頻繁に行われているので安い時に買うのが良い。

https://assetstore.unity.com/packages/tools/modeling/mantis-lod-editor-professional-edition-37086?locale=ja-JP&srsltid=AfmBOoqEs6NkzmBNgSMXHJ8pE0I28t67VoPMEqUTYt4Aoqw0f0Xlppst

  • 「Shaderの処理を見直す」→アバターギミックやワールド制作であれば、以下の2点だろうか?
    • 高負荷なカスタムシェーダーは必要最低限に。
    • Unlitシェーダーは軽量なため、Unlitで良いところはUnlitシェーダーに変える。

1章まとめ

  • VRCSDK環境下であれば、実行時エラーやメモリ消費によるクラッシュはそんなに発生しない(はず)。
    • なので、ワールド制作者としては「定常的な負荷(ワールドを動き回っている間のフレームレート)」と「ロード時間」の2点に注意していけば良さそう。