負荷を減らす方法

仕事でUnity-モバイル案件を受けることになって負荷検証をしようとしてるのだけど、そもそもどういうことをすればいいのかわからないのであれこれ試してみる。

<負荷を知る方法>
■そもそもの問題点
Android端末で実機の処理時間をUnity-Profilerで調べるとCPU時間しか出ない。
GPU時間はどーすりゃええねんって感じ。

■試したこと
・Adreno Profilerを導入した
Snapdragonだったら大体これ使うっていうの見つけたので導入。
でもフレーム単位の処理時間を一発でわかるような項目見当たらず…

FPSGPU-% Busyって項目から割り出せばいいのかな…?
なんか違うような気がして仕方ない。

●PCで試してみる
実際モバイル端末でも有用になるかわからないけど、参考としてPCではどのような対処が有用なのかを試してみる。
リトライしやすいのもあるし。


こんなシーンで試してみる。
初期SDユニティちゃんについてるスクリプトは一通り消してプレハブ化した。
乗ってるスクリプトはカメラにアタッチしてある特定のプレハブをインスタンス化するスクリプトのみ。
400体が映るような画を出すと、CPU:57ms前後、GPU:50ms前後となる。
なお、マテリアルは各々インスタンス化(Instancedと表示される)状態にしています。

■CPU
・fbxのRig-Optimize Game Objectを有効にする(CPU:57ms -> 45ms程度に改善)
 →ノードがヒエラルキーから消え去るので、動的に特定の骨を動かす等ができなくなってしまう…
・Lightコンポーネントを無効にする(CPU:57ms -> 42ms程度、GPU:20ms程度に改善)
 →当然真っ暗になるので実用的ではない…
・Light - Shadow typeをSoft ShadowからNo Shadowにする(CPU:57ms -> 42ms程度、GPU:20ms程度に改善)
 →無効にした時とほぼ同等。影描画のコストのデカさが覗える。
GPU
・Cast Shadowsを一律Off (GPU:50ms -> 35ms程度に改善)
・Player - Other Settings - GPU SkinningをON(GPU:50ms -> 37ms程度に改善)
・Quality - Shadows - Shadow ProjectionをClose Fitに変更する(GPU:50ms -> 44ms程度に改善)
 →稼げるが、制約に留意する必要がある(参考:http://tsubakit1.hateblo.jp/entry/2016/11/25/005559
・Quality - Shadows - Shadow Disatnceを150->10に変更する(GPU:50ms -> 36ms程度に改善)
 →短すぎると見た目が問題になるかも。