シーンのパフォーマンスとメモリを分析する

 
 
 

Scene Debugger を使用すると、シーンのパフォーマンスを分析できます。シーンのエレメントによって消費された処理時間とメモリが通知されるため、処理を遅くしている原因を特定して解消することができます。

Scene Debugger を開くには

次のいずれかの操作を実行します。

  • [表示](View) [一般](General) [Scene Debugger]を選択します。

または

  • メインの Softimage ウィンドウ下部にある[Scene Debuggerを開く]ボタンをクリックします。

Scene Debugger の概要

A

[パフォーマンス](Performance)[メモリ](Memory)を切り替えます。

[メモリ]に切り替えたら、[更新]をクリックする必要があります。[メモリ]に切り替えることによってキャプチャされたパフォーマンス データが消去されるため、再び[パフォーマンス]に切り替えたときにデータを再キャプチャする必要があります。

B

テキスト ファイルに書き出すか、プリファレンスを設定します。

C

表示を更新します。ノード下で統合を停止または開始した後、あるいはプリファレンスを変更した後に、クリックします。

D

データをクリアします。キャプチャも停止されます。

E

パフォーマンス データのキャプチャを開始または停止します。これは、パフォーマンス データの表示に必要です。([パフォーマンス]タブのみ)

F

表示用にオペレータがどのようにグループ化されるかをコントロールします。([パフォーマンス]タブのみ)

  • [オブジェクト下を統合する](Consolidate Below Objects)を選択すると、コール スタック内のすべてのオペレータが、各オブジェクトの下のリストにまとめられます。デフォルトでは、オペレータはカテゴリ別(アニメーション、デフォームなど)にグループ化されます。

  • [描画ステップ下を統合する](Consolidate Below Drawing Steps)を選択すると、コール スタック内のすべてのオペレータが、各オブジェクトの関連付けられた描画ステップ(Transform、Visibility Determination、または Draw Primitive)の下のリストにまとめられます。この場合も、デフォルトではオペレータはカテゴリ別にグループ化されます。

  • [カスタム](Custom)は、下のビューで右クリックすることによって表示を変更したことを示します。このメニューから直接[カスタム]を選択しないでください。最後のカスタム状態が保存されず、取得できなくなります。

G

パフォーマンスまたはメモリに関する情報がこのペインに表示されます。

[パフォーマンス]タブで特定のノードを右クリックすると、オペレータの統合方法をコントロールできます。続けて、[更新](Update)をクリックします。

H

