x
作ったscriptが重いかどうか知りたいだけだった
・・・なのに深みにはまってしまいました
誰かが正しい解説記事を書いてくれると期待して体験記を書きます
読者対象は中級者向けのCluster記事を書けそうな人です
2024.0328 更新
目次----------------
記事の目的
信頼できるミリ秒を探し求めた経緯
時間についてのエッセイ
Unity profiler お勧め手順案A
その他の手順と疑問点
参考文献
環境その他
記事の目的 ---------------
作ったscriptの処理時間を知るためにUnity profiler を再勉強してみました
Unity profiler の一般の記事は ありますが 難しく奥が深く発展途上のようです
さらに Cluster CCK で成立するのかという 条件付きで学習せざるを得ません
どこかに不具合やちょっとしたバグがあれば なおさらつまづきます
そこで 条件として
CCK + かおもさんのエミュレーター + Unity profiler
の環境で解説記事がほしいです
問題提起をかねて体験記を書いてみます
信頼できるミリ秒を探し求めた経緯-------------------------------------------
処理負荷をどれで判断するか深入りした経過です
簡単なものから難しいものの順で述べます
1. Cluster本番の 統計 ------------------v
Clusterのワールドに入った時の右上に表示される統計です
他人のワールドも測定できます ms=ミリ秒があります
FPS:(CPU ms Render ms)
リアルタイムで数値が変化するので最初のうちは頼りにしていました
アバターの見る風景を動かす・・つまりカメラを動かすと
即刻にrenderのミリ秒が変化して わかりやすかったです
重たいバーカウンタや鏡や多数のアバターに視線を向けると
グラフィックの処理負荷が重くなるのがわかります
しかし、script負荷や厳密な分析や比較には不便を感じます
数値が刻々と変化するのでどの値を記録すればいいのでしょう
VRの場合はsteamの ミリ秒表示を使う手もあります
Clusterの値とは同じではないようです
2. Cluster本番の Consoleのエラーと警告------------^
ワールド制作者にしか見えないアレです
処理時間に関する警告が出ることがあります
WARN: script execution (383ms) exceeded the soft limit (50ms).
Scriptに関するエラーもあります
Script has allocated too much memory
これが不便であるということは別記事に書きました
3. UnityのPlay Gameの statistics (統計表示) ------------
このなかで SetPass calls の値は グラフィック負荷の判断に使えました
しかし、処理時間を表すミリ秒は不安定でコロコロ変わりすぎます
しかも3種類あります
FPS( ms) CPU:main msの値 render Thread msと
これらは何を意味しているのでしょうか
簡易的に瞬間的な変動を知るぐらいにしか役立たないように思います
目視で平均値を推定して記録しようとしても
script負荷や厳密な分析や比較には不便を感じます
原因を洞察するには向いていませんが症状を記録したり報告書にするのに便利です
平均値や中央値を算出してくれています。
詳細は手順の章を参照ください
いまのところ この中央値が 信頼できて再現性の高い 記録向きの値と思っています
1フレームの処理時間です
scriptを使ったワールドの比較に使えそうです
profilerの使い方の資料を見聞きすると
実機での測定や ビルドしてからの測定が書かれています
editorのよけいな影響を受けずに理想的と書かれています
Cluster CCKの場合 そういう条件での測定がなさそうです
なお、standalone(profiler)での測定は未調査です
Window > Analysis > Profilerを開いています
Window > Analysis > Profile Analyzer を開いています
これは標準ではメニューにありません PackageManagerからインストールしています
なお今回の測定データは CCKTemplateの MinimalSample.unity を使っています
◯ 文献や動画を参考に現時点のまとめです 間違っていたらごめんなさい
まずProfiler Modulesは defaultで Play Mode のはずです
Profiler の赤丸ボタンをオンの状態で playgameオンにして 測定します
適度に測定グラフが安定したところで止めます
ちなみに defaultでは300フレームしか記録できません
CPU usage windowで クリックすると止まります
これは playgame pause || をクリックしたのと同じことのようです
ProfilerのCPU usage windowで 適当な時刻(フレーム)を選べます
肉眼でグラフのスパイクの時刻を選んだりできます
今回は平均的な処理時間を知りたいので
肉眼でグラフの平均的な時刻を選んでいましたが、それよりは
Profile Analyzerの Frame Summary の Median の値を使いたいと思います
平均値ではなく中央値を使います 数値の再現性と信頼性が上がりました
今回の測定では11.08ミリ秒です
ちなみに測定データは CCKTemplateの MinimalSample.unity です
床と空しかない軽いデータですが かおもさんのエミュレーターの FPS制限90FPS設定によって
11msに調整されているはずです 予定どおりでした
この手順に間違いない・・・と思いたいわけです。
なので他の手順も調べます
◯ 考察・・・これはたぶん測定失敗だと思います
profilerを最大化したり game画面が見えない状態で 測定すると
TimeLineのrender Threadに 緑ブロックがびっしり出現します
測定データが MinimalSample.unity でない場合も同様でした
拡大するとピアノ鍵盤のようです
CCKのみ場合 ピアノ鍵盤症状は現れないので
かおもさんのエミュレーターのFPS制限の副作用と考えられます
文献にそのような注意事項が見当たらないので どなたか解説してほしいです
とにかく 測定時には 念のためそうならないように注意することにします
ちなみに game画面は freeAspectよりも FullHD1920x1080固定にしています
1フレームが4msという小さい値がでます
シーンの内容にかかわらずほぼ同じ値になるので
これは UnityEditorだけでの処理負荷のようです
かおもさんのエミュレーターの FPS制限90FPS設定が効いてないようです
◯ 考察・・・風袋引きのようなものでしょうか マシンによる差異を差し引きするのでしょうか
手順案D [ EditMode + Play ] の場合 -------------------v
EditMode で PlayGameすると 別の測定結果がでます
かおもさんのエミュレーターの FPS制限90FPS設定が効いてないようです
TimeLineの構造がシンプルなので何かに使えそうです どなたか解説してほしいです
◯ 考察・・・たまに変な値になるし、文献にもないし よくわかりません
profilerのCPU USAGEのグラフの横軸はフレームです。縦軸がミリ秒です。
横軸が普通の時間ではなく 面積が時間ということになります
1フレームの時間が一定という暗黙の前提ならば横軸も普通の時間軸だろう
・・とうっかり勘違いしていました。
映像編集で身についた時間の観念と思い込みが邪魔をします。
◯ 補足 profilerのtimelineの見方-------------
CPU USAGEで適当なフレームを選択しないと何も見えてきません
横軸は時間です 0秒とは何でしょう
どこからどこまでが1フレームか
表示をスケールすると 白い枠線が2本見えてきます