
概要 📖 – フレーム処理時間を記録
Perform DATは、1 フレームの処理時間を工程ごとに分解して表形式でログ出力し、パフォーマンスのボトルネックを特定する DATです。Active がオンの間は連続してログを記録し、Trigger Mode でしきい値超過時やフレーム落ち時だけを記録するよう絞り込めます。クック・描画・スクリプトなど工程別の所要時間がミリ秒単位で並ぶため、重い処理の特定に役立ちます。
主な用途 🎯
- 1 フレームの処理時間の内訳(クック・描画・スクリプト等)を表形式でログ化し、どの工程が重いかを特定する
- フレーム落ちが発生した瞬間のタイミング情報だけを記録し、原因となった処理を後から追跡する
- 指定したしきい値(ミリ秒)を超えた重いフレームのみログを出力し、パフォーマンス低下の発生条件を切り分ける
- Render TOP や Custom Panel 等の工程別の所要時間を計測し、最適化の優先順位を決める
- ログ結果を Table DAT や File Out DAT に流して、長時間の動作検証データとして蓄積・解析する
データフロー 🔄
入力: フレームごとの処理タイミング
↓
Trigger Mode でログ更新の条件を判定 (しきい値超過 / フレーム落ち)
↓
各 Log トグルで記録対象の工程 (クック・描画・スクリプト等) を選択
↓
Active がオンの間は連続してログを記録
↓
出力: 工程別の所要時間を並べたテーブル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
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 で確認する基本フロー。重い工程が分かれば、その工程に関わるオペレータを優先的に最適化できる。
- Perform DAT を配置し、
Activeをオンにして連続記録を開始 Cook Time/Render/Graphics Timeなど調べたい工程のトグルをオンにする- 後段に Table DAT を置いて工程別の所要時間を一覧表示
- 突出して大きい値の列を見つけ、その工程に関わるオペレータを最適化対象として絞り込む
Example 2: しきい値超過フレームだけ記録 ⏱️
Perform DAT (Trigger Mode=threshold, triggerthreshold=33) → Table DAT
毎フレーム記録するとログが膨大になるため、Trigger Mode をしきい値超過に設定し、1 フレームが 33 ミリ秒 (約 30 FPS の基準) を超えたときだけログを更新する設定。重いフレームが発生した条件だけを抽出でき、まれにしか起こらないカクつきの原因調査に向く。
- Perform DAT の
Trigger ModeをWhen Frame Length Exceeds Thresholdに設定 Trigger Thresholdに基準となるフレーム時間 (例:33ミリ秒) を入力Frame Lengthや疑わしい工程のログトグルをオンにする- 重いフレームが発生したときだけログが更新されるので、後段の Table DAT でその瞬間の内訳を確認
Example 3: フレーム落ち発生時のログ取得 📉
Perform DAT (Trigger Mode=droppedframe) → File Out DAT
本番運用中に時折発生するフレーム落ちの原因を後から解析するため、Trigger Mode をフレーム落ち発生時に設定し、落ちた瞬間のタイミング情報を File Out DAT でファイルに蓄積する用途。長時間の動作検証で再現性の低い不具合を記録に残せる。
- Perform DAT の
Trigger ModeをWhen a Frame is Droppedに設定 - 記録したい工程のログトグル (
Cook Time/Render等) をオンにする - 後段に File Out DAT を置き、出力ファイル名と拡張子を設定
- 長時間動作させ、フレーム落ちが起きたタイミングのログだけをファイルに蓄積して後で解析
Example 4: 瞬間の内訳を単発取得 📸
Perform DAT (Active Pulse) → Examine DAT
常時記録は不要で、特定の操作をした瞬間の処理内訳だけを 1 フレーム分見たいときに、Active Pulse ボタンで単発取得するパターン。取得したログを Examine DAT に渡して、各工程の値をその場で確認する。軽量に状況を把握したい場面に向く。
- Perform DAT を配置し、記録したい工程のログトグルをオンにする
Activeはオフのまま、調べたい瞬間にActive Pulseボタンを押す- 1 フレーム分のタイミングがスナップショットとして取得される
- 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 を置いてファイルに書き出し、メモリ上のテーブルを肥大化させない
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Perform DAT
- Perform CHOP(数値チャンネル版)
- Performance Monitor Dialog(性能解析の関連機能)
- Optimize(最適化ガイド)

