
概要 📖 – 中継ノードとクック制御
Null CHOPは、入力された CHOP データをそのまま出力し、ネットワークの中継点・参照点として下流のクック条件を制御する CHOPです。値変換は行わず、上流ノードの差し替えや参照の安定化、Cook Type による下流再クック条件のチューニングに使用します。
主な用途 🎯
- ネットワークの中継ノード(参照のアンカー点)として配置
- 下流ノードのクックトリガー条件の制御(Cook Type)
- 上流ノードを差し替える際の参照名の安定化
- 値・チャンネル名・レンジ変化に応じた選択的再クック
- デバッグ・ビューア用の確認ポイント設置
データフロー 🔄
入力: 任意の CHOP データ
↓
パススルー(変換なし)
↓
Cook Type に基づく下流通知制御
↓
出力: 入力と同一のチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Null Page 📋
Cook Type .cooktype 🔄
Null CHOP の出力が変化したときに下流ノードをどう再クックするかを制御するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Automatic | .auto |
下流ノードを通常通りに再クック対象としてトリガーする |
| Always | .always |
このノードと dirty な上流ノードを毎フレームクックし、下流もデータ要求のたびに再クックする |
| Selective | .selective |
下方の Check 条件で再クックを発生させる基準を選択する。上流が時間依存・頻繁に変化するが出力がほぼ静的(例: Math CHOP で float を 0 / 1 に丸めるケース)な場合にネットワーク最適化が可能 |
Check Values .checkvalues 📊
Selective モードで値変化を再クック条件にするトグル:
- Check Values トグル: オン: Null CHOP のチャンネル値が変化したとき下流が再クックされる
Check Names .checknames 🔤
Selective モードでチャンネル名変化を再クック条件にするトグル:
- Check Names トグル: オン: Null CHOP のチャンネル名が変化したとき下流が再クックされる
Check Range .checkrange 📏
Selective モードでチャンネルレンジ変化を再クック条件にするトグル:
- Check Range トグル: オン: Null CHOP のチャンネルレンジが変化したとき下流が再クックされる。なお下流クックはノード編集中のデータ閲覧など他の理由でも発生し得る
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: 中継ノードとして参照を安定化 🔗
入力 CHOP → Null CHOP → 複数の下流参照
- 上流の出力を Null CHOP で受ける
- 下流の参照(Export / Python op() / 他オペレータの input)はすべて Null CHOP を指す
- 上流ノードを差し替えても下流参照はそのまま維持される
- ネットワーク改修時に下流のリンク張り直しが不要になる
Example 2: Selective Cook Type による下流負荷削減 ⚡
高頻度更新 CHOP → Math CHOP (Round) → Null CHOP (Selective + Check Values) → 重い下流処理
- 毎フレーム変動する上流を Math CHOP で 0 / 1 に丸める
- Null CHOP の Cook Type を「Selective」に設定
- Check Values をオン、Check Names / Check Range をオフ
- 値が実際に 0 → 1 に変わった瞬間のみ下流が再クック、無駄なクックが削減される
Example 3: Always モードで毎フレーム強制クック ⏱️
Time-dependent CHOP → Null CHOP (Always) → 出力監視
- 上流に時間依存のソース(タイマー・カウンタ等)を配置
- Null CHOP の Cook Type を「Always」に設定
- 上流が dirty 状態でも毎フレーム強制的にクックされる
- デバッグ時に確実なフレーム同期が必要な場面で使用
関連オペレータ 🔗
類似機能OP 🔍
- Select CHOP — 別オペレータの出力を参照するパススルー、Null とは異なりリモート参照に特化
- Switch CHOP — 複数入力を切り替えるパススルー、Null は単一入力の中継のみ
組み合わせ推奨OP 🔄
- Math CHOP — Math で値処理した後段に Null を置き、Selective モードで下流負荷を削減
- Filter CHOP — Filter のスムージング後の参照アンカーとして
- Trigger CHOP — Trigger 出力を Null で受けて下流の再クックを Selective に最適化
- Logic CHOP — Logic 結果(0 / 1)を Null + Check Values で値変化時のみ下流伝播
- Constant CHOP — Constant 値の中継アンカーとして配置、後で差し替え可能
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Null 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: Cook Type を Selective にしても下流が想定外に再クックされる
✅ Solution:
- Check Values / Check Names / Check Range のいずれかが意図せずオンになっていないか確認
- 下流ノードの編集中・ビューア表示・パラメータ参照などはデータ要求扱いとなりクックが発生する
- 上流ノードが time-dependent な場合、上流自体のクックは依然として発生する点に注意
❌ Problem: Always モードで CPU 負荷が増大する
✅ Solution:
- Always は毎フレーム強制クックのため、デバッグ完了後は「Automatic」に戻す
- 本当に時間同期が必要な箇所のみ Always、それ以外は Automatic / Selective を使い分け
- 前段に Math CHOP や Logic CHOP で値を離散化し Selective で済むよう設計を見直す
❌ Problem: 上流ノードを差し替えても下流参照が壊れる
✅ Solution:
- 下流参照は Null CHOP のパス(例:
op('null1'))を指しているか確認 - Null CHOP 自体の名前を変更すると下流参照は壊れるため、リネームする場合は下流も追従させる
- 参照を安定化する目的では Null の配置位置・名前を固定し、上流のみ差し替える運用にする
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

