プロファイラー

このページは自動翻訳されており、誤りが含まれる場合があります。誤りを見つけた場合は「このページを編集」リンクからご協力ください。

Turianにはエンジン内蔵プロファイラーが搭載されており、最適化を推測ではなくデータに基づいて行うことができます。これはゲームのプロファイラーであり——エンジンとスクリプトが行う作業を測定し、エディターのUIは測定しません——Turian Studio内でもビルド済みゲームでも動作します。

測定内容

  • CPUゾーン——全スレッドにおけるネストされたスコープ付きタイマー。組み込みゾーンはGPUシーンレンダラー(render.scenerender.uploadrender.shadowrender.main)とスクリプト更新(scripts.update)をカバーします。独自のゾーンを追加することもできます。
  • レンダーカウンター——フレームごとのドローコール、トライアングル、頂点、テクスチャバインド、マテリアル切り替え、作成されたテクスチャをGPUシーンレンダラーから直接収集します。
  • フレームタイミング——フレームごとのウォールクロックCPU時間を、過去数秒間にわたってグラフ化します。

記録:プレイモードに連動

プロファイリングはプレイモードでのみ実行され、いつ実行するかを制御できます:

  • ● 記録 / ❚❚ 一時停止 は、プレイ中にキャプチャを開始および一時停止します——実行の後半部分のみをプロファイリングしたい場合に便利です。
  • プレイ時に自動記録(チェックボックス)は、再生ボタンを押した瞬間に記録を開始するか、記録ボタンを押すまで待つかを決定します。
  • 停止を押すと、キャプチャされた履歴が凍結され、調査できるようになります。

アイドル状態のエディタービューポートは測定されないため、数値は常にゲームを反映します。ステータス行(● 記録中 / ❚❚ 一時停止中 / ■ アイドル)が現在の状態を表示します。

Studioパネル

表示 ▸ プロファイラーを表示(トグル)から開きます。フローティングパネルには以下が表示されます:

  1. 記録トランスポート、VSyncトグル、FPS上限セレクター(無制限 / 30 / 60 / 90 / 120)。VSyncは上限とは独立しています——モニターのリフレッシュレートを超える上限は、VSyncがオフの場合にのみ有効です。
  2. スクリーンショットをキャプチャおよびトレースをエクスポートボタン(以下参照)。
  3. フレーム時間チャート。固定0–50msスケールに60fpsと30fpsの基準線があり、フレームレートの変化がバーの高さに視覚的に反映されます。各バーは分割されています:下部のCPUビジー部分(60/30fps予算に収まるかどうかで青/黄/赤に色分け)と、上部のアイドル/キャップ待機部分(暗い灰色)。つまり、fpsを制限すると高くてほとんど灰色のバーになります——バーの高さは低いフレームレートを示しますが、コードが遅いわけではなく、キャップを待機しているだけなので赤くなりません。チャートをクリックまたはドラッグして、タイムラインの固定フレームをスクラブします。最新の列(または**● ライブ**)をクリックすると、最新フレームの追跡に戻ります。白いマーカーが固定/ライブフレームを示し、履歴セレクター(2秒/4秒/8秒)でスクラブ可能な範囲を設定します。
  4. タイムライン——中心となる要素。各スレッドがレーンになり、ネストされたゾーンは深さ方向に下に積み重なり、フレームの継続時間に比例して左から右に配置されます(フレームグラフのように)。ゾーンの色はフレーム間で安定しているため、スコープは監視中に色を維持します。タイムラインは固定されたフレームを表示するため、履歴をスクラブバックして任意のフレームで実行された内容を正確に検査できます。
  5. 表示フレームの**レンダリング(シーン)**カウンター。
  6. 折りたたみ可能な**エディターCPU(スタジオ)**セクション——エディター自身のフレームタイミング。ゲームのシーンメトリクスを前面に出し続けるためにしまわれています。

レンダラーはエディタービューポートと出荷ゲームの間で共有されるため、パネルに表示される数値はシーンのレンダリングにかかる実際のコストです。

分析用にエクスポート(Perfetto)

トレースをエクスポートは、記録された履歴をChrome/Perfettoトレースイベント形式で <project>/profiles/trace_NNNN.json に書き込みます。ui.perfetto.dev または chrome://tracing で開いて、フレーム間のゾーン分析、フレーム比較、本格的なツールを使ったフレームグラフの詳細調査が可能です。(Perfettoは分析側のツールであるため、トレースをStudioに再インポートする必要はありません。)

スクリーンショット

3Dビューポート(実際のGPUレンダリングシーン)を任意の瞬間にPNGとしてキャプチャします——レンダリングの不具合の発見、プロポーションの確認、チームメイトやAIアシスタントとのフレーム共有(PNGはどこでも開けます)に便利です。

  • 表示 ▸ スクリーンショットをキャプチャ、またはプロファイラーパネルのスクリーンショットをキャプチャボタン。
  • ファイルは <project>/screenshots/shot_NNNN.png に保存されます(次の空きインデックスが使用されるため、ショットが上書きされることはありません)。パネルが保存先のパスを報告します。

独自コードのプロファイリング

スクリプトの任意のセクションをスコープ付きゾーンでラップすると、タイムラインに表示されます:

const engine = @import("engine");

pub fn update(self: *@This(), frame: engine.Frame) void {
    var z = engine.Profiler.zone("MyScript.heavyWork");
    defer z.end();
    // ... 負荷の高い処理 ...
}

ゾーンは自動的にネストされます:別のゾーン内で開かれたゾーンは、フレームグラフでその子ゾーンになります。

無効時のコスト

プロファイラーはデバッグビルドではデフォルトでオン、それ以外ではオフになっているため、出荷するリリースゲームはオプトインしない限りコストを支払いません:

engine.Profiler.enabled = true; // リリースビルドで有効化

無効の場合、すべてのエントリポイントは単一のブランチで早期復帰します。

ビルド済みゲームのプロファイリング

ビルド済みゲームも同じプロファイラーを実行します。生成されたゲームループは各フレームを Profiler.beginFrame/endFrame で括り、レンダラーとスクリプト更新ゾーンを記録します。画面上のオーバーレイHUD、フレームデータエクスポート(JSON/CSV)、およびオプションの Tracy 統合はロードマップに載っています(issue #35)。


← すべてのドキュメント このページを編集