Perform DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Perform DAT のフレーム処理時間ロギング機能を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – フレーム処理時間を記録

Perform DATは、1 フレームの処理時間を工程ごとに分解して表形式でログ出力し、パフォーマンスのボトルネックを特定する DATです。Active がオンの間は連続してログを記録し、Trigger Mode でしきい値超過時やフレーム落ち時だけを記録するよう絞り込めます。クック・描画・スクリプトなど工程別の所要時間がミリ秒単位で並ぶため、重い処理の特定に役立ちます。

主な用途 🎯

  • 1 フレームの処理時間の内訳(クック・描画・スクリプト等)を表形式でログ化し、どの工程が重いかを特定する
  • フレーム落ちが発生した瞬間のタイミング情報だけを記録し、原因となった処理を後から追跡する
  • 指定したしきい値(ミリ秒)を超えた重いフレームのみログを出力し、パフォーマンス低下の発生条件を切り分ける
  • Render TOPCustom Panel 等の工程別の所要時間を計測し、最適化の優先順位を決める
  • ログ結果を Table DATFile Out DAT に流して、長時間の動作検証データとして蓄積・解析する

データフロー 🔄

入力: フレームごとの処理タイミング

Trigger Mode でログ更新の条件を判定 (しきい値超過 / フレーム落ち)

各 Log トグルで記録対象の工程 (クック・描画・スクリプト等) を選択

Active がオンの間は連続してログを記録

出力: 工程別の所要時間を並べたテーブル

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Perform Page 📋

ロギング制御 🎛️

Active .active
Active (有効) — ロギングのオン/オフを切り替えます。
オンの間は 連続してフレームの処理時間をログに記録し続けます。

Active Pulse .activepulse 📸
Active Pulse (単発取得ボタン) — ボタンを押すと、1 フレーム分のタイミングだけをスナップショットとして取得します。
常時記録ではなく、特定の瞬間の内訳だけを見たいときに使います。

Clear .clear 🧹
Clear (クリア) — DAT に溜まったログの内容を消去します。
計測をやり直す前にテーブルを空にする用途で使います。

Callbacks DAT .callbacks 🔗
Callbacks DAT (コールバック DAT) — ログ更新時に呼ばれるコールバックを記述した DAT へのパスを指定します。
新規作成した Perform DAT には、ドッキングされた Callbacks DAT が最初から付属します。

Trigger Mode .triggermode

Trigger Mode (トリガー条件) — ログ更新をどのタイミングで行うかを 2 つの方式から選びます。

項目 内部名 説明
When Frame Length Exceeds Threshold .threshold 下の Trigger Threshold (しきい値) で設定した最大フレーム時間を超えたときにログを更新する
When a Frame is Dropped .droppedframe フレーム落ちが発生した瞬間にログを更新する

Trigger Threshold .triggerthreshold ⏱️

ログ出力のきっかけとなる最大フレーム時間 (ミリ秒):

  • Trigger Threshold (しきい値): ログ出力のきっかけとなるフレーム時間をミリ秒で指定します。例えば 1 フレームが 33 ミリ秒を超えてクックされたときの様子を見たい場合は 33 を設定します

ログ対象の工程 📊

記録対象の工程を選ぶ個別トグル (オンにした工程だけがログ列として出力):

  • Cook Time (logcook): オペレータのクック (再計算) にかかった時間を記録
  • Export Time (logexport): CHOP チャンネルのエクスポートに費やした時間を記録
  • Viewport Draw Time (logviewport): 3D ジオメトリと SOP ビューアの描画にかかった時間を記録
  • Movie Time (logmovie): ムービーファイルからの映像・音声の読み込みにかかった時間を記録
  • Draw Channels Time (logdrawchannels): CHOP ビューアでのチャンネル描画にかかった時間を記録
  • Object View Time (logobjectview): 3D ビューアでのオブジェクト描画にかかった時間を記録
  • Custom Panel Time (logcustompanel): Panel Component で組んだカスタムパネルの処理にかかった時間を記録
  • MIDI Time (logmidi): MIDI 処理に費やした時間を記録
  • Graphics Time (loggraphics): グラフィックカードの待機やドライバ呼び出し、TOP から CHOP への変換など各種グラフィックシステム呼び出しの時間を記録
  • Frame Length (logframelength): 1 フレーム全体の所要時間をミリ秒で記録
  • Misc (logmisc): 他の分類に当てはまらない雑多な処理時間を記録
  • Script (logscript): スクリプトの実行に費やした時間を記録
  • Render (logrender): Render TOP や Render Pass TOP が費やした時間を記録

Common Page 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: 重いフレームの工程内訳を特定 🔍

Perform DAT (Active=On, logcook/logrender/loggraphics=On) → Table DAT

