
概要 📖 – 属性同士を式でブレンド
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 で指定した属性に演算結果を書き込んだジオメトリ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 演出やトランジションで頻出のフロー。
- Box POP を input1、Sphere POP を input2 として接続
- Combine ページで Operation を
mix(A, B, C)、Scope A にP、Scope B にin1_P、Scope C に補間係数 (定数または Uniform) を設定 - Result Scope を
Pに指定し、結果ポイント位置を上書き - 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 ノードで完結させる。
- Combine ブロック 1: Operation =
mix(A,B,C)、Scope A =Cd、Scope B =in1_Cd、Scope C = 0.3、Result Scope =Cd - Combine ブロック 2: Operation =
mix(A,B,C)、Scope A =N、Scope B =in1_N、Scope C = 0.5、Result Scope =N - 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 に切替える演出に応用できる。
- Combine ブロックの Operation を
A if C else Bに設定 - Scope A に強調色 (Color Uniform で定義した赤など)、Scope B に通常色を指定
- Scope C に判定式 (例
P(1)でポイントの Y 座標) を指定し、0 以外で A、0 で B が選ばれる - 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 🎯
- 前処理: In POP、File In POP、Box POP、Particle POP、Attribute POP
- 後処理: Out POP、Limit POP、Normalize POP、Null 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に書き出し先属性名 (例CdやP) が指定されているか確認- 上流に同名属性が存在しない場合は 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 を使い両入力の要素数を揃える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Math Mix POP
- TouchDesigner公式ドキュメント – Math Combine POP (上位版)
- TouchDesigner公式ドキュメント – Points, Vertices and Primitives in POPs

