ブラウザのタイミング (Browser Timings)
このページでは、Application.targetFrameRate パラメータに関連する WebGL アーキテクチャの技術的な制限について詳しく説明します。
Unity プロジェクトを WebGL 用にコンパイルする場合、Application.targetFrameRate パラメータは、エンジンの内部フレーム制限を変更するだけでなく、メインループが実行されるベースとなるブラウザ APIも変更します。
無制限 (Uncapped) (requestAnimationFrame)
フレームレートの制限を解除すると(Unity のバージョンに応じて Application.targetFrameRate を -1 または 0 に設定)、Emscripten コンパイラは Unity のメインループをブラウザ API である window.requestAnimationFrame に直接接続します。
- 利点: これは、Web 上で最もネイティブで、スムーズで、正確なレンダリング方法です。ブラウザは、この呼び出しをモニターの画面リフレッシュレート (VSync) と自動的に同期します。
- 分析:
cpuMainThreadFrameTimeメトリクス(WebAP によって読み取られる)は、CPU が物理演算とスクリプトの計算に費やした実際の時間を反映するようになります。
人為的な制限 (setTimeout)
特定のフレームレートを厳格に課した場合(例:Application.targetFrameRate = 30)、Emscripten は requestAnimationFrame の使用を余儀なく放棄します。代わりに、setTimeout() API、または複雑な内部タイマーの組み合わせを利用して、ループを人為的に遅らせます。
CPU メトリクスの歪み (Emscriptenの罠)
人工的なタイマーは、CPU 時間を測定する際に巨大な不一致とエラーを引き起こします。プロセッサはゲームロジックのすべての計算をわずか 5ms という超高速で完了し、アイドル状態に入ったとしても、setTimeout タイマーが切れるまで WaitForEndOfFrame コルーチンは再開されません。
結果: FrameTimingManager は、この待機時間を CPU タイミング内に記録します。プロファイラー(および WebAP のトラッカー)は、プロセッサが機能的にアイドル状態であり、フレームが単にブラウザタイマーを待っているだけであるにもかかわらず、CPU ボトルネック が発生していると結論付けます。
正しい設定戦略
Web Adaptive Performance がブラウザで最適に機能するためには:
Application.targetFrameRateを使用しないでください。-1(無制限)のままにします。- プラグイン設定内で目的の FPS を指定します(
Target Min FPS = 60)。WebAP はこの値を厳格な制限としてではなく、レンダリング品質を決定するためのベースラインとして利用します。
