Switch MAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Switch MAT が複数の入力マテリアルを Index パラメータで切替えて下流に渡す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – 番号でマテリアルを切替える

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 参照先として使用)

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

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 なら 24 なら 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: targetsop pCaptPath / pCaptData 属性を持つ SOP のパスを指定
  • pCaptPath Attrib: pcaptpath 使用する pCaptPath 属性名 (Bone Group SOP 通過後は pCaptPath0 / pCaptPath1 等に分割される)
  • pCaptData Attrib: pcaptdata 使用する pCaptData 属性名 (pCaptPath と対になる)
  • Skeleton Root Path: skelrootpath スケルトンのルート COMP のパス
  • MAT: mat Get Bone DataFrom 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 の見た目だけが瞬時に切替り、ジオメトリ構造はそのまま維持できます。

  1. 状態ごとの MAT を作成: Phong MAT を 3 つ (例: mat_normal 灰色 / mat_hover 青 / mat_active 緑)
  2. Switch MAT を配置し、3 つの MAT を入力 0 / 1 / 2 に順番に接続
  3. 状態保持用に Constant CHOP を作成し、チャンネル state に現在の状態番号 (0 / 1 / 2) を入れる
  4. Switch MAT の index パラメータを右クリック → Export CHOPconstant1/state を割当
  5. Geometry COMPMaterial パラメータに Switch MAT のパスを指定すると、state 値の変化に応じて見た目が即座に切替る

Example 2: LFO CHOP でマテリアルを周期的にアニメーション切替 🎼

複数の色違い MAT → Switch MAT (index = LFO CHOP の量子化値 / extend = Loop) → Geometry COMP

LFO CHOP の周期波形を Switch MAT の index パラメータにエクスポートし、時間軸に沿ってマテリアルを順番に巡回切替えます。extendLoop にすることで入力数を超えるインデックス値も折り返して循環するため、シンプルなノコギリ波 LFO だけでループ状のマテリアルパレード演出が作れます。

  1. 演出用に Phong MAT を 5 つ作成 (5 色のパレット)、すべて Switch MAT の入力 0~4 に接続
  2. LFO CHOP を配置し、TypeRamp (ノコギリ波)、周期を 5 秒程度に設定
  3. Math CHOP を後段に挿入し、Multiply で 5 倍 + From Range / To Range0~4 の整数範囲に変換
  4. Switch MAT の index パラメータを Export CHOPmath1/chan1 に割当、さらに extendLoop に設定して安全側に倒す
  5. 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 にエクスポートすれば、インスタンス毎にマテリアルが切替えられます。

  1. Replicator COMP のテンプレート COMP 内に Switch MAT を配置し、3 つのバリエーション MAT を入力 0, 1, 2 に接続
  2. Replicator COMP の Master Template にこのテンプレート COMP を指定し、複製数 (例: N=6) を設定
  3. テンプレート COMP 内の Switch MAT の index パラメータを Replicator から渡される連番 (例: me.digits % 3) に設定
  4. extendLoop に設定すると 3 種類のマテリアルがインスタンス間で巡回適用される
  5. 各インスタンスの 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 COMPMaterial パラメータに Switch MAT のパスを指定する代表的な下流 COMP
  • Replicator COMP — 複製インスタンスごとに digits を Switch MAT の index へ渡すことでインスタンス毎マテリアル切替を実現

前処理・後処理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 COMPMaterial パラメータが正しく 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 DataFrom 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 FaceBoth Faces になっていないかも確認 (両面カリング = 何も描画されない)

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました