
概要 📖 – チャンネル区間外の延長挙動
Extend CHOPは、入力チャンネルのサンプル区間外(前後)に対して、保持・傾き継続・繰り返し・反転・既定値などの延長挙動を指定する CHOPです。Left Behavior と Right Behavior の 2 軸で区間前後の挙動を独立に設定でき、アニメーションのループ化や境界外参照時のクランプを 1 オペレータで完結します。
主な用途 🎯
- チャンネル区間の前後でサンプリングされた際の挙動指定(Hold / Slope / Cycle / Mirror / Default Value)
- アニメーションカーブのループ化(Cycle / Mirror による反復再生)
- 区間外を一定値にクランプ(Hold / Default Value による境界処理)
- 傾き継続による外挿補間(Slope で end の傾きをそのまま延長)
- 後続 OP がチャンネル範囲外を読みに行ったときの値の決定(CHOP Reference / Lookup CHOP の前段)
データフロー 🔄
入力: 有限区間のチャンネルデータ
↓
Left Behavior(区間開始前の挙動)
↓
Right Behavior(区間終了後の挙動)
↓
Default Value(必要時の固定値)
↓
出力: 区間外でも参照可能な拡張済みチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Extend Page 📋
Left Behavior .left 📥
チャンネル区間が始まる「前」の領域を参照されたときに、どのような値を返すかを決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| No Change | .asis |
チャンネルをそのまま(拡張せず)保つ |
| Hold | .hold |
区間開始時点の値をそのまま保持して延長 |
| Slope | .slope |
区間開始前の傾きを継続して外挿 |
| Cycle | .cycle |
チャンネルを繰り返しループさせる |
| Mirror | .mirror |
1 サイクルごとに反転させながら繰り返す |
| Default Value | .default |
下記 Default Value で指定した固定値を使用 |
Right Behavior .right 📤
チャンネル区間が終わった「後」の領域を参照されたときに、どのような値を返すかを決めるメニューパラメータ(選択肢は Left Behavior と同一)
| 項目 | 内部名 | 説明 |
|---|---|---|
| No Change | .asis |
チャンネルをそのまま(拡張せず)保つ |
| Hold | .hold |
区間終了時点の値をそのまま保持して延長 |
| Slope | .slope |
区間終了後も同じ傾きを継続して外挿 |
| Cycle | .cycle |
チャンネルを繰り返しループさせる |
| Mirror | .mirror |
1 サイクルごとに反転させながら繰り返す |
| Default Value | .default |
下記 Default Value で指定した固定値を使用 |
Default Value .defval 🎯
Default Value モードで区間外に返される定数値:
- Default Value: Left / Right Behavior が
defaultのときに区間外で返される定数値
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: アニメーションカーブのループ再生 🔄
Animation COMP → Extend CHOP (Left/Right = Cycle) → Geometry COMP
- Animation COMP で 1 サイクル分のキーフレームを作成
- Extend CHOP の Left Behavior と Right Behavior を「Cycle」に設定
- 出力をジオメトリの transform パラメータへ Export
- 区間外でも自動的に同じカーブが繰り返され、無限ループのアニメーションになる
Example 2: 区間外を境界値でクランプして安全参照 🛡️
Pattern CHOP → Extend CHOP (Left/Right = Hold) → Lookup CHOP
- Pattern CHOP で有限区間のカーブテーブルを生成
- Extend CHOP の Left/Right Behavior を「Hold」に設定
- 区間外参照時は始端値・終端値がそのまま保持される
- 後段の Lookup CHOP が範囲外を引いても NaN や暴れた外挿値が出ない
Example 3: Mirror で往復アニメーション 🪞
Pattern CHOP (0→1 ramp) → Extend CHOP (Right = Mirror) → Geometry transform
- Pattern CHOP で 0 から 1 への片道 ramp を作成
- Extend CHOP の Right Behavior を「Mirror」に設定
- 区間を超えると 1→0、再度 0→1 と反転を繰り返す
- 1 区間ぶんのカーブだけ作れば往復モーションが得られる
関連オペレータ 🔗
類似機能OP 🔍
- Hold CHOP — トリガー時点の値を保持する用途に特化(Extend CHOP の Hold モードを動的トリガで実現)
- Stretch CHOP — 区間長そのものを伸縮(Extend は区間外の挙動、Stretch は区間内の伸縮)
- Trim CHOP — 区間を切り詰める(Extend と対をなす区間操作 OP)
組み合わせ推奨OP 🔄
- Pattern CHOP — 有限区間のカーブを生成し Extend で区間外挙動を付与
- Lookup CHOP — Extend で安全化したテーブルを Lookup で参照
- Filter CHOP — Cycle / Mirror で生成した無限信号を後段で平滑化
- Math CHOP — 延長後のチャンネルに対する値域変換やオフセット
- Speed CHOP — Extend のサイクル再生速度を後段で動的に変更
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Extend 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: Cycle 設定にしてもループせず一定値で止まる
✅ Solution:
- 下流 OP が Time Slice モードで現在フレームのみ参照している場合、視覚的にループが見えない可能性がある
- Trim CHOP や Lookup CHOP で明示的に区間外をサンプリングしていることを確認
- 前段のチャンネル区間長が 0 または 1 サンプルだとサイクルが成立しないため、Pattern CHOP 等で十分なサンプル数を確保する
❌ Problem: Slope 外挿で値が想定外に大きく / 小さくなる
✅ Solution:
- Slope は端点付近の傾きをそのまま延長するため、急峻なカーブ末尾だと指数的に発散する
- 発散を避ける場合は Hold か Default Value に切り替えるか、前段に Filter CHOP を入れて端点を平滑化する
- 後段の Math CHOP や Limit CHOP で値域をクランプする
❌ Problem: Default Value にしたのに固定値が出力されない
✅ Solution:
- Left Behavior / Right Behavior が「Default Value」に設定されているか確認(Hold や Cycle のままだと Default Value パラメータは無視される)
- 区間内のサンプリングでは Default Value は使われない。区間外を読みに行くサンプル位置でないと適用されない
- Default Value パラメータの数値が想定値(0 のまま等)になっていないかを再確認
❌ Problem: Mirror で繋ぎ目に不連続な折れ線が出る
✅ Solution:
- Mirror は端点で値を反転して繋ぐ仕様のため、端点の傾きが急だと折り返しがガクッと見える
- 繋ぎ目を滑らかにしたい場合は前段に Filter CHOP を入れて端点近傍を平滑化する
- Cycle と Mirror では繋ぎ目挙動が異なるため、用途に応じて切り替える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