[パフォーマンス]タブの詳細

  • [Net Total]には、ノードおよびその子(ノードが引き出すすべてのオペレータ)が費やした時間が表示されます。

  • [Executing]には、ノード自体が費やした時間が表示されます(子は含みません)。

  • [# of requests]には、出力のためにノードが呼び出された回数が表示されます。ノードが呼び出され、まだ評価されていない場合は、評価がトリガされます。

[メモリ]タブの詳細については、「メモリ データを表示して解釈する」を参照してください。

パフォーマンスをプロファイリングする

シーンに対するパフォーマンスのプロファイリングを実行するための一般的な手順について、ここで簡単に説明します。

  1. [表示](View) [一般](General) [Scene Debugger]を選択し、[パフォーマンス]タブが表示されていることを確認します。

  2. 必要に応じて、[ファイル](File) [設定](Preferences)を選択し、[フィルタのしきい値](Filtering threshold)を設定してほとんど時間のかからないノードを除外することができます。

    この設定は後からでも変更できます。[更新](Update)をクリックしてください。ただし、シーンでキャプチャ対象となるデータの量に応じて表示の更新に長い時間がかかる場合があるため、望ましい値で開始するのが得策です。

  3. [オブジェクト下を統合する](Consolidate Below Objects)または[描画ステップ下を統合する](Consolidate Below Drawing Steps)を選択します。

    この設定も後から変更できます。[更新](Update)をクリックしてください。ただし、望ましい値で開始するのが得策です。

  4. パフォーマンス データのキャプチャを開始します。

  5. シーンを再生するか、シーンを操作します(デフォーマの移動など)。

  6. 次のいずれかの操作を実行します。

    • キャプチャを停止します。

      または

    • タイミング情報を蓄積する場合は、キャプチャを続行し、[更新](Update)をクリックします。

    パフォーマンス データが Scene Debugger に表示されます。データの解釈方法については、「パフォーマンス データを解釈する」を参照してください。

  7. 評価に長い時間のかかるノードが見つかったら、そのノードをさらに調べてみます。ウィンドウの下部([Category]セクションの下の[Call Graph]セクション内)で、以下のタイプのノードを右クリックできます。

    • ジオメトリ ビュー(例: OpenGL Render View B)

    • 3D オブジェクト(モデルを含む)

    • 描画ステップ: Transform、Visibility Determination、Draw Primitive

    • オペレータ

    コンテキスト メニューには、互いに排他的な 2 つのオプションがあります。

    • このノード下を統合する(Consolidate Below This Node)。このオプションを選択すると、ノードによって呼び出されたオペレータがリストにまとめられます。データの表示を簡略化する場合に便利です。

    • このノードの下で統合しない(Don't Consolidate Below This Node)。このオプションを選択すると、そのノードの下でネストされたコール スタック全体が表示されます。どのノードがどのノードを呼び出しているかを詳細に確認する場合に便利です。

    これらの設定はノードごとに保存されます。どちらかのコマンドを選択すると表示が[カスタム](Custom)に変わりますが、すぐには更新されません。その他のノードを右クリックして、そのオペレータ コールの統合方法をコントロールできます。[更新](Update)をクリックしてください。統合を別の設定に切り替えると[カスタム]設定は維持されないため、メニューから[カスタム]に戻しても前のビューを復元することはできないことに注意してください。

    また、オペレータなどのノードの下に統合するように選択しても、ノードがコール スタックの上のポイントですでに統合されている場合は、機能しないことに注意してください。オブジェクトやオペレータの上の描画ステップからの統合を停止しなければ、オペレータの下での統合の効果を得ることはできません。

  8. シーンに変更を加え、必要に応じて操作を繰り返します。

    • パフォーマンス データを蓄積しない場合は、[クリア](Clear)をクリックして手順 4 に進みます。

    • データを蓄積する場合は、そのまま手順 4 に進みます(キャプチャを停止しなかった場合は、手順 5 に進みます)。

  9. デバッグを終了したら、[Scene Debugger]ウィンドウを閉じる前に[クリア](Clear)をクリックしてパフォーマンスデータを破棄します。

パフォーマンス データを解釈する

Scene Debugger におけるデータの解釈には注意を要します。たとえば、特定のノードの評価に異常に長い時間がかかっているように見える場合がありますが、それは単に、いずれにせよ評価しなければならない負荷の高いオペレータを最初に引っ張るノードであったためかもしれません。そのような場合、そのノードが負荷の高いオペレータを引っ張らないようにシーンを修正しても、同じ状態が他のノードに引き継がれてしまうだけです。また別の例では、左目の変換の計算に多くの入力を必要とした場合も、右目の計算には 1 つの入力しか必要でないことがあります。なぜなら、他の入力はすでに評価されているためです。

情報の配置方法

Scene Debugger の[パフォーマンス]タブの情報は、3 つのセクションに分けられています。

  • 最初の 2 行は、時間単位とフィルタリングに関する情報です。ユーザが設定した[フィルタのしきい値](Filtering threshold)より短いノードを除外することによって、データを簡略化することができます。「[Scene Debugging]プリファレンス」(「プリファレンス リファレンス」)を参照してください。しきい値を変更した後で、[更新](Update)をクリックしてデータを更新する必要があります。

  • 次のセクションは[カテゴリ]で、オペレータの全カテゴリの要約情報が表示されます。メインのセクションでのデータの統合方法に関係なく、このセクションは同じです。カテゴリは評価時間の降順に表示され、評価時間の長いカテゴリは自動的に展開されます。

  • メインのセクション[Call Graph]には、ユーザが選択したオペレータの統合方法に応じて、詳細なタイミング データが表示されます。ここでも、ノードは評価時間の降順に表示され、評価時間の長いノードは自動的に展開されます。

    トップレベルの各ノードは個別のコール スタックを表します。ビューがミュートまたは最小化されていない限り、各ジオメトリ ビューに 1 つのノードがあります。ビューの描画以外で実行されたコール スタックを表す追加のノードがある場合もあります。たとえば、ローカル モードでマニピュレータを操作した後に、Softimage で階層の変換を評価する必要がある場合などです。

カテゴリ

オペレータは、Scene Debugger 上部近くにある要約でタイプ別に分類されます。

デフォルトでは、メインのセクションにある統合されたリストでも分類されます。これは[統合されたカテゴリを表示](Show the consolidated categories)でコントロールされます。「[Scene Debugging]プリファレンス」(「プリファレンス リファレンス」)を参照してください。このオプションがオフの場合、統合されたオペレータは分類されていないフラットなリストとして表示されます。

以下の表で、カテゴリについて説明しています。

アニメーション オペレータ

このカテゴリには、キネマティクスやコンストレイントなど、すべてのアニメートされた変換が含まれます。

デフォーム オペレータ

このカテゴリにはデフォーメーションが含まれます。デフォーメーションに使用される ICE ツリーは含まれません。

描画

このカテゴリは以下の描画ステップに分けられます。

  • Visibility Determination。オブジェクトの描画が必要かどうかを決定するためにかかった時間を表します。これには、バウンディング ボックスおよび除去の範囲の評価も含まれます。バウンディング ボックスを計算するには、オブジェクトのジオメトリを評価する必要があり、その結果、デフォーメーション オペレータなどの一部の入力が引き出されます。ノードが描画ステップの下で統合される場合、これらの入力はこのサブカテゴリに含まれます。ノードがオブジェクトの下で統合される場合、これらのオペレータは他のカテゴリ(デフォーメーションなど)の下に表示されます。

  • Transform。オブジェクトの中心を検出するためにかかった時間を表します。これは Visibility Determination でも必要ですが、動作を遅くしている実際の原因をわかりやすくするため、別に分類されています。たとえば、デフォーメーション自体ではなくエンベロープのリグが原因で、エンベロープが遅くなっている場合があります。Visibility Determination と同様、ノードが描画ステップの下で統合される場合、その子にはアニメーションなどのオペレータが含まれます(たとえば、クラスタのコンストレイントが原因で引き出されたデフォーメーション)。ノードがオブジェクトの下で統合される場合、これらのオペレータは他のカテゴリに表示されます。

  • Draw Primitive。Transform および Visibility Detection の後でオブジェクトを描画するためにかかった時間を表します。近似エンベロープ オペレータを使用する場合、ポイント位置と法線の評価にかかった時間がここに表示されます。

ICE オペレータ

このカテゴリには、その使用目的(デフォーメーション、シミュレーションなど)に関わらず、すべての ICE オペレータが含まれます。

ICE ツリーのパフォーマンスをプロファイリングする」(「ICE の基本」)の説明に従って ICE オペレータのパフォーマンスを個別にプロファイルすることができます。

オブジェクト

オペレータ評価外でオブジェクトによってもたらされたオーバーヘッドを表します。値は非常に小さなものでなければなりません。

OpenGL レンダ

更新されたビューのレンダリングにかかった時間を表します。

カスタム オペレータ

このカテゴリには、スクリプトおよびカスタムのコンパイル オペレータが含まれます。

スクリプト

パフォーマンス データのキャプチャ中に実行したスクリプトが含まれます。

タスク

操作中に呼び出したコマンドが含まれます。

トポロジ オペレータ

ジオメトリ コンポーネントを追加または削除するオペレータが含まれます。

その他のオペレータ

他のカテゴリに該当しないすべてのオペレータが含まれます。たとえば、エクスプレッション(アニメートされた変換を表す場合も表さない場合もあります)、クラスタ オペレータなどです。

イベント

これには、データ キャプチャ中のイベント処理にかかったすべての時間が含まれます。

最適化のための戦略

最適化の手法は、シーンによって大きく異なります。しかし、全般的に適用できる戦略もいくつかあります。

  • Visibility Determination に大量の時間が費やされている場合は(通常は、ジオメトリの計算に必要な時間)、オブジェクトがフレームの外にある間、オブジェクトの表示をオフにキー設定します。

  • Transform に多くの時間が費やされている場合は、アニメーションのプロット、ジオメトリのキャッシュ、リグの簡略化などによって時間の短縮を試みてください。

  • Draw Primitive にかかる時間を最低限にするには、フリーズを解除したテクスチャ プロジェクションなどを検討してみてください。

メモリ データを表示して解釈する

[パフォーマンス]タブと比べて、[メモリ]タブは非常にシンプルです。何もキャプチャする必要はありません。ただ[更新](Update)をクリックするだけです。[パフォーマンス]タブに再び切り替えたときに、パフォーマンス データを再キャプチャする必要はあります。

メモリ データは、以下の 2 つのセクションに分けられています。

  • 最初のセクションには、オブジェクト タイプ別のメモリ使用状況の要約が表示されます。

  • 2 番目のセクションには、オーナ別の詳細なメモリ使用状況が表示されます。

この情報によって、シーンで使用されているメモリを大まかに把握できます。ただし、全バイトがカウントされているわけではない点に注意してください。

データのコピーがリストされている場合は、メモリを節約するためにフリーズ可能なデータがあるかもしれません。ただし、これが該当しないケースもあります。コピーは内部データを表す場合もあり、こうしたデータは不要になったときに自動的に削除されます。