
概要 📖 – プロジェクトのパフォーマンス監視と診断
Perform CHOPは、TouchDesigner プロジェクトのパフォーマンス・リソース・運用状態を 27 チャンネルで取得する CHOPです。FPS やフレーム時間といった描画性能から、GPU/CPU メモリ・OP 数・バッテリー状態まで一元的に取得でき、ライブ運用時の診断やボトルネック検出に欠かせません。
主な用途 🎯
- FPS・フレーム時間・ドロップフレーム数のリアルタイム監視
- GPU メモリ使用量・CPU メモリ使用量のリソース監視
- アクティブ OP 数・総 OP 数のプロジェクト規模把握
- Perform Mode / Perform Window フォーカス状態の運用状態取得
- バッテリー残量・AC 接続状況のノート PC ライブ運用監視
データフロー 🔄
TouchDesigner ランタイム内部状態
↓
Perform CHOP(27 チャンネル取得)
↓
Trail CHOP / Logic CHOP 等で可視化・閾値判定
↓
出力: 性能・診断データ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Perform Page 📊
描画性能チャンネル .perfchannels 🎞️
フレームレートやフレーム時間など描画性能に関するチャンネル:
- Frames per Second (fps): 直近 1 秒間に描画されたフレーム数
- Frame Time (msec): 各フレームのクック所要時間(ミリ秒)
- Cook (cook): フレームがクックされたとき 1、スキップされたとき 0。Trail CHOP で可視化するとドロップ箇所が把握しやすい
- Dropped Frames (droppedframes): 直前のフレームから現在フレームまでにドロップしたフレーム数
- Movie Read Ahead Misses (mvreadahead): Movie File In の Read Ahead が指定フレーム数を維持できなかった回数
- Time Slice Step (timeslicestep): 現在のクックでステップしたフレーム数。Time Slice の長さ(フレーム単位)
- Time Slice Milliseconds (timeslicemsec): 現在の Time Slice の長さ(ミリ秒)
- Cookrate (cookrate): プロジェクトの目標クックレート(root.time.rate、通常 60)
- Cook State (cookstate): 実際にクックされたフレームを追跡。Trail CHOP に通すと clearly な履歴が見える
- Cook Realtime (cookrealtime): リアルタイムフラグの状態を監視(リアルタイム駆動か否か)
メモリ・OP 統計チャンネル .memopstats 💾
GPU/CPU メモリ使用量と OP 統計のチャンネル:
- GPU Mem Used (MB) (gpumemused): 使用中の GPU メモリ量(メガバイト)
- Total GPU Mem (MB) (totalgpumem): システムで利用可能な GPU メモリ総量(メガバイト)
- CPU Mem Used (MB) (cpumemused): 使用中の CPU メモリ量(メガバイト)
- Total Active OPs (activeops): 現在アクティブにクックしている OP の数
- Total Deactivated OP Calls (deactivatedops): Cooking Flag がオフのコンポーネントに対するクック呼び出しの回数
- Total OPs (totalops): .toe ファイル内の総 OP 数
Perform Mode / フォーカスチャンネル .performstate 🪟
Perform Mode と Perform Window フォーカスの状態チャンネル:
- Perform Mode (performmode): Perform Mode の現在状態を監視
- Perform Window Focus (performfocus): Perform Window が現在フォーカスを持っているかどうか
GPU 温度・バッテリーチャンネル .hwstate 🔋
ハードウェア状態(GPU 温度・AC・バッテリー)のチャンネル:
- GPU Temperature (Slow) (gputemp): GPU 温度を監視。NVIDIA GPU でのみ動作
- AC Line Status (aclinestatus): ノート PC の AC 充電器が接続中なら 1、未接続なら 0
- Battery Charging (batterycharging): バッテリーが充電中なら 1、それ以外は 0
- Battery Life (batterylife): バッテリー残量(1 が満充電、0 が空)
- Battery Time (batterytime): 残り使用可能時間の推定。AC 未接続かつ充電中でないときのみ有効
Python 式統計チャンネル .pystats 🐍
Python 式の最適化・キャッシュ状況のチャンネル:
- Active Expressions (activeexpressions): プロジェクト内のアクティブな Python 式の数
- Optimized Expressions (optimizedexpression): 最適化された Python 式の数
- Expressions Using Cache (cachedexpressions): キャッシュ機構を利用している Python 式の数
Common Page 🔧
Time Slice .timeslice ⏱️
Time Slice モードの強制設定:
- オン: チャンネルを「タイムスライス」モードに強制
- タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間
Scope .scope 🎯
影響を受けるチャンネルの絞り込み:
- Scope 文字列: 影響を受けるチャンネルを指定する文字列
- パターンマッチング:
*や[1-10]等のパターンが使用可能
Sample Rate Match .srselect ⚡
複数の入力 CHOP のサンプルレートが異なる場合の処理方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Resample At First Input’s Rate | .first |
最初の入力のレートで他をリサンプル |
| Resample At Maximum Rate | .max |
最高サンプルレートでリサンプル |
| Resample At Minimum Rate | .min |
最低サンプルレートでリサンプル |
| Error If Rates Differ | .err |
レート不一致でエラー |
Export Method .exportmethod 📤
CHOP チャンネルをパラメータに接続する方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| DAT Table by Index | .datindex |
DAT テーブルのインデックスでチャンネルとパラメータを対応付け |
| DAT Table by Name | .datname |
DAT テーブルの行名でチャンネルとパラメータを対応付け |
| Channel Name is Path:Parameter | .autoname |
チャンネル名を `path:parameter` 形式で記述し直接対応付け |
Export Root .autoexportroot 🌳
Channel Name is Path:Parameter モード時のパス基点:
- Export Root パス:
autonameモードでチャンネル名のパス部分を相対化する基点 OP のパス
Export Table .exporttable 📋
DAT Table エクスポート方式での参照 DAT:
- Export Table DAT:
datindex/datnameモード時に参照する DAT のパス
Rename from .commonrenamefrom 🔤
リネーム対象チャンネルのパターン:
- Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列
Rename to .commonrenameto 🔁
リネーム後の置換パターン:
- Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)
実践アイデア 💡
Example 1: FPS とドロップフレームのリアルタイム監視 📈
Perform CHOP (fps, droppedframes) → Select CHOP → Trail CHOP → CHOP to TOP
ライブパフォーマンス中に FPS とドロップフレームの履歴を視覚的に把握するためのモニタリングセットアップです。
- Perform CHOP を配置し、Scope を
fps droppedframesに設定して必要なチャンネルだけを取得 - Select CHOP で fps チャンネルを取り出し、Trail CHOP に通して直近 N 秒の履歴を保持
- CHOP to TOP でグラフ化し、Perform Window のオーバーレイに描画
- ドロップフレーム検出時に Logic CHOP で閾値判定し警告色を切替
Example 2: GPU メモリ使用率による品質自動調整 🎚️
Perform CHOP (gpumemused, totalgpumem) → Math CHOP (除算) → Logic CHOP → 品質パラメータ Export
GPU メモリ使用率が一定を超えたらレンダリング解像度や Particle 数を自動的に下げ、フレーム落ちを未然に防ぐ自己調整パターンです。
- Perform CHOP で
gpumemusedとtotalgpumemを取得 - Math CHOP で gpumemused / totalgpumem の比率を計算
- Logic CHOP で 0.8 を超えたら 1 を出力
- 出力を Render TOP の解像度や Particle GPU の数に Export して動的に品質を抑制
Example 3: バッテリー残量を Perform Window に表示 🔌
Perform CHOP (batterylife, aclinestatus) → Math CHOP (×100) → Text TOP
ノート PC でのライブ運用時、バッテリー残量と AC 接続状態を Perform Window 上に常時表示し、ステージ上での電源トラブルを未然に検知します。
- Perform CHOP で
batterylifeとaclinestatusを取得 - Math CHOP で batterylife を 100 倍してパーセント値に変換
- Text TOP の text パラメータに Export して残量 % を描画
- aclinestatus が 0 になったらテキスト色を赤に切替
関連オペレータ 🔗
類似機能OP 🔍
- Info CHOP — 個別 OP の詳細情報を取得する CHOP(Perform はプロジェクト全体のランタイム情報)
組み合わせ推奨OP 🔄
- Trail CHOP — FPS・ドロップフレームの時間履歴を可視化
- Logic CHOP — 閾値判定でアラート発火やフォールバック切替
- Math CHOP — 比率計算(gpumemused / totalgpumem 等)や単位変換
- CHOP to TOP — 性能データをグラフ TOP に変換して Perform Window 表示
- Select CHOP — 27 チャンネルから必要なチャンネルだけを抽出
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Perform CHOPは Info CHOP による詳細情報取得に対応しています。
CHOP固有情報 🎚️
start: CHOPインターバルの開始(サンプル単位)length: CHOPのサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: CHOPのチャンネル数time_slice: タイムスライス有効時は1、無効時は0export_sernum: Export接続の更新回数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間(ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: GPU Temperature が常に 0 を返す
✅ Solution:
- GPU Temperature チャンネルは NVIDIA GPU でのみ動作します。AMD/Intel GPU では値が取得できません
- NVIDIA GPU でも最新ドライバが必要なケースがあるため、ドライバを最新版に更新する
- Scope パラメータで
gputempを除外してチャンネル数を減らすか、不要なら無視する
❌ Problem: Battery 関連チャンネルがデスクトップ機で意味のない値を返す
✅ Solution:
- Battery Life / Battery Time はノート PC のバッテリー API 前提のため、デスクトップ機では未定義
- AC Line Status は常時 1 を返すのが正常
- デスクトップ機専用プロジェクトでは Scope パラメータで battery 系チャンネルを除外して可読性を上げる
❌ Problem: fps が常に Cookrate 通りで頭打ちになる
✅ Solution:
- fps は描画した直近 1 秒のフレーム数なので、Cookrate(root.time.rate)が上限
- 上限を上げたい場合は
root.time.rateを 120 等に変更(Time COMP 経由) - リアルタイムフラグがオンの場合はクックが間に合わなくても fps はあくまで描画達成数を示す
❌ Problem: Cook State / Cook チャンネルが常に 1 で変化しない
✅ Solution:
- ビューア表示は現在フレームのみで過去のミスは見えない仕様。Trail CHOP に通して履歴を保持してから確認
- Dropped Frames を併用するとドロップ箇所が数値で把握できる
- Cookrate に対し Frame Time (msec) が 1000/Cookrate を超えたフレームでドロップが起きやすい
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