プロジェクトのフレームレートが落ちる原因を切り分けるため、Perform DAT を常時記録にしてクック・描画・グラフィックの時間を並べ、どの工程が突出して重いかを後段の Table DAT で確認する基本フロー。重い工程が分かれば、その工程に関わるオペレータを優先的に最適化できる。

  1. Perform DAT を配置し、Active をオンにして連続記録を開始
  2. Cook Time / Render / Graphics Time など調べたい工程のトグルをオンにする
  3. 後段に Table DAT を置いて工程別の所要時間を一覧表示
  4. 突出して大きい値の列を見つけ、その工程に関わるオペレータを最適化対象として絞り込む

Example 2: しきい値超過フレームだけ記録 ⏱️

Perform DAT (Trigger Mode=threshold, triggerthreshold=33) → Table DAT

毎フレーム記録するとログが膨大になるため、Trigger Mode をしきい値超過に設定し、1 フレームが 33 ミリ秒 (約 30 FPS の基準) を超えたときだけログを更新する設定。重いフレームが発生した条件だけを抽出でき、まれにしか起こらないカクつきの原因調査に向く。

  1. Perform DAT の Trigger ModeWhen Frame Length Exceeds Threshold に設定
  2. Trigger Threshold に基準となるフレーム時間 (例: 33 ミリ秒) を入力
  3. Frame Length や疑わしい工程のログトグルをオンにする
  4. 重いフレームが発生したときだけログが更新されるので、後段の Table DAT でその瞬間の内訳を確認

Example 3: フレーム落ち発生時のログ取得 📉

Perform DAT (Trigger Mode=droppedframe) → File Out DAT

本番運用中に時折発生するフレーム落ちの原因を後から解析するため、Trigger Mode をフレーム落ち発生時に設定し、落ちた瞬間のタイミング情報を File Out DAT でファイルに蓄積する用途。長時間の動作検証で再現性の低い不具合を記録に残せる。

  1. Perform DAT の Trigger ModeWhen a Frame is Dropped に設定
  2. 記録したい工程のログトグル (Cook Time / Render 等) をオンにする
  3. 後段に File Out DAT を置き、出力ファイル名と拡張子を設定
  4. 長時間動作させ、フレーム落ちが起きたタイミングのログだけをファイルに蓄積して後で解析

Example 4: 瞬間の内訳を単発取得 📸

Perform DAT (Active Pulse) → Examine DAT

常時記録は不要で、特定の操作をした瞬間の処理内訳だけを 1 フレーム分見たいときに、Active Pulse ボタンで単発取得するパターン。取得したログを Examine DAT に渡して、各工程の値をその場で確認する。軽量に状況を把握したい場面に向く。

  1. Perform DAT を配置し、記録したい工程のログトグルをオンにする
  2. Active はオフのまま、調べたい瞬間に Active Pulse ボタンを押す
  3. 1 フレーム分のタイミングがスナップショットとして取得される
  4. Examine DAT 等で取得したログの各工程の値を確認

関連オペレータ 🔗

類似機能OP 🔍

  • Perform CHOP — 同じフレーム処理時間を CHOP チャンネルとして出力する版。数値として後段の解析に流したいときに使う
  • Info DAT — オペレータのメタ情報をテーブル化する DAT。単体ノードの状態確認に用いる

組み合わせ推奨OP 🔄

  • Table DAT — ログ結果を表として保持・参照する代表的な後段
  • File Out DAT — 長時間検証のログをファイルに書き出して蓄積
  • Examine DAT — 取得した工程別の値をその場で確認する
  • Select DAT — ログテーブルから特定の工程の列だけを抽出
  • Sort DAT — 所要時間の大きい順に並べ替えてボトルネックを上位に集める
  • Perform CHOP — 同種のタイミングを数値チャンネルとして取り、CHOP 側の処理に流す

前処理・後処理DAT 🎯


Info CHOP情報 📊

Perform DAT は Info CHOP による詳細情報取得に対応しています。num_rows / num_cols で出力ログテーブルのサイズを、total_cooks / cook_time / cpu_time で DAT 自身の実行統計を参照でき、ロギング負荷の監視や、ログ更新タイミングの判定に利用できます。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: ログテーブルが更新されない
✅ Solution:

  • Active がオンになっているか確認 (オフだと連続記録されない)
  • Trigger Mode がしきい値超過になっている場合、Trigger Threshold を超えるフレームが発生していないと更新されないため、しきい値を一時的に下げて挙動を確認
  • 単発で確認したいだけなら Active Pulse ボタンで 1 フレーム分のスナップショットを取得

❌ Problem: ログの列が少なく必要な工程が出ない
✅ Solution:

  • 記録したい工程のログトグル (Cook Time / Render / Graphics Time 等) がオフになっていないか確認
  • オンにした工程だけが列として出力される仕様のため、調べたい工程をすべてオンにする
  • 全体の所要時間を見たい場合は Frame Length もオンにして基準値を併記

❌ Problem: ログが膨大になりすぎて扱えない
✅ Solution:

  • Trigger Mode をしきい値超過やフレーム落ち発生時に切り替え、重要なフレームだけを記録
  • Clear ボタンで溜まったログを一度クリアしてから計測をやり直す
  • 長時間の蓄積が必要な場合は後段に File Out DAT を置いてファイルに書き出し、メモリ上のテーブルを肥大化させない

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました