
概要 📖 –
Switch POPは、複数の入力 POP からインデックスで 1 本を選び出力するルーター POPです。整数 Index で入力を瞬時に切替え、小数 Index ではポイント数・頂点数・プリミティブ数が一致する隣接入力同士をブレンドします。
主な用途 🎯
- 複数 POP からの入力切替(Index で出力先を選択)
- 小数インデックスによる入力同士のブレンド(フレーム単位のクロスフェード)
- シーン切替の中継ノード(演出ステート遷移の起点)
- 属性スコープを指定したブレンド制御(Point / Primitive / Vertex 単位)
- 条件分岐ジオメトリの構築(CHOP からの Index 駆動)
データフロー 🔄
入力: 複数 POP(Index で参照)
↓
Switch 処理(Index 値に応じた選択 or ブレンド)
↓
出力: 選択された 1 本の POP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Switch Page 📋
Index .index 🔢
出力対象の入力番号を指定:
- Index 値:
Index(出力する入力番号) — 0 から数え、出力したい入力 POP の番号を指定します。整数で切替、小数値で隣接入力同士をブレンド可能 - 範囲外時の挙動: 範囲外 Index はデフォルトで
Clampされ、最初または最後の入力に丸められます (詳細は次項Extend)
Extend .extend 🔁
Index が入力数を超えた / 負数になった場合の処理方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Clamp | .clamp |
範囲外 Index を端の入力 (0 または末尾) に丸める |
| Loop | .loop |
末尾を超えると先頭に戻り、入力配列を巡回する |
| ZigZag | .zigzag |
末尾に達すると逆方向に折り返し、往復するように Index が解釈される |
Blend between Inputs .blend 🌗
小数 Index 時の入力ブレンド制御:
- オン:
Blend between Inputs(入力間ブレンド) — オンにすると Index が小数値の場合に隣接 2 入力をブレンドして出力します - 前提条件: ブレンドが成立するのは、隣接する 2 入力の ポイント数・頂点数・プリミティブ数が一致 しているときのみ。一致しない場合は
Length Mismatchの挙動に従う - オフ時: Index は最寄りの整数に切り捨て、瞬時切替のみ
Length Mismatch .lengthmismatchnotif ⚠️
長さ不一致時の通知・動作設定:
- Length Mismatch Notification:
Length Mismatch(長さ不一致通知) — 入力同士の点数・頂点数・プリミティブ数が異なる場合の通知方法を指定するパラメータ - Length Mismatch Action:
lengthmismatchaction(不一致時動作) — 入力範囲外を参照したサンプリング時に、どの属性値を採用するかを決定する設定
属性スコープ 🎯
ブレンド対象となる属性を Point / Primitive / Vertex の各カテゴリで指定
Point Attribute Scope .pointattrscope 🔵
– Point Attribute Scope (ポイント属性スコープ) — ブレンド対象とするポイント属性のパターン文字列
– デフォルトは * (全ポイント属性)、ワイルドカードで属性名を絞り込み可能
Primitive Attribute Scope .primattrscope 🔺
– Primitive Attribute Scope (プリミティブ属性スコープ) — ブレンド対象とするプリミティブ属性のパターン文字列
– デフォルトは * (全プリミティブ属性)
Vertex Attribute Scope .vertattrscope 🔻
– Vertex Attribute Scope (頂点属性スコープ) — ブレンド対象とする頂点属性のパターン文字列
– デフォルトは * (全頂点属性)
Input シーケンス .input 🔌
入力 POP の管理:
- Input (シーケンスヘッダ):
input(入力ブロック) — Switch POP の入力を管理するシーケンシャルパラメータブロックの開始 - In POP(s):
input0pop(入力 POP 参照) — 現在のシーケンスブロックに対する入力 POP のパスを指定。シーケンスブロックを追加することで複数入力に対応
Common Page 🔧
Bypass .bypass 🚫
POP の処理をスキップして入力をパススルーする設定:
- オン: 最初の入力 (input1) をそのまま出力にパススルー、POP 内部の処理を無効化
- 用途: デバッグ時に特定 POP の効果を一時的に外して比較する際に使用
Free Extra GPU Memory .freeextragpumem 🧠
蓄積した GPU メモリの解放:
- Free Extra GPU Memory パルス: 出力ポイント数が増減を繰り返した際に確保されたままの GPU メモリを明示的に解放するパルスパラメータ
- 用途: 大規模パーティクル系で出力サイズが大きく変動した後、未使用メモリを返却して VRAM を節約
Delete Input Attributes .delinputattrs 🗑️
出力属性の絞り込みパターン:
- Delete Input Attributes パターン: 出力に残したい属性名のパターン (例:
P N Cd) を指定。指定外の属性は破棄される - 用途: 下流で不要な属性を切り落として分岐ブランチを軽量化、メモリ・帯域を節約
実践アイデア 💡
Example 1: シーン演出の切替 🔀
Particle POP A / B / C → Switch POP (Index from CHOP) → Render TOP
ライブ演出で複数のパーティクル POP シーンを Switch POP で 1 本に集約し、CHOP からの Index 信号でフレーム単位に切替えるルーター構成。整数 Index で瞬時切替、小数 Index でフェード遷移が成立します。
- 演出シーンとなる Particle POP を 3 系統用意
- Switch POP の入力 0/1/2 にそれぞれ接続
- Constant CHOP または MIDI 入力で Index を駆動
- Index を整数で切替、小数で隣接シーンをクロスブレンド
Example 2: 形状のクロスフェード 🌗
Box POP / Sphere POP → Switch POP (Blend ON, Index=0→1) → Geometry COMP
ポイント数・頂点数が一致する 2 つの形状 POP を Switch POP に接続し、Index を 0 から 1 へ補間することで形状同士のモーフィング (形状ブレンド) を実現するフロー。
- ポイント数を揃えた 2 つの POP を入力に接続
- Blend between Inputs をオンに設定
- Index を 0.0 から 1.0 へアニメーション駆動
- Point Attribute Scope でブレンド対象属性を絞り込み
Example 3: ループ切替演出 🔁
POP A / B / C / D → Switch POP (Extend=Loop) → Output
Extend モードを Loop に設定し、Index を単調増加させることで入力配列を巡回させる演出パターン。ZigZag に切替えれば往復モーションになり、Index 駆動の振る舞いに変化を付けます。
- Switch POP の Extend を Loop に変更
- LFO CHOP 等で Index を単調増加させる
- ZigZag に変更すると往復切替モーションになる
関連オペレータ 🔗
類似機能OP 🔍
- Switch CHOP — CHOP ファミリーでの入力切替
- Select POP — 別ネットワークの POP を参照する選択型
組み合わせ推奨OP 🔄
- Blend POP — 重み付きブレンド専用の上流・下流連携
- Merge POP — 切替ではなく全入力を合成したいとき
- Transform POP — 切替後の出力に変換を後段適用
- Null POP — 切替結果を下流に分岐させる中継
前処理・後処理POP 🎯
Info情報 📊
Switch POPは Info CHOP による詳細情報取得に対応しています。
POP固有情報 ✨
num_verts: POP に含まれる頂点 (vertex) 数num_points: POP に含まれるポイント数num_prims: POP に含まれるプリミティブ数
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号cook_abs_frame: 最後にクックされた絶対フレーム番号 (アプリケーション起動からの累積)cook_start_time: 最後のクック開始時刻 (ミリ秒)cook_end_time: 最後のクック終了時刻 (ミリ秒)cooked_this_frame: 現フレームでクックされたか (0 / 1)warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 小数 Index でブレンドが効かない
✅ Solution:
Blend between Inputsがオンになっているか確認- 隣接入力のポイント数・頂点数・プリミティブ数が一致しているか確認 (不一致時はブレンド不可)
- 前段で属性数を揃えるため
Delete Input Attributesや統一形状の生成を検討
❌ Problem: 範囲外 Index で意図しない入力に切替わる
✅ Solution:
Extendの設定をClamp/Loop/ZigZagから目的に合わせて選択- Index 駆動側 (CHOP 等) でクランプ・剰余演算を入れて事前制御
- 入力数と Index 範囲が一致しているか接続を再確認
❌ Problem: ブレンド時に属性が欠落 / 想定外の値になる
✅ Solution:
Point Attribute Scope/Primitive Attribute Scope/Vertex Attribute Scopeでブレンド対象属性を明示指定Length Mismatchの動作設定を確認し、範囲外参照時の値の取り扱いを揃える- 上流で属性名を
P N Cd等に統一して入力同士の整合性を担保
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

