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

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

Math Mix POP の属性ブレンド機能を示す図

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

概要 📖 – 属性同士を式でブレンド

Math Mix POPは、1 つのノード内で複数入力の属性同士を 70 種類以上の数学演算で合成・ブレンドする POPです。Math Combine POP の簡易版として位置付けられ、Combine ページの各シーケンシャルブロックで A・B・C 3 つのオペランドに対して加算・乗算・mix・clamp・smoothstep などの演算をひとつずつ適用できます。

主な用途 🎯

  • 2 つ以上の入力ジオメトリの属性を 1 行の式で合成 (A + B, mix(A,B,C) 等)
  • ポイント位置 (P) や色 (Cd) のブレンドによる形状・色のモーフィング
  • 三角関数・指数・対数など 70 種以上の数学演算をシーケンシャルに連結
  • 定数や Uniform 値と属性を混ぜて、シェーダ用カスタム属性を生成
  • 条件分岐 (if-else) や clamp / smoothstep / mix によるアニメーション補間

データフロー 🔄

入力: 複数の POP ジオメトリ (属性付き)

Combine ページの式 (A 演算 B 演算 C) を順次評価

出力: Result Scope で指定した属性に演算結果を書き込んだジオメトリ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Inputs Page 📥

長さ不一致処理 .lengthmismatchnotif ⚠️

複数入力の属性配列長が異なる場合の通知と取扱い

Length Mismatch .lengthmismatchnotif ⚠️
Length Mismatch (長さ不一致通知) — 複数入力の属性配列長が一致しない場合に出すエラー・警告レベルを指定します。

Length Mismatch Action .lengthmismatchaction 🛠️
Length Mismatch Action (長さ不一致時の動作) — 入力範囲を超えてサンプリングしたとき、どの属性値を採用するかを決めます。

グループ指定 .group 🗂️

演算対象を入力グループに絞り込む

Group .group 🗂️
Group (グループ名) — 入力にグループがあるとき、ここで名前を指定するとそのグループ内の要素のみに演算が適用されます。空欄なら全体に適用。

角度単位 .angleunit 📐

三角関数や角度パラメータの単位を選択

項目 内部名 説明
Degrees .deg 度単位 (0〜360 で 1 回転)
Radians .rad ラジアン単位 (0〜2π で 1 回転)
Cycles .cycle サイクル単位 (0〜1 で 1 回転)

入力シーケンス .input 🔗

Math Mix に接続する追加入力 POP をシーケンシャルブロックで定義

Input .input 🔗
Input (入力ブロック) — Math Mix に接続する入力 POP を管理するシーケンシャルパラメータブロックの先頭。複数入力時は属性名が in1_Tex などのように自動で名前空間化されます。

In POP .input0pop 📥
In POP (入力 POP パス) — このブロックで参照する入力 POP のパスを指定します。

属性クラス .attrclass 🧱

演算対象とする属性の所属クラス (点・頂点・面) を指定

項目 内部名 説明
Point .point ポイント属性 (位置 P や色 Cd 等、頂点共有データ) を対象に演算
Vertex .vertex 頂点属性 (Tex 等、プリミティブ別に持つデータ) を対象に演算
Primitive .primitive プリミティブ属性 (面単位で持つ法線や色 等) を対象に演算

Uniforms Page 🎚️

ベクトル Uniform .vec 🎚️

Combine ページで参照できる定数ベクトル変数を定義

Vector .vec 🎚️
Vector (ベクトル Uniform ブロック) — Combine ページで A / B / C オペランドとして参照できる定数ベクトルを定義するシーケンシャルブロックの先頭。

Name .vec0name 🏷️
Name (Uniform 名) — 定義するベクトル Uniform の名前。Combine ページの Scope A/B/C メニューに表示されます。

Uniform 型 .vec0type 🔢

Uniform のデータ型とコンポーネント数を指定

項目 内部名 説明
float .float 単精度浮動小数点 (1 成分)
float2 .float2 単精度浮動小数点 (2 成分、例 UV)
float3 .float3 単精度浮動小数点 (3 成分、例 XYZ / RGB)
float4 .float4 単精度浮動小数点 (4 成分、例 RGBA)
double .double 倍精度浮動小数点 (1 成分)
double2 .double2 倍精度浮動小数点 (2 成分)
double3 .double3 倍精度浮動小数点 (3 成分)
double4 .double4 倍精度浮動小数点 (4 成分)
int .int 符号付き整数 (1 成分)
int2 .int2 符号付き整数 (2 成分)
int3 .int3 符号付き整数 (3 成分)
int4 .int4 符号付き整数 (4 成分)
uint .uint 符号なし整数 (1 成分)
uint2 .uint2 符号なし整数 (2 成分)
uint3 .uint3 符号なし整数 (3 成分)
uint4 .uint4 符号なし整数 (4 成分)

Uniform 値 .vec0value 🔢

ベクトル Uniform の実際の値

Value .vec0value 🔢
Value (ベクトル値) — Type で指定したコンポーネント数分の値を入力します。

色 Uniform .color 🎨

色専用の Uniform を定義し、色空間変換に対応

Pre-Multiply RGB by Alpha .premultcolor 🌗
Pre-Multiply RGB by Alpha (アルファ事前乗算) — オンにすると RGB 値にアルファ値を事前乗算してから演算に使います。

Color .color 🎨
Color (色 Uniform ブロック) — 色空間変換を考慮した色 Uniform を定義するシーケンシャルブロックの先頭。

Name .color0name 🏷️
Name (色 Uniform 名) — 定義する色 Uniform の名前。

RGB .color0rgb 🎨
RGB (RGB 値) — 色の赤・緑・青成分の値。

Alpha .color0alpha 🔅
Alpha (アルファ値) — 色の透明度成分の値。


Combine Page 🧮

演算ブロック .comb 🧮

Combine ページの各ブロックで 1 つの演算を定義。複数ブロックは順次評価される

Combine .comb 🧮
Combine (演算ブロック) — Math Mix の Combine ページに追加される 1 つの演算を表すシーケンシャルブロックの先頭。70 種類以上の演算から 1 つを選び、A・B・C の 3 オペランドに適用します。

演算選択 .comb0oper 🔣

1 オペランド・2 オペランド・3 オペランドの数学演算を 70 種以上から選択

項目 内部名 説明
None .none 演算を適用しない (素通し)
A .copya オペランド A をそのまま出力
abs(A) .abs 絶対値
sign(A) .sign 符号 (-1 / 0 / 1)
sqrt(A) .sqrt 平方根
A * A .square 2 乗
1 / A .inverse 逆数
floor(A) .floor 切り捨て (床関数)
round(A) .round 四捨五入
ceil(A) .ceil 切り上げ (天井関数)
int(A) .int 整数化
fract(A) .fract 小数部分のみ
normalize(A) .normalize ベクトルを単位長に正規化
exp10(A) .exp10 10 の A 乗
exp2(A) .exp2 2 の A 乗
exp(A) .exp 自然対数の底 e の A 乗
log10(A) .log10 常用対数 (底 10)
log2(A) .log2 2 を底とする対数
ln(A) .ln 自然対数 (底 e)
sin(A) .sin 正弦 (Angle Units 設定に従う)
cos(A) .cos 余弦
tan(A) .tan 正接
asin(A) .asin 逆正弦
acos(A) .acos 逆余弦
atan(A) .atan 逆正接
degrees(A) .degrees ラジアン → 度 変換
radians(A) .radians 度 → ラジアン 変換
length(A) .length ベクトル長 (ノルム)
compadd(A) .compadd 全成分の合計
compsub(A) .compsub 全成分の差分
compmult(A) .compmult 全成分の積
compdiv(A) .compdiv 全成分の除算
compavg(A) .compavg 全成分の平均
compmin(A) .compmin 全成分の最小値
compmax(A) .compmax 全成分の最大値
A + B .add 加算
A – B .asubb 減算 (A – B)
B – A .bsuba 減算 (B – A)
A * B .mult 乗算
A / B .adivb 除算 (A / B)
B / A .bdiva 除算 (B / A)
A ** B .apowerb べき乗 (A の B 乗)
logB(A) .logba B を底とする A の対数
avg(A, B) .avg A と B の平均
min(A, B) .min A と B の小さい方
max(A, B) .max A と B の大きい方
mod(A, B) .mod A を B で割った余り
int(A / B) .intadivb A / B の整数部分
A > B .gt A が B より大きいなら 1、そうでなければ 0
A >= B .gte A が B 以上なら 1、そうでなければ 0
A < B .lt A が B より小さいなら 1、そうでなければ 0
A <= B .lte A が B 以下なら 1、そうでなければ 0
A == B .eq A と B が等しいなら 1、そうでなければ 0
A != B .ne A と B が等しくないなら 1、そうでなければ 0
atan2(A, B) .atan2 2 引数版 atan (象限を考慮した逆正接)
dot(A, B) .dot ベクトル内積
angle(A, B) .angle 2 ベクトル間の角度
cross(A, B) .cross 3 次元ベクトル外積
reflect(A, B) .reflect B を法線として A を反射
A + B * C .aaddbmultc A に B × C を加算 (積和演算)
A * B + C .amultbaddc A × B に C を加算 (積和演算の別形)
A + B + C .aaddbaddc 3 値の和
A * B * C .amultbmultc 3 値の積
rangefrom(A, B, C) .rangefrom 範囲 [B, C] にある A を [0, 1] に正規化
rangeto(A, B, C) .rangeto [0, 1] にある A を [B, C] にスケール
mix(A, B, C) .mix A と B を係数 C で線形補間
A if C else B .ifelse C が真なら A、偽なら B を返す条件分岐
loop(A, B, C) .loop A を [B, C] の範囲で循環させる
zigzag(A, B, C) .zigzag A を [B, C] の範囲で往復させる (三角波)
clamp(A, B, C) .clamp A を [B, C] の範囲に制限
smoothstep(A, B, C) .smoothstep [A, B] を境界とする滑らかな補間値を C から算出
refract(A, B, C) .refract B を法線、C を屈折率比として A を屈折
dbtopow(A) .dbtopow デシベル → パワー値 変換
powtodb(A) .powtodb パワー値 → デシベル 変換
dbtoamp(A) .dbtoamp デシベル → 振幅 変換
amptodb(A) .amptodb 振幅 → デシベル 変換
RGBtoHSV(A) .rgbtohsv RGB 色を HSV 色空間に変換
HSVtoRGB(A) .hsvtorgb HSV 色を RGB 色空間に変換

オペランドスコープ 🎯

演算オペランド A / B / C にどの属性 (または定数・Uniform) を割り当てるかを指定

Scope A .comb0scopea 🅰️
Scope A (オペランド A) — A に割り当てる属性名 (例 P) ・コンポーネント (例 P(0)) ・定数 (例 0.5) ・Uniform 名のいずれかを指定。

Scope B .comb0scopeb 🅱️
Scope B (オペランド B) — 2 引数以上の演算でのみ参照される B オペランドの指定。同様に属性 / 定数 / Uniform を選択可能。

Scope C .comb0scopec 🇨
Scope C (オペランド C) — 3 引数演算 (mix / clamp / smoothstep 等) でのみ参照される C オペランドの指定。

結果スコープ .comb0result 📤

演算結果の書き出し先となる出力属性を指定

項目 内部名 説明
Color .Color 色属性 (RGBA 4 成分) に出力
Color.rgb .Color.rgb 色属性の RGB 3 成分のみ (アルファ除外) に出力
N .N 法線属性 (3 成分 float) に出力
Tex .Tex テクスチャ座標 (UV) に出力

Output Page 📤

属性の整理 🧹

Math Mix 内で生成された一時属性の出力可否を制御

Delete Attributes .delattrs 🗑️
Delete Attributes (削除属性パターン) — 出力から取り除きたい属性名のパターンを指定します。例: tmp* in1_*

Delete New Attributes .delnewattrs 🆕
Delete New Attributes (新規属性削除) — オンにすると、この 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) を指定。指定外の属性は破棄される
  • 用途: 下流で不要な属性を切り落として分岐ブランチを軽量化、メモリ・帯域を節約

Parameter Color Space .parmcolorspace 🎨

色パラメータの色空間を解釈・Working Color Space に変換する方式

項目 内部名 説明
sRGB .srgb 標準 sRGB ガンマ
sRGB – Linear .srgblinear リニア化された sRGB
Rec.601 (NTSC) .rec601 NTSC SD ビデオ用色空間
Rec.709 .rec709 HD ビデオ用色空間
Rec.2020 .rec2020 UHD / 4K HDR ビデオ用色空間
DCI-P3 .dcip3 デジタルシネマ用色空間
DCI-P3 (D60) .dcip3d60 D60 白色点の DCI-P3
Display-P3 (D65) .displayp3 Apple Display P3 (D65 白色点)
ACES2065-1 .aces2065 ACES 標準 (AP0 プライマリ)
ACEScg .acescg ACES CG 用 (AP1 プライマリ)
Passthrough .passthrough 色空間変換せず値をそのまま使用

Parameter Reference White .parmreferencewhite

色パラメータの基準白色点 (Reference White) の扱い

項目 内部名 説明
Default For Color Space .default 選択した色空間のデフォルト基準白を使用
Use Parent Panel .useparent 親パネルの基準白設定を継承
Standard (SDR) .sdr SDR (標準ダイナミックレンジ) 基準白
High (HDR) .hdr HDR (ハイダイナミックレンジ) 基準白
UI .ui UI 設定値を使用

実践アイデア 💡

Example 1: 2 つの形状を係数でブレンド 🔀

Box POP + Sphere POP → Math Mix POP (mix(A,B,C) on P) → Render TOP

立方体と球体の頂点位置を Math Mix POP の mix(A, B, C) 演算で線形補間し、係数 C を時間で変化させて形状モーフィングを実現する基本パターン。VJ 演出やトランジションで頻出のフロー。

  1. Box POP を input1、Sphere POP を input2 として接続
  2. Combine ページで Operation を mix(A, B, C)、Scope A に P、Scope B に in1_P、Scope C に補間係数 (定数または Uniform) を設定
  3. Result Scope を P に指定し、結果ポイント位置を上書き
  4. C の値を CHOP 等から時間変化させて 0 → 1 で形状を切替

Example 2: 色と法線を同時にブレンド 🎨

Two Sources → Math Mix POP (2 つの Combine ブロック: Cd / N) → Render TOP

1 つの Math Mix POP で Cd (色) と N (法線) を同時に別々の係数でブレンドする例。1 つの Combine ページに 2 つの演算ブロックを並べることで、複数属性の一括処理を 1 ノードで完結させる。

  1. Combine ブロック 1: Operation = mix(A,B,C)、Scope A = Cd、Scope B = in1_Cd、Scope C = 0.3、Result Scope = Cd
  2. Combine ブロック 2: Operation = mix(A,B,C)、Scope A = N、Scope B = in1_N、Scope C = 0.5、Result Scope = N
  3. Output ページの Delete New Attributes はオフのまま、両属性を維持して下流に流す

Example 3: 条件分岐で属性を切替 🔧

Input POP → Math Mix POP (A if C else B on Cd) → Render TOP

A if C else B 演算で、条件 C が真かどうかでオペランド A と B のいずれかを採用する三項演算的な使い方。たとえば点の Y 座標が一定値を超えたら色を A、そうでなければ B に切替える演出に応用できる。

  1. Combine ブロックの Operation を A if C else B に設定
  2. Scope A に強調色 (Color Uniform で定義した赤など)、Scope B に通常色を指定
  3. Scope C に判定式 (例 P(1) でポイントの Y 座標) を指定し、0 以外で A、0 で B が選ばれる
  4. Result Scope を Cd に指定して色を上書き

関連オペレータ 🔗

類似機能OP 🔍

  • Math Combine POP — より複雑な属性合成に対応した上位版
  • Math POP — 単一入力に対する加算・乗算・関数変換に特化
  • Lookup Attribute POP — 別属性をキーにテーブル参照で値変換

組み合わせ推奨OP 🔄

  • Attribute POP — 新規属性を追加してから Math Mix で値を計算
  • Attribute Combine POP — 複数属性を 1 つに結合した後 Math Mix で再計算
  • Attribute Convert POP — 属性クラス (点 / 頂点 / 面) を変換した後 Math Mix で合成
  • Noise POP — ノイズで生成した値を Math Mix で他属性と合成
  • Math CHOP — チャンネル側の数学演算と組み合わせて GPU/CPU を跨いだ制御

前処理・後処理POP 🎯


Info情報 📊

POP ファミリには専用の Info OP が存在しません。Math Mix POP の出力情報は下流の Null POP で値を確認したり、Python から POP クラスメンバーで取得します。

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: 演算結果が出力に反映されない
✅ Solution:

  • Attribute Class が対象属性のクラス (Point / Vertex / Primitive) と一致しているか確認
  • Result Scope に書き出し先属性名 (例 CdP) が指定されているか確認
  • 上流に同名属性が存在しない場合は Attribute POP で先に属性を追加

❌ Problem: 複数入力で属性名がぶつかる / 見つからない
✅ Solution:

  • Math Mix は 2 番目以降の入力属性に自動で in1_ / in2_ プレフィックスを付ける仕様を理解する
  • Scope A / B / C で in1_Tex のように接頭辞付きで指定
  • 属性メニュー (Scope 欄の右端) から接頭辞付き候補を直接選択

❌ Problem: 3 引数演算 (mix / clamp / smoothstep) の結果がおかしい
✅ Solution:

  • Scope C の値域が想定通りか (mix なら 0〜1 の補間係数) を確認
  • Angle Units 設定が三角関数の入力単位と合っているか確認
  • オペランドのコンポーネント数が揃っているか (例 vec3 と vec4 を混在させていないか) 確認

❌ Problem: 入力配列長の不一致でエラーが出る
✅ Solution:

  • Length Mismatch 通知レベルを Warning に下げて挙動を観察
  • Length Mismatch Action で範囲外サンプリング時の値の扱いを変更
  • 前段で Limit POP や Cache POP を使い両入力の要素数を揃える

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました