Version: 5.4
プロファイラーウィンドウ
Rendering (レンダリング) Profiler

CPU Usage Profiler

CPU Usage Profiler (CPU使用率プロファイラー) はゲームのどの部分で時間が使用されているかを表示します。選択すると、下方のペインは選択されたフレームの階層的なタイムデータを表示します。詳細は プロファイラーウィンドウ を参照してください。

  • Hierarchy モード 階層的にタイムデータを表示します。
  • Group Hierarchy モード: タイムデータを論理グループ (Rendering、Physics、Scripts その他) に分けます。あらゆるグループ内の子が別のグループに存在できるため (例えばスクリプトがレンダリングを呼ぶ、等)、グループの時間は 100%を超えることがしばしばあります。

グラフのラベルを上下にドラッグして CPU グラフの重なり順を変えることができます。

各項目の選択

下方のペインの項目を選択すると、その CPU のグラフに関係しているものはハイライトされます (残りは薄く表示されます)。選択解除するには項目を再度クリックします。

Render.OpaqueGeometry が選択されており、関係するものがチャートでハイライトされている
Render.OpaqueGeometry が選択されており、関係するものがチャートでハイライトされている

階層的に表示されているタイムデータで、Self の行は、特定の関数にかかった時間の量が表示されています。これにサブ関数の呼び出しに要した時間は含まれません。上のスクリーンショットの例では、時間の41.1%は Camera.Render 関数に消費されています。この関数は多くの作業をこなしており、さまざまな描画とカリングの関数を呼び出しています。しかし実際には、これらの関数を除けば、Camera.Render 関数自身に使用したのは消費時間のうち2.1% にしかすぎません。

Time msSelf ms 列は同様の情報を表示していますが、表示方法をミリ秒としています。 Camera.Render には0.01ミリ秒かかっていますが、そこから呼び出される関数すべてを含めば0.21秒かかります。 GC Alloc の行は現在のフレームにおけるメモリの割り当て量を表しています。これは後からガベージコレクターによって回収されます。この値を 0 に保つことによって、フレームレートでガベージコレクターのしゃっくりを避けることができます。

CPU プロファイラーの Others は Renderer、Scripts、Physics、ガベージコレクタまたは VSync に分類されていないすべての領域の合計を記録しています。この中にはアニメーション、AI、オーディオ、パーティクル、ネットワーキング、ローディング、PlayerLoop が含まれています。

Physics マーカー

以下では、多様な高レベル物理プロファイラーマーカーの意味についてそれぞれ説明します。

  • Physics.Simulate: FixedUpdate から呼び出されます。この関数が物理シミュレートを行う PhysX に指示を出すことによって物理の現状を更新します。
  • Physics.Processing: FixedUpdate から呼び出されます。布の物理演算以外はすべてここで処理されます。このマーカーを開くと PhysX 内部で実行されている作業の低レベルの詳細が表示されます。
  • Physics.Processing: FixedUpdate から呼び出されます。布の物理演算以外はすべてここで処理されます。このマーカーを開くと PhysX 内部で実行されている作業の低レベルの詳細が表示されます。
  • Physics.FetchResults: FixedUpdate から呼び出されます。ここに、物理エンジンから収集された物理シミュレーションの結果が保存されます。
  • Physics.UpdateBodies: FixedUpdate から呼び出されます。この関数はすべての物理的な物体の位置と回転を更新させます。更新指令の送信元も同様に更新します。
  • Physics.ProcessReports: FixedUpdate から呼び出されます。このステージは物理の FixedUpdate によって最終的な状態が決定するたびに1度実行され、シミュレーション結果に応じてさまざまなステージが処理されます。接触、結合の解除やトリガーはこちらから送信されるメッセージで更新されます。これには独自な4つのステージがあります。
    • Physics.TriggerEnterExits: FixedUpdate から呼び出されます。ここでは OnTriggerEnterOnTriggerExit イベントが処理されます。
    • Physics.TriggerEnterExits: FixedUpdate から呼び出されます。ここでは OnTriggerEnterOnTriggerExit イベントが処理されます。
    • Physics.TriggerEnterExits: FixedUpdate から呼び出されます。ここでは OnTriggerEnterOnTriggerExit イベントが処理されます。
    • Physics.JointBreaks: FixedUpdate から呼び出されます。ここではジョイントの破壊の処理に関係したことの更新、メッセージの送信を行います。
  • Physics.UpdateCloth: Update から呼び出されます。ここでは布や、Skinned Mesh の形成に関連したことを更新します。
  • Physics.Interpolation: Update から呼び出されます。このステージはすべての物理オブジェクトの位置や回転の補間を処理します。

パフォーマンスに関する警告

CPU Profiler が検知し、警告可能な一般的な問題がいくつかあります。これらの警告は CPU Usage を見ていると、下方ペインの Warning 列に表示されます。

静的コライダーが移動されたことを警告するプロファイラー
静的コライダーが移動されたことを警告するプロファイラー

プロファイラーが検知し得る特別な問題には以下のようなものがあります。

  • Static Collider.Modify (高価な遅延のコスト)
  • Static Collider.Move (高価な遅延のコスト)
  • Static Collider.Create (高価な遅延のコスト)
  • Animation.DestroyAnimationClip [RebuildInternalState を引き起こします]
  • Animation.AddClip [RebuildInternalState を引き起こします] *Animation.RemoveClip [RebuildInternalState を引き起こします]
  • Animation.Clone [RebuildInternalState を引き起こします]
  • Animation.Deactivate [RebuildInternalState を引き起こします]

上記スクリーンショットでは、Profiler は Static Collider.Move の警告を発しています。Warning の列では現在のフレームで 12 回警告が発生しています。 “Delayed Cost” という用語は、Profiler は現時点では低いコストを示しているかもしれませんが (この場合 0.00ms です)、このアクションはよりダメージのある操作を後に引き起こす可能性があることを意味しています。

プロファイラーウィンドウ
Rendering (レンダリング) Profiler