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

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

Null CHOP の中継・クック制御機能を示す図

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

概要 📖 – 中継ノードとクック制御

Null CHOPは、入力された CHOP データをそのまま出力し、ネットワークの中継点・参照点として下流のクック条件を制御する CHOPです。値変換は行わず、上流ノードの差し替えや参照の安定化、Cook Type による下流再クック条件のチューニングに使用します。

主な用途 🎯

  • ネットワークの中継ノード(参照のアンカー点)として配置
  • 下流ノードのクックトリガー条件の制御(Cook Type)
  • 上流ノードを差し替える際の参照名の安定化
  • 値・チャンネル名・レンジ変化に応じた選択的再クック
  • デバッグ・ビューア用の確認ポイント設置

データフロー 🔄

入力: 任意の CHOP データ

パススルー(変換なし)

Cook Type に基づく下流通知制御

出力: 入力と同一のチャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 → 複数の下流参照
  1. 上流の出力を Null CHOP で受ける
  2. 下流の参照(Export / Python op() / 他オペレータの input)はすべて Null CHOP を指す
  3. 上流ノードを差し替えても下流参照はそのまま維持される
  4. ネットワーク改修時に下流のリンク張り直しが不要になる

Example 2: Selective Cook Type による下流負荷削減 ⚡

高頻度更新 CHOP → Math CHOP (Round) → Null CHOP (Selective + Check Values) → 重い下流処理
  1. 毎フレーム変動する上流を Math CHOP で 0 / 1 に丸める
  2. Null CHOP の Cook Type を「Selective」に設定
  3. Check Values をオン、Check Names / Check Range をオフ
  4. 値が実際に 0 → 1 に変わった瞬間のみ下流が再クック、無駄なクックが削減される

Example 3: Always モードで毎フレーム強制クック ⏱️

Time-dependent CHOP → Null CHOP (Always) → 出力監視
  1. 上流に時間依存のソース(タイマー・カウンタ等)を配置
  2. Null CHOP の Cook Type を「Always」に設定
  3. 上流が dirty 状態でも毎フレーム強制的にクックされる
  4. デバッグ時に確実なフレーム同期が必要な場面で使用

関連オペレータ 🔗

類似機能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、無効時は0
  • export_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 の配置位置・名前を固定し、上流のみ差し替える運用にする

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました