
概要 📖 – 値域制限と量子化
Limit CHOPは、チャンネル値を Min〜Max の範囲にクランプ・ループ・ジグザグ折返しで制限し、値とインデックスの量子化まで 1 オペレータで完結する CHOPです。Type で値域外の処理方法 (Off / Clamp / Loop / Zigzag) を選び、絶対値化・正規化・値量子化・インデックス量子化を組み合わせて、暴走防止からビット深度シミュレーションまで 1 オペレータで実装できます。
主な用途 🎯
- チャンネル値の上下限クランプ(Min / Max による値域制限)
- ループ・ジグザグによる範囲外値の折返し処理(周期信号化・往復化)
- 値の絶対値化と正規化(Positive Only / Normalize による前処理)
- 値ベースの量子化(Ceiling / Floor / Round による離散ステップ化)
- インデックスベースの量子化(時間軸方向のサンプル間引き・グリッドスナップ)
データフロー 🔄
入力: チャンネルデータ
↓
Type による値域処理(Clamp / Loop / Zigzag)
↓
Positive Only / Normalize / Fix Underflows
↓
Quantize Value(値の離散化)
↓
Quantize Index(時間軸の離散化)
↓
出力: 制限・量子化されたチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Limit Page 📋
Type .type 🎛️
Min〜Max の範囲を超えた値をどう扱うかを選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
値域制限を行わない(パススルー) |
| Clamp | .clamp |
Min より小さい値は Min に、Max より大きい値は Max に丸める |
| Loop | .loop |
範囲を超えた値を反対端から再開させ周期的に折返す |
| Zigzag | .zigzag |
範囲を超えた値を境界で反射させ往復運動のように折返す |
Min / Max とフラグ 📏
Minimum .min ⬇️
– 出力チャンネルが取りうる最小値
– Type が Off 以外のときに有効化されるしきい値
Maximum .max ⬆️
– 出力チャンネルが取りうる最大値
– Type が Off 以外のときに有効化されるしきい値
Positive Only .positive ➕
– チャンネル値の絶対値を取り、負の値を全て正に変換
– 振幅・距離など符号を持たない量を扱うときに使用
Normalize .norm 📐
– チャンネルをスケール・オフセットして -1〜+1 の範囲に収める
– Time Slice オン時は機能しない点に注意
Fix Underflows .underflow 🔬
– 極めて小さい値(denormal float 等)を 0 に丸める
– 数値計算の不安定性を抑え、CPU 上の denormal 演算ペナルティを回避
Quantize Page 🔢
Quantize Value .quantvalue 🎚️
チャンネルの値そのものを量子化(離散ステップ化)する方法を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
値の量子化を行わない |
| Ceiling | .ceiling |
ステップグリッド上で最も近い上側の量子化値に切り上げ |
| Floor | .floor |
ステップグリッド上で最も近い下側の量子化値に切り下げ |
| Round | .round |
ステップグリッド上で最も近い量子化値に四捨五入 |
値の量子化パラメータ 📊
Value Step .vstep 📐
– 量子化されたステップ間の刻み幅
– 例: vstep=0.1 で 0.0 / 0.1 / 0.2 … のグリッドに揃える
Value Offset .voffset 📌
– 量子化グリッドのオフセット(デフォルトは 0)
– グリッドを 0 以外の起点から始めたいときに指定
Quantize Index .quantindex 📍
サンプルインデックス(時間軸方向の位置)の量子化基準を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
インデックスの量子化を行わない |
| Offset Relative to Start | .relstart |
CHOP の開始インデックスを基点として量子化 |
| Offset Relative to Zero | .relzero |
サンプル 0 を基点として量子化 |
インデックスの量子化パラメータ 🧭
Step .istep 🪜
– 量子化されたインデックスの刻み幅
– Step Unit の単位(秒・フレーム・サンプル)に従って解釈
Step Unit .istepunit 📏
– Step の単位(Samples / Frames / Seconds)を選択
Offset .ioffset 📌
– 量子化されたインデックスのオフセット
– 量子化グリッドを揃える基準位置をシフト
Offset Unit .ioffsetunit 📏
– Offset の単位(Samples / Frames / Seconds)を選択
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: センサー値の暴走防止(Clamp) 🛡️
Serial In CHOP → Limit CHOP (Type: Clamp, Min/Max) → 制御先パラメータ
- Serial In CHOP でセンサー値を取得
- Limit CHOP の Type を「Clamp」、Min を 0、Max を 1 に設定
- 出力をライト強度・カメラ移動量などのパラメータに Export
- ノイズや外れ値が入っても出力が必ず 0〜1 の安全範囲内に収まる
Example 2: オシレータ値のループ折返し(Loop) 🔁
LFO CHOP → Limit CHOP (Type: Loop, 0 to 1) → Phase 制御
- LFO CHOP やランプ値を入力
- Limit CHOP の Type を「Loop」、Min を 0、Max を 1 に設定
- 値が 1 を超えると 0 に戻り、再び増加して 1 に向かう周期動作
- 位相(Phase)や UV スクロールなど周期的な値供給に最適
Example 3: ピンポン往復モーション(Zigzag) 🏓
Speed CHOP / 累積値 → Limit CHOP (Type: Zigzag) → アニメーション位置
- Speed CHOP で時間に対して単調増加する値を生成
- Limit CHOP の Type を「Zigzag」、Min/Max でストロークの両端を指定
- 値が境界に達すると反射し、ピンポンのように往復する
- オブジェクトの往復アニメーションや左右走査にそのまま使える
Example 4: 値の量子化によるビット深度シミュレーション 🎮
Constant CHOP / Math CHOP → Limit CHOP (Quantize Value) → 出力
- 連続的な値(0.0〜1.0)を入力
- Limit CHOP の Quantize Value を「Round」、Value Step を 0.0625 に設定
- 出力が 16 段階(4bit)にステップ化され、レトロな段階感を再現
- 音声・映像のローファイ表現や UI のスナップ動作に活用
関連オペレータ 🔗
類似機能OP 🔍
- Math CHOP — From Range / To Range による線形マッピングが主目的、クランプ動作は副次的
- Logic CHOP — 値の閾値判定で 0/1 を返す、連続的な制限ではなく二値化用途
組み合わせ推奨OP 🔄
- Math CHOP — Math で正規化 → Limit でクランプの定番組合せ
- Filter CHOP — Limit によるクランプの直前にスムージングを入れノイズを抑制
- Logic CHOP — Limit 出力の閾値超過を検知してトリガー化
- Speed CHOP — 累積値を Limit Loop / Zigzag で周期化・往復化
- Trigger CHOP — 量子化された値の変化点でエンベロープを起動
前処理・後処理CHOP 🎯
- 前処理: Math CHOP、Filter CHOP、Speed CHOP、Noise CHOP、LFO CHOP
- 後処理: Logic CHOP、Trigger CHOP、Lag CHOP、Hold CHOP、Null CHOP
Info CHOP情報 📊
Limit 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: Normalize が効かない(Time Slice オン時)
✅ Solution:
- 公式仕様で Normalize は Time Slice モードでは動作しない
- Time Slice オフに切替えるか、後段に Math CHOP の From Range / To Range で正規化を代替
- 正規化と Time Slice の両立が必要な場合は Math CHOP に切替えるのが確実
❌ Problem: Loop / Zigzag で境界値の挙動が想定と異なる
✅ Solution:
- 公式仕様で値域は Min〜Max 未満(Max は含まれない)の範囲を取る
- Min と Max を入れ替えていないか、両者の差が極端に小さくなっていないかを確認
- Type を Clamp に切替えて入力レンジを目視確認してから Loop / Zigzag に戻す
❌ Problem: 量子化のステップが想定外(値が飛び飛び・揃わない)
✅ Solution:
- Value Step が 0 または極小だと量子化グリッドが破綻する、適切な刻み幅を設定
- Value Offset でグリッドの起点を入力レンジに合わせて調整
- 値量子化は Quantize Value、時間軸量子化は Quantize Index と用途が別、混同していないか確認
❌ Problem: Quantize Index で時間軸方向のグリッドが崩れる
✅ Solution:
- Step Unit / Offset Unit が Samples / Frames / Seconds のどれになっているか必ず確認
- Quantize Index を「Offset Relative to Start」にすると CHOP 開始位置基準、「Offset Relative to Zero」にするとサンプル 0 基準で挙動が異なる
- 前段に Resample CHOP を入れてサンプルレートを揃えると不整合を回避できる
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

