
概要 📖 – ムービングヘッドのパン/チルト角度計算
Pan Tilt CHOPは、ムービングヘッドライト等のリグ群に対し、パン/チルト回転値を計算する CHOPです。リグごとの初期姿勢、可動域クランプ、Reset 機能を備え、ライブ照明・スキャナー類の角度制御に直接利用できます。
主な用途 🎯
- ムービングヘッド照明のパン/チルト角度算出(ターゲット座標から駆動値を逆算)
- 複数リグ(fixture)の同期制御(rig ごとに初期姿勢を保持し連続的に追従)
- パン/チルト可動域のクランプ(機材物理仕様を超えない安全リミット)
- 初期オフセット(リセット姿勢)の指定によるアライメント補正
- Reset トグルによる現在姿勢の任意角度への即時セット
データフロー 🔄
入力: ターゲット座標または姿勢データ
↓
リグ初期姿勢(Reset Values)
↓
パン/チルト角計算
↓
Clamp Pan / Clamp Tilt
↓
出力: pan, tilt 角度(度単位)
Tips
初心者の方は、以下日本語書籍も手元にあると安心です。
リンク
リンク

まる。
実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Pan/Tilt Page 🎯
Reset .reset 🔄
リグの現在姿勢を破棄し、最後に保持されていた姿勢をこのトグル値に再設定する
| 項目 | 内部名 | 説明 |
|---|---|---|
| Reset | .reset |
リグ群の現在姿勢を破棄し、最後に保持していた姿勢を Reset Values で指定した角度にリセットする |
Reset Values .resetvals 🧭
| 項目 | 内部名 | 説明 |
|---|---|---|
| Reset Values | .resetvals |
各リグの初期回転角(度単位)。resetvals1 がパン初期値、resetvals2 がチルト初期値。出力角度はこの初期姿勢を基準に算出される |
Clamp Pan .clamppan 🚧
パン値を指定範囲内に制限するトグル
| 項目 | 内部名 | 説明 |
|---|---|---|
| Clamp Pan | .clamppan |
オン: パン出力を Pan Range で指定した上下限内にクランプ。機材の物理可動域を超える指令を防止する用途で使用 |
Pan Range .panrange 📐
パンの上下限角(度単位)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Pan Range | .panrange |
パン角度の下限・上限(度単位)。panrangemin が下限値、panrangemax が上限値。Clamp Pan がオンのときに参照される |
Clamp Tilt .clamptilt 🚧
チルト値を指定範囲内に制限するトグル
| 項目 | 内部名 | 説明 |
|---|---|---|
| Clamp Tilt | .clamptilt |
オン: チルト出力を Tilt Range で指定した上下限内にクランプ。機材の物理可動域を超える指令を防止する用途で使用 |
Tilt Range .tiltrange 📐
チルトの上下限角(度単位)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Tilt Range | .tiltrange |
チルト角度の下限・上限(度単位)。tiltrangemin が下限値、tiltrangemax が上限値。Clamp Tilt がオンのときに参照される |
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: ターゲット追尾でムービングヘッドをコントロール 🔦
Target Position (CHOP) → Pan Tilt CHOP → DMX Out CHOP → ムービングヘッドライト
- ステージ上のターゲット座標を CHOP で用意(パフォーマーの位置や仮想ターゲット)
- Pan Tilt CHOP に入力し、Reset Values で各リグの設置角を初期値として設定
- Clamp Pan / Clamp Tilt をオンにして機材の物理可動域内にクランプ
- 出力 pan, tilt を DMX Out CHOP 経由でムービングヘッドへ送出
- ターゲットが動いてもライトが追従するピンスポット制御を実現
Example 2: 複数リグの同期スキャン演出 🎆
LFO CHOP → Pan Tilt CHOP (複数リグ) → DMX Out CHOP
- LFO CHOP で滑らかな周期信号を生成(例: sin 波で 0.2Hz)
- Pan Tilt CHOP に入力し、リグごとの Reset Values をズラして位相差を付与
- Pan Range を [-90, 90]、Tilt Range を [0, 60] にクランプし可動域を制限
- 複数のリグが連動して同期スキャンする演出を構築
- DMX Out CHOP 経由でリアルタイムに角度値を送出
Example 3: OSC からの遠隔オペレーション 📡
OSC In CHOP → Math CHOP (正規化) → Pan Tilt CHOP → DMX Out CHOP
- OSC In CHOP でリモートコントローラーからパン/チルト指示値を受信
- Math CHOP で OSC の値域(0〜1)を角度域(-180〜180 等)にマッピング
- Pan Tilt CHOP に渡し、Clamp Pan / Clamp Tilt で安全リミットを適用
- Reset トグルでリグの姿勢を任意のタイミングで初期姿勢に戻せる
- オペレータが iPad などから遠隔で照明を操作するワークフローを構築
関連オペレータ 🔗
類似機能OP 🔍
- Object CHOP — シーン内オブジェクトの姿勢を CHOP として取得(角度抽出用途)
組み合わせ推奨OP 🔄
- Math CHOP — 外部入力の値域を角度域へ正規化する前段
- Filter CHOP — 後段でスムージングしてカクつきを抑制
- LFO CHOP — 周期信号でスキャン演出の上流ソースに利用
- Limit CHOP — Clamp Pan/Tilt と併用してさらに細かいリミット制御
- Lag CHOP — Pan Tilt 出力に遅延を与えて滑らかな動きを演出
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Pan Tilt 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: 出力角度が機材の可動域を超えてしまう
✅ Solution:
- Clamp Pan / Clamp Tilt をオンにして Pan Range / Tilt Range で物理可動域を指定する
- 後段に Limit CHOP を追加してさらに厳格にクランプ
- DMX 送出前に Math CHOP で角度域を DMX 値域(0〜255 等)へ正規化
❌ Problem: リグごとに姿勢の初期値がズレて同期しない
✅ Solution:
- Reset Values(
resetvals1/resetvals2)でリグごとの設置角度を正しく入力する - 全リグを一度リセットするには Reset トグルを使用し最後の Reset Values へ揃える
- リグ数と入力チャンネル数の対応が取れているか前段で確認
❌ Problem: 出力がカクついて滑らかでない
✅ Solution:
- 後段に Filter CHOP を入れて時間方向にスムージング
- Lag CHOP で立ち上がり・減衰の応答曲線を調整
- 入力サンプルレートが低い場合は前段で Resample してから渡す
❌ Problem: Range をクランプしても 360 度を超えて巻き付く動きにならない
✅ Solution:
- Pan Tilt CHOP のクランプは値の制限であり巻き付き処理ではない、巻き付かせたい場合はクランプをオフにする
- 巻き付きを抑えるには Pan Range を機材の機械的最大値(例: ±540 度)に合わせる
- Reset を使って想定外の累積回転をリセットし、次のサイクルを安全な角度から開始する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

