
概要 📖 – ルックアップテーブルによる値の変換・マッピング
Lookup CHOPは、第 1 入力の値を index として第 2 入力 (lookup table) の波形を参照し、別の値に変換する CHOPです。Index Range / Cyclic Range / Interpolate / Extend 条件を組み合わせることで、線形補間カーブから周期波形マッピングまで 1 オペレータで自在に表現できます。
主な用途 🎯
- 第 1 入力 (index) の値を 第 2 入力 (lookup table) の波形で参照して別の値に変換
- カスタムカーブによるイージング・トーンマッピング・カラールックアップの実装
- 正規化済み index (0.0〜1.0) を任意の波形にマッピングしてアニメーション制御
- 周期信号のサイクル接続を Cyclic Range で滑らかに繋ぎ、シームレスなループ生成
- 名前マッチングまたは チャンネル番号で index と lookup table を柔軟に対応付け
データフロー 🔄
入力1 (index 値)
↓
Index Range で 0.0〜1.0 (デフォルト) に正規化マッピング
↓
入力2 (lookup table 波形) の対応位置をサンプリング
↓
Interpolate でサンプル間補間 / Extend Left・Right で範囲外処理
↓
出力: lookup table から取り出した変換済みチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Lookup Page 🎯
Index Range .index 📐
index チャンネルの値を lookup table の開始・終了に対応付ける範囲
Index Range .index 📐
– index チャンネルの値を lookup table の start・end にマッピングする範囲 (デフォルトは 0.0 と 1.0)
– 第 1 パラメータ: index 値がこの値のとき lookup table の 先頭 を参照
– 第 2 パラメータ: index 値がこの値のとき lookup table の 末尾 を参照
Cyclic Range .cyclic 🔁
周期的な index 入力に対して lookup table の範囲を循環的に扱うかどうか
| 項目 | 内部名 | 説明 |
|---|---|---|
| Automatic | .auto |
各チャンネルの右側 Extend 条件をチェック (cycle / mirror なら循環的とみなす) |
| Yes | .yes |
周期出力 (オシレータ・ビート駆動等) のルックアップ用 — index 0.0 と 1.0 を滑らかに繋ぐ |
| No | .no |
単一波形のルックアップ用 (スライダーマッピング等) — 0.0 と 1.0 は別の値 |
Per Index Channel .chanmatch 🔗
index チャンネルを lookup table のチャンネルとどう対応付けるか
| 項目 | 内部名 | 説明 |
|---|---|---|
| All Lookup Table Channels | .onetomany |
各 index チャンネルを全 lookup table と対応付け (1:N) |
Match by .match 🏷️
One Lookup Table Channel モードでの index チャンネルと lookup チャンネルの対応方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Channel Number | .index |
index チャンネルをクリップ内のインデックスで lookup table と対応付け (lookup table が少ない場合は循環) |
| Channel Name | .name |
index チャンネルを名前で lookup table と対応付け (未マッチは元の値のまま) |
Interpolate .interp 🌊
lookup table のサンプル間補間設定:
- オン: サンプル間を補間して滑らかな出力を得る (連続的なカーブ・トーンマッピング向け)
- オフ: 最も近いサンプルを使用 (ステップ関数・離散値マッピング向け)
Extend Left .left ⬅️
lookup 出力の左側 (範囲開始前) の Extend 条件
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
チャンネルの現在値を保持 |
| Slope | .slope |
チャンネル開始前のスロープを継続 |
| Cycle | .cycle |
チャンネルを繰り返し循環 |
| Mirror | .mirror |
チャンネルを 1 サイクルごとに反転して循環 |
| Default Value | .default |
Default Value パラメータで指定した定数値を使用 |
Extend Right .right ➡️
lookup 出力の右側 (範囲終了後) の Extend 条件
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
チャンネルの現在値を保持 |
| Slope | .slope |
チャンネル終了後のスロープを継続 |
| Cycle | .cycle |
チャンネルを繰り返し循環 |
| Mirror | .mirror |
チャンネルを 1 サイクルごとに反転して循環 |
| Default Value | .default |
Default Value パラメータで指定した定数値を使用 |
Default Value .defval 🔢
Default Value Extend 条件で使用する定数:
- Default Value: Extend Left / Extend Right が
Default Valueのとき範囲外で出力する定数値
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: 正規化済み index でカスタムカーブを適用 (イージング) 📈
Constant CHOP (0.0→1.0) → Lookup CHOP (Index Range=0,1) ← Pattern CHOP (ease curve) → 下流アニメーション
- 第 1 入力に 0.0〜1.0 で動く index CHOP (Constant CHOP / アニメーション CHOP) を接続
- 第 2 入力に Pattern CHOP 等で生成したイージングカーブ波形を接続
- Index Range をデフォルトの
0,1のまま、Interpolate をオンにする - index の線形変化が lookup table のカーブ形状で補間され、ease-in / ease-out 等の任意イージングが得られる
Example 2: Cyclic Range で周期信号を滑らかにループ 🔁
LFO CHOP (周期 0→1) → Lookup CHOP (Cyclic Range=Yes) ← 波形 lookup table → 周期出力
- LFO CHOP 等で 0.0→1.0 の周期 index を生成し第 1 入力に接続
- 第 2 入力に 1 周期分の波形を持つ lookup table CHOP を接続
- Cyclic Range を
Yesに設定 — index 0.0 と 1.0 で同じ値が出力されるのを回避 - 結果: ループの境目が滑らかに繋がり、ビート駆動・周期エフェクト等で継ぎ目のないアニメーションになる
Example 3: Channel Nameで複数indexを対応付け 🏷️
多チャンネル index CHOP (tx, ty, tz) → Lookup CHOP (Match by=Channel Name) ← 同名 lookup table (tx, ty, tz)
- 第 1 入力に複数 index チャンネル (例:
tx ty tz) を持つ CHOP を接続 - 第 2 入力に同じ名前の lookup table チャンネルを持つ CHOP を接続
- Match by を
Channel Nameに設定 — チャンネル番号ではなく名前で対応付け - 未マッチのチャンネル (lookup table に同名がないもの) は元の値のままパススルーされる
関連オペレータ 🔗
類似機能OP 🔍
- Pattern CHOP — lookup table として使う波形 (ease curve / sin / 任意関数) を生成する側
- Function CHOP — 数式ベースで値変換する代替 (lookup table 不要、関数で直接表現)
- Limit CHOP — 値域のクランプ・量子化 (lookup より単純な範囲制約用途)
組み合わせ推奨OP 🔄
- LFO CHOP — 周期 index を生成して Lookup の第 1 入力に渡す
- Constant CHOP — 固定 index 値で lookup table の特定位置を取り出す
- Math CHOP — Lookup の前段で index を Range 変換、または出力にゲイン・オフセットを掛ける
- Filter CHOP — Lookup 出力に時間方向のスムージングを適用
- Null CHOP — Lookup 出力の参照点として後段の参照を安定化
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Lookup 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: 出力が常に lookup table の先頭または末尾に張り付く
✅ Solution:
- Index Range の値が index チャンネルの実値域と一致しているか確認 (例: index が 0〜100 なら Index Range も
0,100に設定) - 前段に Math CHOP を入れて index を 0.0〜1.0 に正規化してから Lookup に渡す
- Extend Left / Right が
Hold以外になっていないか確認 (意図せず範囲外の挙動になっている可能性)
❌ Problem: 周期 index で 0 と 1 の境目に段差が出る
✅ Solution:
- Cyclic Range を
Yesに設定して循環的な lookup を有効化 - lookup table の波形そのものが先頭値と末尾値で連続しているか確認 (不連続なら Pattern CHOP で 1 周期分の連続波形を生成)
- 後段に Filter CHOP を挟んで境目を時間方向に滑らかにする
❌ Problem: Match by=Channel Name にしてもチャンネルが対応付かない
✅ Solution:
- index 側と lookup table 側のチャンネル名が完全一致しているか確認 (大小文字・空白・末尾数字も区別される)
- 前段に Rename CHOP を挟んで名前を揃える
- 未マッチのチャンネルは元の値のままパススルーされる仕様のため、意図しない素通りに気付きにくい点に注意
❌ Problem: 離散的な値変換のはずが連続値で出力される
✅ Solution:
- Interpolate をオフにして最も近いサンプルを使用するモードに変更
- lookup table をステップ波形 (階段状) として用意 (Pattern CHOP の
stepモード等) - 後段で Limit CHOP の量子化を組み合わせて離散化を強制する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

