ICE ツリーをデバッグする
 
 
 

ICE ツリーには、問題を特定し、解決するためのいくつかの基本的なツールが用意されています。

問題のタイプ

ICE ツリーの構築中はさまざまなタイプの問題に遭遇する可能性があります。

  • 構造上の問題は、ツリー内のデータ タイプ、コンテキスト、構造に互換性がないことが原因で発生します。構造上の問題が原因でエラーになっているノードは赤で表示され、そのエラーが原因で評価されないブランチ内の他のノードは黄色で表示されます。赤いノードがある場合、または接続可能なノードが接続できない場合は、「ポートおよびノードのメッセージ」を参照してください。

  • ツリーが機能しているのに、期待通りの処理が行われない場合は、ポートに渡される値が間違っている可能性があります。シーンのポート値を表示できます。詳細については、「ポートの値を表示する」を参照してください。

  • ICE Tree ビューアのノードに実行時間を直接表示し、ツリーのパフォーマンスをプロファイリングして、処理時間がかかっているセクションを確認できます。「ICE ツリーのパフォーマンスをプロファイリングする」を参照してください。

ポートおよびノードのメッセージ

ポートおよびノードのメッセージは、互換性がないデータ タイプ、コンテキスト、または構造が原因で発生した構造上の問題を特定するのに役立ちます。

  • マウス ポインタをポートの上に移動すると、そのポートで使用できるデータ タイプ、コンテキスト、および構造(「Array of 3D Vector per Point of “PointCloud.pointcloud”」など)を示すポップアップ メッセージが表示されます。

  • ポートの詳細な情報を確認するには、ポートまたは接続を右クリックし、[ポート タイプを詳細にログ](Log port type details)を選択します。スクリプト エディタの履歴ペインに情報が記録されます。

  • ノードが赤い(エラー)の場合、マウス ポインタを(ポートの上ではなく)ノードの上に移動すると、最初のエラー メッセージが表示されます。すべてのエラー メッセージを表示するには、ノードを右クリックし、[メッセージの表示](Show Messages)を選択します。

  • 出力ポートを互換性のない入力ポートにドラッグすると、ポップアップ メッセージに互換性の問題が発生することを知らせるメッセージと、2 つのポートで使用可能なデータ タイプ、コンテキスト、および構造が示されます。

ポートの値を表示する

3D シーンにポートの値を表示して、ツリーがその結果を導き出した過程をビジュアル化することができます。ポートの値が表示された場合は、接続に「V」アイコンが表示されます。アイコンのカラーは、3D ビューのデータのカラーに対応します。

接続(A)の値を表示する

接続および評価済みのブランチにある値のみを表示することができます。

コンパウンドを書き出すときに、ポートの表示状態が保存されます。この機能は特に、デバッグの目的で値を表示するコンパウンドを作成するときに使用できます。ただし、データが確実にプッシュされるように、値を取得してから同じ値を設定し直す必要があります。

注:ジオメトリ アプロクシメーション法で分割されているポリゴン メッシュには、ポリメッシュ ハルが表示されていない限り、コンポーネントごとの属性を表示できません。

ポートの値を表示するには

  1. 接続または入力ポートを右クリックし、[値の表示](Show Values)を選択します。

  2. 選択したポートの値がまだ表示されていない場合は、[値の表示]ダイアログ ボックスが表示されます。目的の表示オプションを指定して、[OK]をクリックします。「[AttributeDisplay]プロパティ エディタ」(「プロパティ リファレンス」)を参照してください。

    指定しない場合は、値は最後の設定が使用されて表示されます。

ポート値の表示プロパティを変更するには

  1. 表示されているポートまたは接続を右クリックし、[値のプロパティの表示](Show Values Properties)を選択します。

  2. 目的の表示オプションを指定して、[OK]をクリックします。「[AttributeDisplay]プロパティ エディタ」(「プロパティ リファレンス」)を参照してください。

ポートの値を非表示にするには

  • 表示されているポートまたは接続を右クリックし、[値の非表示](Hide Values)を選択します。

    表示設定は、次に値をポートに表示するときまで保持され、再使用されます。

特定のビューのすべてのポート値の表示を表示または非表示にするには

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

  • ビューのツールバーにある目のアイコンをクリックし、[ディスプレイ/ICE 属性](Display/ICE Attributes)のオンとオフを切り替えます。

    または

  • 目のアイコンをクリックし、[可視性オプション](Visibility Options)を選択します。[属性]タブで、[ディスプレイ/ICE 属性](Display/ICE Attributes)のオンとオフを切り替えます。選択または選択解除したオブジェクトごとに、このオプションを設定できます。

この設定は、オブジェクトの[AttributeDisplay]プロパティと、ICE ツリーのポート値の表示の両方に影響します。

すべてのビューのすべてのポート値の表示を表示または非表示にするには

  • [ディスプレイ](Display) [可視性オプション(すべてのカメラ)](Visibility Options (All Cameras))を選択します。[属性]タブで、[ディスプレイ/ICE 属性](Display/ICE Attributes)のオンとオフを切り替えます。選択または選択解除したオブジェクトごとに、このオプションを設定できます。

この設定は、オブジェクトの[AttributeDisplay]プロパティと、ICE ツリーのポート値の表示の両方に影響します。

ポート値のログを記録する

接続からポートに渡された値のログを記録することができます。これにより、スクリプト エディタの履歴ペインを使用して、ツリーの挙動を分析することができます。

ポート値のログを記録するには

  1. Preset Manager の[ツール]タブにある[Debugging]カテゴリの[Log Values]ノードをツリーの 2 つのポート間で接続します。[Log Value]ノードの[In]ポートおよび[Out]ポートは、必ず接続されている必要があります。

  2. 必要な場合は、[Log Value]ノードの他のポートおよびパラメータを設定または接続します。「Log Values(値のログを記録)」(「ICE リファレンス」)を参照してください。

  3. タイムラインで 1 フレーム進めるなど、何らかの方法でツリーが再計算を行うようにします。

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

ICE Tree ビューアのノードに実行時間を直接表示して、ICE ツリーのパフォーマンスをプロファイリングできます。これにより、処理時間がかかっているノードを特定し、ツリーのどの部分を最適化すべきかを把握することができます。

A

[パフォーマンス タイマーの開始](Start Performance Timers): パフォーマンス ログをアクティブまたは非アクティブにします。通常は、このボタンを有効にしてから再生したりフレームを進めます。

B

[パフォーマンスタイマーをリセットします](Reset Performance Timers).パフォーマンスに関する数値がクリアされます。変更を加えた後でパフォーマンス値を新たにログに記録する場合は、このボタンをクリックします。

C

[パフォーマンスハイライト](Performance Highlight).次のいずれかを選択します。

  • [ハイライト無し](No Highlight):ノードとポートを通常どおり表示します。

  • [時間(1 番早いスレッド)](Time (Top Thread)):ノードごとに最もパフォーマンスが低いスレッドのパフォーマンスを表示します。ルートの[ICETree]ノードの数値は、ツリー全体と入力の合計を示したままになります。

  • [時間(すべてのスレッド)](Time (All Threads)):ノードごとにすべてのスレッドのパフォーマンスの合計を表示します。

D

[更新](Update):新しい値を表示する場合は、このボタンをクリックする必要があります。

ICE ツリーのパフォーマンスをプロファイリングするには

  1. パフォーマンス タイマーを開始します。

    この設定はツリーごとの設定のため、プロファイリングを行うすべてのツリーでパフォーマンス タイマーを開始する必要があります。

  2. シーンを再生するか、数フレーム進めます。

  3. パフォーマンス ハイライト([時間(1 番早いスレッド)](Time (Top Thread))または[時間(すべてのスレッド)](Time (All Threads)))を表示します。

    必要に応じて、タイマーを停止することも実行したままにすることもできます。

    各数値の意味に関する詳細ついては、「タイマー データを解釈する」を参照してください。

  4. 必要に応じて ICE ツリーに変更を加え、再度プロファイリングを行います。

    タイミング データを累積しない場合は、最初にタイマーをリセットしてください。

タイマー データを解釈する

パフォーマンス ハイライトを表示している場合、各ノードの数字は、そのノードが実行に費やした時間を示します。また、接続の数字は、そのブランチが実行に費やした時間(上流にあるすべてのノードが費やした時間)を示します。これらの値はおおよその目安であり、さまざまなオーバーヘッドが存在するため、正確に加算されたものではありません。

実行に最も長い時間がかかったノードと接続は、ツリーまたはコンパウンドに費やされた合計時間に対する割合に応じて、黄色、オレンジ色、または赤色でハイライトされます。内部的な動作により、[Execute]ノードと接続には、常に実行時間が表示されるわけではない点に注意してください。

  • [時間(すべてのスレッド)](Time (All Threads))の場合は、すべてのスレッドで費やされた合計時間が数字で示されます。ルート ノードの数字は、ツリー全体の評価で費やされた時間を示します。

  • [時間(1 番早いスレッド)](Time (Top Thread))の場合は、各ノードと接続で最も長い時間を費やしたスレッドの実行時間が数字で示されます。このモードでは、数字が加算されることはありません。これは、同じブランチの別のノードで、別のスレッドが最も長い時間を費やす可能性があるためです。ルート ノードの数字は、ツリー全体と呼び出しおよび評価が行われた入力の評価に費やされた合計時間を示します。たとえば、ツリーがオブジェクトのポイント位置を取得した場合、デフォーメーションの評価に費やされた時間が含まれます。

これらの数字を分析する際に覚えておくべき点がいくつかあります。

  • [時間(1 番早いスレッド)](Time (Top Thread))で示されている値が高いものの、平均値に近い場合、つまり[時間(すべてのスレッド)](Time (All Threads))で示されている値をコンピュータのスレッド数で割った値に近い場合は、ノードが大量の計算を実行したものと結論付けることができます。この状態を最適化するために対処できることは、計算的な負荷が大きいノードを回避することを除き、あまりありません。対処の例としては、ベクトルの計算に[Length]ではなく[Squared Length]を使用することや、不必要な計算を避けるためにチェックを行うことが挙げられます。

  • [時間(1 番早いスレッド)](Time (Top Thread))で示されている値が平均値よりもかなり大きい場合は、ツリー内にボトルネックまたはクリティカル パスが存在することを示します。この場合、ツリーの構成に応じてノードとブランチを再配置し、ボトルネックの影響を最小限に抑えることができます。

  • [時間(1 番早いスレッド)](Time (Top Thread))および[時間(すべてのスレッド)](Time (All Threads))で示されている値が同じ場合は、ノードがまったくマルチスレッド化されていないことを示します。この原因として、カスタム ノードがマルチスレッドをサポートしていない可能性がありますが、少量のデータしか扱っていない場合は通常の動作状態です。マルチスレッドにはオーバーヘッドが伴うため、必要でない場合は、ICE ではマルチスレッド処理を実行しません。

  • まったく実行されていないノードで小さな数字が示されるのは通常の動作です([If]ノードの場合など)。この時間は、初期化と事前評価にかかった時間を表します。

  • 出力ポートに複数の接続が存在する場合、大半の評価時間が、プルされる最初の接続に示されるのは通常の動作です。その他の接続には、通常はキャッシュされた値を取得するのにかかった時間が示されます。ただし、同じポートから出力されている複数の接続で高い値が示されている場合は、データをカスタム属性として保存および取得することを検討する必要があります。

  • 1 組のノード間に複数の接続が存在する場合、すべての接続で同じ時間が示されます。これはノード間のすべての接続で費やされた合計時間であり、各接続で個別に費やされた時間ではありません。ブランチ時間を比較する場合は、この値を 2 倍にしないでください。

  • 場合によっては、ノードによって時間が戻されているように見えることがあります。この場合、そのノードの入力接続によって費やされた時間が、そのノードを最初にプルする出力接続によって費やされた時間よりも大きくなります。これは、複数の出力接続によって引き起こされる錯覚です。入力接続によって費やされる時間の一部が、他方の出力接続に対してカウントされていることが原因です。すべての入力とノード自体によって費やされる合計時間は、すべての出力によって費やされる合計時間とおおよそ同じになります。

  • 場合によっては、コンパウンドで示される時間と、その出力接続で示される時間が異なることがあります。これは、さまざまなオーバーヘッドによるものです。