
概要 📖 – 番号でマテリアルを切替える
Switch MATは、複数の入力マテリアルを Index 番号で選択し、1 つだけを下流に流す多入力マテリアルスイッチャです。Switch MAT は複数の MAT を入力に取り、index パラメータが指す入力 (0 から開始) を出力します。Select MAT がパス文字列で MAT を取得するのに対し、Switch MAT は ワイヤー接続された複数の MAT から index 値で選ぶ 点が異なります。extend パラメータで index が入力数を超えた場合の挙動 (Clamp / Loop / ZigZag) を制御でき、CHOP 値や状態変数をエクスポートすることで動的かつ周期的なマテリアル切替が可能です。Deform Page と Common Page も Phong/PBR MAT と同等に独立保持しており、Switch MAT 自身に固有のスキニング・描画設定を持たせることもできます。
主な用途 🎯
- 複数マテリアルの動的切替として、複数の MAT を入力ワイヤーで接続し
indexパラメータの値で出力する MAT を選択 - 状態遷移に応じた見た目変更として、ステートマシンや UI 操作と連動した
index制御で通常 / ホバー / アクティブ等の表示モード切替 - LFO / CHOP 駆動のマテリアルアニメーションとして、
indexパラメータに CHOP 値をエクスポートし時間軸に沿った周期的なマテリアル切替 - Replicator COMP との組合せでインスタンス毎マテリアル割当として、複製インスタンス番号を
indexに渡し個体差のあるマテリアルを一括適用 - デバッグ / 比較表示として、Wireframe / Constant / Phong / PBR 等のデバッグ用 MAT 群を入力に並べ
indexですばやく切替えながら検証
データフロー 🔄
入力: 複数の MAT (Phong / PBR / Constant 等、入力 0, 1, 2, ... に接続)
↓
Switch MAT がindexパラメータの値で 1 つを選択
↓ (extend= Clamp / Loop / ZigZag で範囲外動作を決定)
出力: 選択された MAT (Geometry COMP の Material 参照先として使用)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Switch Page 🔀
Index .index 🔢
使用する入力 MAT のインデックスを指定:
- Index:
index使用する入力を選択する数値。最初の入力が0、2 番目が1、… と進む。CHOP 値や DAT 参照のエクスプレッションを書くことで実行時に動的切替できる
Extend .extend 🔁
index が入力数の範囲外になった場合の挙動を決定するメニュー (負のインデックスも許容)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Clamp | .clamp |
範囲外は最近端 (0 未満は 0、最大超過は最終入力のインデックス) にクランプ |
| Loop | .loop |
範囲外は剰余計算で先頭に戻る循環参照 (例: 入力 3 個に対し index=4 なら 1 番目を選択) |
| ZigZag | .zigzag |
範囲を超えると反転して戻る往復動作 (例: 入力 3 個に対し index=3 なら 2、4 なら 1) |
Deform Page 🦴
Deform .dodeform 🦴
ボーンによるジオメトリ変形をこのマテリアル上で有効化:
- Deform トグル:
dodeformこのマテリアル上でスケルトン変形を有効化
Get Bone Data .deformdata 📍
デフォームボーンデータの取得元
| 項目 | 内部名 | 説明 |
|---|---|---|
| From SOP | .fromsop |
SOP の capture 属性から取得 |
| From MAT | .frommat |
別の MAT (参照元 MAT) からデフォームデータを継承 |
Bone Capture 設定 .bonecapture 🦴
Capture 属性とスケルトンルートの指定:
- SOP with Capture Data:
targetsoppCaptPath/pCaptData属性を持つ SOP のパスを指定 - pCaptPath Attrib:
pcaptpath使用する pCaptPath 属性名 (Bone Group SOP 通過後はpCaptPath0/pCaptPath1等に分割される) - pCaptData Attrib:
pcaptdata使用する pCaptData 属性名 (pCaptPath と対になる) - Skeleton Root Path:
skelrootpathスケルトンのルート COMP のパス - MAT:
matGet Bone DataがFrom MAT時に参照する他 MAT または参照元 MAT のパス
Common Page 🔧
Blending .blending 🎨
色のブレンディング (透過合成) に関する設定群
| 項目 | 内部名 | 説明 |
|---|---|---|
| Add | .add |
ソースとデスティネーションを加算 |
| Subtract | .subtract |
ソースからデスティネーションを減算 |
| Reverse Subtract | .revsubtract |
デスティネーションからソースを減算 |
| Minimum | .minimum |
両者の最小値を採用 |
| Maximum | .maximum |
両者の最大値を採用 |
| Blending (Transparency) | .blending |
透過効果のためのカラーブレンディングを有効化するトグル |
| Separate Alpha Function | .separatealphafunc |
アルファチャンネルのブレンド設定を RGB と独立させる |
| Blend Constant Color | .blendconstant |
constantcol 系オプション選択時に使用する RGB 定数カラー |
| Blend Constant Alpha | .blendconstanta |
constanta 系オプション選択時に使用する定数アルファ値 |
| Legacy Alpha Behavior | .legacyalphabehavior |
旧バージョンのアルファ処理との後方互換を有効化 |
| Post-Mult Color by Alpha | .postmultalpha |
ブレンド演算完了後に RGB を計算後アルファで乗算 |
Depth Test .depthtest 📏
デプステスト (Z 比較) によるオクルージョン制御
| 項目 | 内部名 | 説明 |
|---|---|---|
| Less Than | .less |
新ピクセルのデプスが既存より小さい (手前) なら描画 |
| Less Than or Equal | .lessorequal |
新ピクセルが既存以下なら描画 |
| Equal | .equal |
デプスが完全一致時のみ描画 |
| Greater Than | .greater |
新ピクセルが既存より大きい (奥) なら描画 |
| Greater Than or Equal | .greaterorequal |
新ピクセルが既存以上なら描画 |
| Not Equal | .notequal |
デプスが一致しない場合のみ描画 |
| Always | .always |
デプス比較を行わず常に描画 |
| Depth Test | .depthtest |
デプスバッファとの比較によるオクルージョンを有効化 |
| Write Depth Values | .depthwriting |
デプステストを通過したピクセルのデプス値をデプスバッファに書き込む |
Alpha Test .alphatest 🔍
アルファ値に基づくピクセル単位の破棄判定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Less Than | .less |
アルファが閾値より小さいピクセルを残す |
| Less Than or Equal | .lessorequal |
アルファが閾値以下のピクセルを残す |
| Greater Than | .greater |
アルファが閾値より大きいピクセルを残す |
| Greater Than or Equal | .greaterorequal |
アルファが閾値以上のピクセルを残す |
| Discard Pixels Based on Alpha | .alphatest |
ピクセル単位でアルファによる破棄判定を有効化 |
| Alpha Threshold | .alphathreshold |
アルファ比較の閾値。条件外のピクセルは破棄される |
Wire Frame .wireframe 🕸️
ジオメトリをワイヤーフレーム表示する設定
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
通常のソリッド描画 (ワイヤーフレーム無効) |
| OpenGL Tesselated Wire Frame | .tesselated |
OpenGL が三角形分割した状態でワイヤーを描画 |
| Topology Wire Frame | .topology |
元のポリゴントポロジ (四角形等) のままワイヤーを描画 |
| Line Width | .wirewidth |
ワイヤーフレームの線の太さ (ピクセル単位) |
Cull Face .cullface 🔺
ポリゴンの表裏どちらを描画するか (カリング) の選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Use Render Setting | .userender |
Render TOP 側の設定に従う |
| Neither | .neither |
両面とも描画 (カリングなし) |
| Back Faces | .backfaces |
裏面をカリング、表面のみ描画 |
| Front Faces | .frontfaces |
表面をカリング、裏面のみ描画 |
| Both Faces | .bothfaces |
両面をカリング (= 何も描画されない) |
Polygon Depth Offset .polygonoffset ↔️
Z-fighting 対策としてポリゴンのデプス値をオフセット
| 項目 | 内部名 | 説明 |
|---|---|---|
| Polygon Depth Offset | .polygonoffset |
ポリゴンのデプス値オフセット機能を有効化 |
| Offset Factor | .polygonoffsetfactor |
デプス勾配に対するオフセットの乗数 |
| Offset Units | .polygonoffsetunits |
デプス単位の固定オフセット量 |
Color Space .parmcolorspace 🌈
カラーパラメータの色空間 / 基準白色の解釈
| 項目 | 内部名 | 説明 |
|---|---|---|
| sRGB | .srgb |
SDR sRGB トランスファ関数 (一般的なディスプレイ標準) |
| sRGB – Linear | .srglinear |
SDR リニアトランスファ |
| Rec.601 (NTSC) | .rec601ntsc |
SDR NTSC 規格 (旧テレビ放送) |
| Rec.709 | .rec709 |
SDR ビデオ規格 (HD テレビ) |
| Rec.2020 | .rec2020 |
HDR 放送規格 (4K/8K UHD) |
| DCI-P3 | .dcip3 |
HDR シネマ規格 (D65 ホワイトポイント) |
| DCI-P3 (D60) | .dcip3d60 |
HDR シネマ規格 (D60 ホワイトポイント) |
| Display-P3 (D65) | .displayp3d65 |
HDR sRGB ガンマ (Apple ディスプレイ等) |
| ACES2065-1 | .aces2065-1 |
HDR リニアシネマ規格 (アーカイブ用) |
| ACEScg | .acescg |
HDR リニアシネマ作業用色空間 |
| Passthrough | .passthrough |
色空間変換を行わずそのまま渡す |
実践アイデア 💡
Example 1: 状態に応じてマテリアル切替 🎚️
3 つの MAT (mat_normal / mat_hover / mat_active) → Switch MAT (index = CHOP 値) → Geometry COMP
ボタンやインタラクティブオブジェクトの表示状態を Switch MAT で切替えるパターン。3 つの状態用 MAT (通常 / ホバー / アクティブ) を Switch MAT の入力 0, 1, 2 に接続し、index パラメータに状態を保持する CHOP 値をエクスポートします。状態が変わると同じ Geometry COMP の見た目だけが瞬時に切替り、ジオメトリ構造はそのまま維持できます。
- 状態ごとの MAT を作成: Phong MAT を 3 つ (例:
mat_normal灰色 /mat_hover青 /mat_active緑) - Switch MAT を配置し、3 つの MAT を入力
0/1/2に順番に接続 - 状態保持用に Constant CHOP を作成し、チャンネル
stateに現在の状態番号 (0/1/2) を入れる - Switch MAT の
indexパラメータを右クリック →Export CHOPでconstant1/stateを割当 - Geometry COMP の
Materialパラメータに Switch MAT のパスを指定すると、state値の変化に応じて見た目が即座に切替る
Example 2: LFO CHOP でマテリアルを周期的にアニメーション切替 🎼
複数の色違い MAT → Switch MAT (index = LFO CHOP の量子化値 / extend = Loop) → Geometry COMP
LFO CHOP の周期波形を Switch MAT の index パラメータにエクスポートし、時間軸に沿ってマテリアルを順番に巡回切替えます。extend を Loop にすることで入力数を超えるインデックス値も折り返して循環するため、シンプルなノコギリ波 LFO だけでループ状のマテリアルパレード演出が作れます。
- 演出用に Phong MAT を 5 つ作成 (5 色のパレット)、すべて Switch MAT の入力 0~4 に接続
- LFO CHOP を配置し、
TypeをRamp(ノコギリ波)、周期を5秒程度に設定 - Math CHOP を後段に挿入し、
Multiplyで 5 倍 +From Range/To Rangeで0~4の整数範囲に変換 - Switch MAT の
indexパラメータをExport CHOPでmath1/chan1に割当、さらにextendをLoopに設定して安全側に倒す - Geometry COMP の
Materialに Switch MAT を指定すると、時間に応じて 5 色のマテリアルが周期的に巡回切替する演出が完成
Example 3: Replicatorで個別マテリアル割当 🧬
複数の MAT 候補 → Switch MAT (index = digits 等のインスタンス番号 CHOP) → Replicator COMP 配下の各 Geometry COMP
Replicator COMP で複製した複数のジオメトリインスタンスに対し、それぞれ異なる MAT を割り当てたいケース。各インスタンスに Switch MAT を含めたテンプレート COMP を Replicator が複製し、複製時の連番 (digits) を Switch MAT の index にエクスポートすれば、インスタンス毎にマテリアルが切替えられます。
- Replicator COMP のテンプレート COMP 内に Switch MAT を配置し、3 つのバリエーション MAT を入力 0, 1, 2 に接続
- Replicator COMP の
Master Templateにこのテンプレート COMP を指定し、複製数 (例:N=6) を設定 - テンプレート COMP 内の Switch MAT の
indexパラメータを Replicator から渡される連番 (例:me.digits % 3) に設定 extendをLoopに設定すると 3 種類のマテリアルがインスタンス間で巡回適用される- 各インスタンスの Geometry COMP の
Materialパラメータが自身のテンプレート内 Switch MAT を参照することで、複製先全体がインスタンス毎に異なる見た目になる
関連オペレータ 🔗
類似機能OP 🔍
- Select MAT — 別の MAT を選択して下流に流す中継 MAT。Switch MAT がワイヤー接続された複数入力から index で選ぶのに対し、Select MAT はパス文字列で 1 つの MAT を取得する点が差別化要素
- Null MAT — 上流の 1 つの MAT をそのままパススルーする中継 MAT。複数入力からの選択機能はなく、安定参照点アンカーとしての中継専用
組み合わせ推奨OP 🔄
- Phong MAT — Switch MAT の入力に並べる代表的な標準ライティング MAT
- PBR MAT — Switch MAT で物理ベースシェーディングを通常 MAT と並べて切替するときの典型入力
- Constant MAT — デバッグ表示や非ライティング描画用に Switch MAT の入力 0 番に置く定番 MAT
- Geometry COMP —
Materialパラメータに Switch MAT のパスを指定する代表的な下流 COMP - Replicator COMP — 複製インスタンスごとに
digitsを Switch MAT のindexへ渡すことでインスタンス毎マテリアル切替を実現
前処理・後処理MAT 🎯
- 前処理: Phong MAT、PBR MAT、Constant MAT、GLSL MAT
- 後処理: Null MAT、Select MAT、Out MAT
Info情報 📊
MAT は Info CHOP / Info DAT に接続することで、シェーダコンパイル状況やクック情報を取得できます。
汎用オペレータ情報 🔄
total_cooks: プロセス開始からの累計クック回数cook_time: 直近クックに要した時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 現在の警告数 (シェーダコンパイル警告含む)errors: 現在のエラー数 (シェーダコンパイルエラー含む)
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Switch MAT を Geometry COMP に指定しても期待した MAT が出力されない
✅ Solution:
indexパラメータが指す番号が、入力ワイヤーに接続されている MAT の番号と一致しているか確認 (最初の入力は0番)- 入力ワイヤーの順序を Network エディタで目視確認。複数の MAT を接続したつもりでも順序が想定と異なるとマテリアルがずれて出力される
- Switch MAT 自身が Null MAT 等にパススルーされていないか、下流の Geometry COMP の
Materialパラメータが正しく Switch MAT を指しているか確認
❌ Problem: index を大きな値にしたら何も描画されない / 想定と違う MAT が選ばれる
✅ Solution:
extendパラメータの設定を確認。Clampなら範囲外で最終入力に張り付き、Loopなら剰余で先頭側に戻り、ZigZagなら反転往復する- 意図的に循環アニメさせたいなら
Loop、安全側に倒して最後の MAT で固定したいならClampを選択 indexにエクスプレッションや CHOP 値をエクスポートしている場合は、評価結果が整数として有効な値になっているかをShow Parameter Valueで確認
❌ Problem: Switch MAT 上で Deform Page をオンにしてもボーン変形が反映されない
✅ Solution:
- Switch MAT の
Deformをオン、Get Bone DataをFrom SOPまたはFrom MATに正しく設定し、対応するSOP with Capture Data/MATパラメータを指定する - 選択されている入力 MAT 側でも Deform 設定が必要な場合は両方の Deform Page を一致させるか、参照経路を capture データを持つ単一の上流 MAT 経由に統一する構成を検討
- Skeleton Root Path とジオメトリ側の
pCaptPath/pCaptData属性が整合しているか Bone Group SOP 通過後の属性名 (pCaptPath0等) も含めて確認
❌ Problem: Switch MAT の Common Page (Blending / Depth Test 等) を変更したのに描画に反映されない
✅ Solution:
- Geometry COMP が Switch MAT を
Material直接参照していれば Switch MAT 自身の Common Page が使われるが、構成によっては選択された入力 MAT 側の Common Page が優先される場合がある - Switch MAT を「論理的な切替点」として使うときは、実描画に効かせたい Common Page 設定を入力側 MAT (実際に使われる Phong / PBR / Constant MAT) で揃えるのが基本運用
- Common Page の
Cull FaceがBoth Facesになっていないかも確認 (両面カリング = 何も描画されない)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — MAT 概要
- TouchDesigner Wiki — Category:MATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Switch MAT
- Select MAT (パス参照で MAT を取得する対比対象)
- Null MAT (上流 MAT を 1 つだけパススルーする中継 MAT)
- Replicator COMP (Switch MAT の index をインスタンス連番で駆動する代表的下流 COMP)

