
概要 📖 – チャンネル値の遅延・スムージング・スロープ制御
Lag CHOPは、入力チャンネルの急峻な変化を時定数で滑らかに追従させ、上昇下降で異なる遅延・オーバーシュート・スロープ制限を 1 オペレータで完結する CHOPです。Lag Up / Lag Down で非対称の追従カーブを作り、Overshoot による弾性、Slope / Acceleration によるクランプ、Snap によるスナッピングまで細かくチューニングできます。
主な用途 🎯
- 急峻な入力変化を時定数で滑らかに追従させるスムージング
- 上昇方向と下降方向で異なる遅延量(Lag Up / Lag Down)の非対称制御
- オーバーシュート付きの弾性的なアニメーション表現
- Slope(速度)と Acceleration(加速度)のクランプによる動きの上限制限
- Snap モードによる目標値到達時のスナッピング処理
データフロー 🔄
入力: 変化のあるチャンネル値
↓
Method による遅延方式選択
↓
Lag Up / Lag Down で時定数適用
↓
Overshoot による弾性付与
↓
Slope / Acceleration クランプ
↓
Snap による目標値スナップ
↓
出力: 滑らかに追従した値
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Lag Page 📋
Method .lagmethod 🎛️
チャンネルに遅延を適用する方式を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Simple | .simple |
シンプルな指数追従(デフォルト的な時定数ベースの遅延) |
| Spring | .spring |
バネ・ダンパー的挙動の遅延(オーバーシュートを伴う弾性追従) |
Lag .lag ⏱️
チャンネルに適用する遅延時間(出力が入力変化の約 90% に到達するまでの時間)。第 1 値が上昇方向、第 2 値が下降方向。
Lag .lag ⏱️
– 第 1 値: 上昇方向への追従に要する時間(Lag Up)
– 第 2 値: 下降方向への追従に要する時間(Lag Down)
– 出力が入力変化の約 90% に到達するまでの目安時間
Lag Unit .lagunit 📏
Lag パラメータの単位を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル単位で遅延時間を指定 |
| Frames | .frames |
フレーム単位で遅延時間を指定 |
| Seconds | .seconds |
秒単位で遅延時間を指定 |
Overshoot .overshoot 🌊
目標値を超えた後に戻る弾性的な揺り戻し量。第 1 値が上昇方向、第 2 値が下降方向。
Overshoot .overshoot 🌊
– 第 1 値: 上昇方向に動いた際のオーバーシュート量
– 第 2 値: 下降方向に動いた際のオーバーシュート量
– バネ的な弾性挙動に活用
Overshoot Unit .overshootunit 📐
Overshoot パラメータの単位を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Samples | .samples |
サンプル単位で Overshoot を指定 |
| Frames | .frames |
フレーム単位で Overshoot を指定 |
| Seconds | .seconds |
秒単位で Overshoot を指定 |
Clamp Slope .clamp 🚧
出力のスロープ(速度)を Max Slope の範囲内に収めるトグル:
- Clamp Slope トグル: オン: 出力の傾き(速度)を下記 Max Slope の範囲内にクランプする。スロープは value/Units で表される
Max Slope .slope 📈
Clamp Slope オン時のスロープ上限値。第 1 値が上昇方向、第 2 値が下降方向。
Max Slope .slope 📈
– 第 1 値: 上昇時のスロープ(速度)上限
– 第 2 値: 下降時のスロープ(速度)上限
– 値の表現は value/Units(Lag Unit の単位に従う)
Clamp Acceleration .aclamp 🚦
出力の加速度を Max Acceleration の範囲内に収めるトグル:
- Clamp Acceleration トグル: オン: 出力の加速度を下記 Max Acceleration の範囲内にクランプする。加速度は value/(Units²) で表される
Max Acceleration .accel 🏎️
Clamp Acceleration オン時の加速度上限値。第 1 値が上昇方向、第 2 値が下降方向。
Max Acceleration .accel 🏎️
– 第 1 値: 上昇時の加速度上限
– 第 2 値: 下降時の加速度上限
– 値の表現は value/(Units²)(Lag Unit の単位の二乗)
Lag per Sample .lagsamples 🔬
Lag の適用粒度をサンプル単位に切り替えるトグル:
- Lag per Sample トグル: オン: 各サンプルに対して Lag を適用する(マルチサンプルチャンネルで有用)。オフ: チャンネル全体に対して Lag を適用
Snap .snap 🧲
出力が入力に十分近づいたときにスナップさせるトグル:
- Snap トグル: オン: 出力 lag 値と入力 CHOP の値の差が下記 Threshold 以内になったとき、出力値が入力値と等しい値にスナップする
Threshold .threshold 🎯
Snap モードでスナップを発生させる差分の閾値:
- Threshold 値: 出力と入力の差がこの値以下になったとき出力を入力にスナップする
Reset .reset 🔁
Lag 効果をリセット(バイパス)するトグル:
- Reset トグル: オン: Lag 効果をリセット(バイパス)し、入力値を即座に出力する
Reset Pulse .resetpulse ⚡
Lag 効果を瞬時に 1 回だけリセットするパルス:
- Reset Pulse ボタン: 押下した瞬間に Lag 効果を瞬時にリセットする
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: ボタン入力のチャタリング除去とスムーズなアニメーション 🎮
Button (0/1 値) → Lag CHOP (Lag = 0.2 / 0.5) → アニメーション値
- ボタン押下による 0 / 1 のステップ入力を Lag CHOP に渡す
- Lag を [0.2, 0.5] に設定し、押下時は速く・離した時はゆっくり戻す
- 出力をパラメータにバインドして滑らかな UI 反応を実現
- 急なフラッグ変化を視覚的に柔らかく見せる
Example 2: センサー値のスパイク抑制と速度上限 📊
Serial In CHOP → Lag CHOP (Clamp Slope オン, Max Slope 制限) → 出力
- センサーから Serial In CHOP で値を取得
- Lag CHOP の Clamp Slope をオンにし Max Slope を [10, 10] に設定
- 急なスパイクが入っても出力は秒間 10 単位までに抑制される
- 後段のアクチュエーターやモーター制御に安定した信号が渡る
Example 3: Spring モードによる弾性的なオブジェクト追従 🌊
Mouse 座標 → Lag CHOP (Method=Spring, Overshoot 設定) → オブジェクト位置
- Mouse In CHOP の座標値を Lag CHOP に渡す
- Method を Spring に変更し、Overshoot を [0.3, 0.3] に設定
- オブジェクトが目標位置を通り過ぎてから戻る弾性挙動になる
- ジェル・ゴム的な動きを 1 オペレータで実装可能
関連オペレータ 🔗
類似機能OP 🔍
- Filter CHOP — 時間方向のスムージングに特化(Boxcar・Gauss 等の Filter 種類を選択可)
- Trail CHOP — 値の時間履歴を蓄積する(Lag のように現在値を整形するのではなく履歴可視化向け)
- Speed CHOP — 値の積分・速度計算(Lag のクランプスロープ機能と相補的)
組み合わせ推奨OP 🔄
- Math CHOP — Lag 後段で値域を再マッピングする(Range 変換)
- Filter CHOP — Lag 前段でノイズ除去、Lag 後段で更にスムージングを重ねる
- Logic CHOP — Lag で滑らかにした値を閾値判定に渡す
- Trigger CHOP — Lag 出力でエンベロープを起動し時間追従的なフェード制御
- CHOP to TOP — Lag で時間整形した値を GPU シェーダ uniform に渡す
- Analyze CHOP — Lag 出力の統計値(最大・平均)を抽出
前処理・後処理CHOP 🎯
- 前処理: Audio Device In CHOP、OSC In CHOP、Serial CHOP、Mouse In CHOP、Constant CHOP
- 後処理: Math CHOP、Logic CHOP、Trigger CHOP、Limit CHOP、Null CHOP
Info CHOP情報 📊
Lag 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: Lag を強くかけたら入力に追従しなくなった
✅ Solution:
- Lag の値が大きすぎると 90% 到達までに時間がかかりすぎる、用途に合うレンジ(0.05〜2.0 秒程度が一般的)に調整
- Lag Unit が想定と異なっていないか確認(Samples / Frames / Seconds)
- 瞬時にリセットしたい場合は Reset Pulse を使用
❌ Problem: Spring モードで揺り戻しが激しすぎる
✅ Solution:
- Overshoot の値を小さく(0.1〜0.3 程度)に下げる
- Method を Simple に切り替えて指数追従に変更
- 後段に Filter CHOP を入れて更にスムージング
❌ Problem: Clamp Slope / Acceleration の効果が見えない
✅ Solution:
- Clamp Slope / Clamp Acceleration トグルがオンになっているか確認
- Max Slope / Max Acceleration の値が入力の変化速度より大きいと効果が出ない、より小さい値で試す
- 値の単位は value/Units または value/(Units²) で Lag Unit に依存することに注意
❌ Problem: 目標値に到達しても微小な揺らぎが残る
✅ Solution:
- Snap トグルをオンにし Threshold を適切に設定(例: 0.001)して目標値到達時にスナップさせる
- Method を Simple にし Overshoot をゼロにすることで弾性挙動を排除
- 後段に Math CHOP の Integer = Round で離散化
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

