
概要 📖 – オペレータ情報をチャンネル化
Info CHOPは、指定したオペレータの内部情報(クック時間・解像度・サンプル数など)をチャンネルとして取り出す CHOPです。対象 OP を指定するだけで family ごとの情報チャンネルセットが自動で出力され、パフォーマンス監視・状態取得に汎用的に使えます。
主な用途 🎯
- 任意オペレータの内部情報(クック時間・解像度・サンプル数など)をチャンネルとして取り出す
- CHOP / TOP / SOP / DAT / COMP など全 family に対応した汎用情報取得
- パフォーマンス監視(cook_time / total_cooks / cook_frame の取得)
- コンポーネントの timecode(hour / minute / second / frame)取得
- 値の範囲フィルタリング(Range と Values パラメータで対象チャンネル絞り込み)
データフロー 🔄
入力: Operator パスを指定
↓
Info Type で対象チャンネルセット選択
↓
Scope / Values で絞り込み
↓
出力: 数値チャンネル群
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Info Page 📋
Operator .op 🎯
情報取得対象となる OP のパス指定:
- Operator パス: Info CHOP が情報を取得する対象ノードのパス。任意のノードをドラッグ&ドロップするか、パスを直接入力可能
Info Type .infotype 🗂️
Info Type に紐づくチャンネルセットを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| All | .all |
全てのチャンネルセットを選択して出力に追加 |
| General | .general |
OP タイプ固有のチャンネルと OP family 全体共通のチャンネルを選択 |
| Timecode | .timecode |
対象 OP に .timecode メンバーがある場合のみ出現。hour / minute / second / frame の 4 チャンネルを出力 |
Scope .iscope 🎯
出力チャンネルを絞り込むパターン:
- Scope パターン: 保持する属性(チャンネル)名のパターン。
*や[1-10]等の Pattern Matching が使用可能
Values .values 🎚️
Range で指定した範囲の内側 / 外側にあるチャンネルを選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| All | .all |
全チャンネルを選択(範囲フィルタなし) |
| Inside Range | .inside |
Range の範囲内にあるチャンネルのみ選択 |
| Outside Range | .outside |
Range の範囲外にあるチャンネルのみ選択 |
Range .range 📏
値による選択の判定範囲:
- Range(low, high): Values が
inside/outsideのときに使用する判定範囲の下限・上限
Passive .passive 💤
対象 OP の強制クック動作:
- Passive オフ: 値を取得する前に対象 OP を強制クックする(最新値を確実に取得)
- Passive オン: 強制クックを行わない。Info CHOP と対象 OP が同フレームでクックされる場合、Info が先にクックされて値が 1 フレーム遅れる副作用あり
Children Cook Time .childcooktime ⏱️
Component 子要素のクック時間集計:
- Children Cook Time オン:
children_cpu_cook_timeチャンネルを有効化。Component 配下の全子要素のクック時間合計を出力 - デフォルトオフ: デフォルトはオフ。大規模ネットワークで有効化すると全子要素のクック時間集計でパフォーマンスに影響する可能性
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: TOP の解像度をリアルタイム取得 🖼️
Movie File In TOP → Info CHOP (Operator: ../moviefilein1) → resx / resy チャンネル
- Movie File In TOP を配置して動画を読み込み
- Info CHOP の Operator パラメータに
../moviefilein1を指定 - 出力に
resx/resyチャンネルが現れ、TOP の解像度が数値として取れる - 解像度依存のレイアウト計算やシェーダ uniform への受け渡しに活用
Example 2: コンポーネントのクック時間監視 📊
Base COMP → Info CHOP (Children Cook Time オン) → Trail CHOP → グラフ描画
- 監視したい Base COMP を Operator に指定
- Children Cook Time をオンにして
children_cpu_cook_timeを出力 - 後段の Trail CHOP で時間履歴を蓄積
- 重い処理が走った瞬間をグラフで視認しパフォーマンスチューニングの根拠にする
Example 3: SOP のポイント数をチャンネル化 🔷
入力 SOP → Info CHOP (Operator: ../geo1) → num_points チャンネル
- 対象 SOP を Operator に指定
- 出力の
num_pointsチャンネルで頂点数を取得 - 頂点数の変化を Logic CHOP / Trigger CHOP で検知してジオメトリ更新イベントに連動
- プロシージャル生成の進行度モニタリングに利用
関連オペレータ 🔗
類似機能OP 🔍
- TODO
組み合わせ推奨OP 🔄
- Trail CHOP — Info CHOP 出力の時間履歴を蓄積してグラフ化
- Math CHOP — Info で取得した値を範囲変換やスケーリングして利用
- Logic CHOP — クック時間や警告数の閾値判定で異常検知
- Trigger CHOP — Info の値変化を検知してイベント発火
- Null CHOP — Info 出力を後段から参照するためのアンカー
前処理・後処理CHOP 🎯
- 前処理: Constant CHOP、Select CHOP
- 後処理: Math CHOP、Logic CHOP、Trail CHOP
Info CHOP情報 📊
Info CHOP 自身の出力チャンネル例(対象 OP の family により出力チャンネルが変化)。
CHOP固有情報 🎚️
start: CHOPインターバルの開始(サンプル単位)length: CHOPのサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: CHOPのチャンネル数time_slice: タイムスライス有効時は1、無効時は0export_sernum: Export接続の更新回数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間(ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
CHOP を対象にしたとき 🎚️
start: CHOP インターバルの開始(サンプル単位)length: CHOP のサンプル数sample_rate: フレーム毎秒のサンプルレートnum_channels: 出力チャンネル数
TOP を対象にしたとき 🖼️
resx: TOP の横解像度(ピクセル)resy: TOP の縦解像度(ピクセル)aspectx: アスペクト比(横)aspecty: アスペクト比(縦)
Component Timecode(オプション) ⏰
hour: Timecode の時minute: Timecode の分second: Timecode の秒frame: Timecode のフレーム
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 値が 1 フレーム遅れる
✅ Solution:
- Passive オンのときに発生する既知の挙動。Info CHOP が対象 OP より先にクックされて前フレームの値を返す
- 最新値が必要なら Passive をオフに戻し、Info CHOP に強制クックさせる
- Passive オンを維持したい場合は後段で 1 フレーム補正するか、対象 OP の cook 順を明示的に制御する
❌ Problem: Timecode 行がメニューに出ない
✅ Solution:
- 対象 OP に
.timecodeメンバーが無い場合、Info Type メニューから Timecode 項目自体が消える仕様 - Component に Timecode を持たせるには Timecode CHOP を内部に配置するか、対応する COMP を選ぶ
- 公式 docs の Timecode ページで対応 OP リストを確認
❌ Problem: Children Cook Time でフレームレートが落ちる
✅ Solution:
- Component 配下の全子要素のクック時間を毎フレーム集計するため大規模ネットワークで重くなる
- 本当に必要なときのみオンにし、平常時はオフに戻す
- 監視対象を限定したい場合は Performance Monitor の方が低コストで詳細プロファイルできる
❌ Problem: Range / Values で意図したフィルタにならない
✅ Solution:
- Values が
allのままだと Range は無視される。inside/outsideを選ぶ必要あり - Range の low / high が逆転していないか確認(low < high が前提)
- Scope パラメータで先にチャンネル名を絞ってから Range で値フィルタする方が意図通りになりやすい
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

