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

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

Lag CHOP の遅延・スムージング機能を示す図

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

概要 📖 – チャンネル値の遅延・スムージング・スロープ制御

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 による目標値スナップ

出力: 滑らかに追従した値

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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) → アニメーション値
  1. ボタン押下による 0 / 1 のステップ入力を Lag CHOP に渡す
  2. Lag を [0.2, 0.5] に設定し、押下時は速く・離した時はゆっくり戻す
  3. 出力をパラメータにバインドして滑らかな UI 反応を実現
  4. 急なフラッグ変化を視覚的に柔らかく見せる

Example 2: センサー値のスパイク抑制と速度上限 📊

Serial In CHOP → Lag CHOP (Clamp Slope オン, Max Slope 制限) → 出力
  1. センサーから Serial In CHOP で値を取得
  2. Lag CHOP の Clamp Slope をオンにし Max Slope を [10, 10] に設定
  3. 急なスパイクが入っても出力は秒間 10 単位までに抑制される
  4. 後段のアクチュエーターやモーター制御に安定した信号が渡る

Example 3: Spring モードによる弾性的なオブジェクト追従 🌊

Mouse 座標 → Lag CHOP (Method=Spring, Overshoot 設定) → オブジェクト位置
  1. Mouse In CHOP の座標値を Lag CHOP に渡す
  2. Method を Spring に変更し、Overshoot を [0.3, 0.3] に設定
  3. オブジェクトが目標位置を通り過ぎてから戻る弾性挙動になる
  4. ジェル・ゴム的な動きを 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 🎯


Info CHOP情報 📊

Lag 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: 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 で離散化

参考資料 📚

その他 🔗

公式リソース 📖

関連解説 🔗

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