
概要 📖 – 属性を演算で合成・変換
Math Combine POPは、Pre/Combine/Post の 3 段パイプラインで複数 POP 入力の属性に算術演算を適用して合成する POPです。Combine ページの Operation メニューで二項・三項演算を選択し、Pre/Post 段で前後処理 (リマップ・量子化・型キャスト等) を加えることで、複雑な属性合成や数式変換を 1 ノードで完結します。
主な用途 🎯
- 複数 POP 入力の属性に算術演算 (加算・乗算・比較・三角関数等) を一括適用
- Pre → Combine → Post の 3 段パイプラインで前処理・本演算・後処理を制御
- シーケンシャル入力ブロックで多数の POP を演算的に統合
- 演算結果を Result Scope で新規属性または既存属性に書き戻し
- Uniform / Color 変数や Custom Attribute を演算式の入力として利用
データフロー 🔄
入力: 複数 POP の属性
↓
Pre 処理 (Multiply / Add / Operation)
↓
Combine 演算 (A・B・C を二項/三項演算で結合)
↓
Post 処理 (リマップ・量子化・型キャスト)
↓
出力: 演算結果を持つジオメトリ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Inputs Page 📋
Attribute Class .attrclass 🎛️
演算対象とする属性クラスを選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Attribute Class | .attrclass |
Attribute Class (属性クラス) — Math Combine POP が演算対象とする属性のクラス (ポイント / 頂点 / プリミティブ) を切替えるメニュー |
Length Mismatch .lengthmismatchnotif ⚠️
複数入力の要素数が異なる場合の通知方法を決めるメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Length Mismatch | .lengthmismatchnotif |
Length Mismatch (長さ不一致通知) — 入力 POP 間でポイント数が異なる場合の通知レベルを指定する |
| Length Mismatch Action | .lengthmismatchaction |
Length Mismatch Action (長さ不一致時の動作) — 短い入力に対し、範囲外サンプル位置でどの属性値を採用するかを指定 |
Group .group 👥
Group .group 👥
– Group (グループ) — 入力にグループが設定されている場合、ここでグループ名を指定すると Math Combine POP は指定グループの要素のみに演算を適用
– 空欄時は入力全体が演算対象になる
Angle Units .angleunit 📐
sin(A) や atan2(A, B) 等の三角関数で使う角度単位を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Degrees | .deg |
角度を度 (0-360 が 1 回転) として解釈 |
| Radians | .rad |
角度をラジアン (0-2π が 1 回転) として解釈 |
| Cycles | .cycle |
角度をサイクル (0-1 が 1 回転) として解釈 |
Sequential Input Blocks .input 🧩
Input .input 🧩
– Input (入力ブロック) — POP 入力を 1 ブロック単位で管理するシーケンシャルパラメータブロックの起点
– ブロック数を増減することで複数 POP を順序付きで束ねる
In POP(s) .input0pop 🔌
– In POP(s) (入力 POP パス) — 現在のシーケンスブロックに対応する入力 POP のパスを指定
– ワイヤー接続またはパターンマッチング (例 geo*) で複数 POP を 1 ブロックにまとめて指定可能
In Attributes .input0attrs 🔤
– In Attributes (取得属性パターン) — 現在のシーケンスブロックから取り出す属性名のパターン (デフォルト * で全属性)
– P N や Cd* のようにスペース区切り・ワイルドカードで複数属性を指定可能
Rename to .input0renameto 🏷️
– Rename to (リネーム) — In Attributes で取り出した属性を出力時にリネームするパターン
– 衝突回避や演算式での参照名整理のために属性名を書き換える用途で使用
Uniforms Page 🔌
Vector Uniform .vec 📐
演算式から参照する Vector 型の Uniform 変数を定義するシーケンシャルブロック
Vector .vec 📐
– Vector (ベクトル定義) — Vector 型 Uniform 変数を 1 ブロック単位で定義するシーケンシャルパラメータブロックの起点
Name .vec0name 🏷️
– Name (名前) — Uniform 変数の参照名。Combine 演算式から $名前 等で参照
Vector Type .vec0type 🧮
Vector Uniform の成分数と数値型を選択するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| float | .float |
32bit 浮動小数 1 成分 |
| float2 | .float2 |
32bit 浮動小数 2 成分 |
| float3 | .float3 |
32bit 浮動小数 3 成分 |
| float4 | .float4 |
32bit 浮動小数 4 成分 |
| double | .double |
64bit 浮動小数 1 成分 |
| double2 | .double2 |
64bit 浮動小数 2 成分 |
| double3 | .double3 |
64bit 浮動小数 3 成分 |
| double4 | .double4 |
64bit 浮動小数 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 成分 |
Vector Value .vec0value 🔢
Value .vec0value 🔢
– Value (ベクトル値) — Vector Uniform の成分ごとの値 (最大 4 成分)
– Type で選んだ成分数だけが有効化される
Color Uniform .color 🎨
Pre-Multiply RGB by Alpha .premultcolor ✖️
– Pre-Multiply RGB by Alpha (RGB を Alpha で乗算) — Color Uniform の RGB 値を Alpha で事前乗算するか否かのトグル
– Premultiplied alpha フォーマットの素材を正しく扱う場合にオン
Color .color 🎨
– Color (カラー定義) — Color 型 Uniform 変数を 1 ブロック単位で定義するシーケンシャルパラメータブロックの起点
Name .color0name 🏷️
– Name (名前) — Color Uniform の参照名。Combine 演算式から参照する識別子
RGB .color0rgb 🌈
– RGB (RGB 値) — Color Uniform の赤・緑・青 3 成分
Alpha .color0alpha 🪟
– Alpha (アルファ) — Color Uniform のアルファ成分 (透明度)
New Page ✨
New Attribute .attr ✨
演算結果を書き込むための新規属性を定義するシーケンシャルブロック
New Attribute .attr ✨
– New Attribute (新規属性) — 演算結果出力用の新しい属性を 1 ブロック単位で定義するシーケンシャルパラメータブロックの起点
Name .attr0name 🏷️
– Name (名前) — 既定属性 (P / N / Cd 等) を選択するか、Custom Name でカスタム属性名を指定するメニュー
Type .attr0type 🧮
– Type (型) — 属性の数値型 (float / int 等) を選択するメニュー
– Components (成分数) でカスタム属性の成分数 (1〜4) を指定
Default Value .attr0defaultval 🛟
– Default Value (既定値) — 演算で値が計算できなかった場合に新規属性に書き込むフォールバック値
– 成分数に応じて 1〜4 要素まで指定可能
Pre Page ⚡
Pre Sequence .pre ⚡
Combine 演算の前段に適用する単項演算 (Multiply / Add / Operation) を定義するシーケンシャルブロック
Pre .pre ⚡
– Pre (前処理ブロック) — Combine 演算前に適用する単項処理を 1 ブロック単位で管理するシーケンシャルパラメータブロックの起点
Scope .pre0scope 🎯
– Scope (適用範囲) — Pre 演算を適用する属性スコープ (例 Cd や Cd.r)
Multiply .pre0mult ✖️
– Multiply (乗算) — 入力属性値に掛ける係数
– 単純なスケーリングや符号反転に使用
Add .pre0add ➕
– Add (加算) — 入力属性値に加える定数
– オフセット付与に使用
Pre Parameter Size .pre0parsize 📏
Pre 演算で独立して設定できるパラメータ成分数を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| 1 | .1 |
1 成分のみ独立設定 |
| 2 | .2 |
2 成分まで独立設定 |
| 3 | .3 |
3 成分まで独立設定 |
| 4 | .4 |
4 成分まで独立設定 |
Pre Order .pre0order 🔢
Pre 段における Multiply / Add / Operation の適用順序を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Multiply, Add, Operation | .multaddop |
Multiply → Add → Operation の順で適用 |
| Add, Multiply, Operation | .addmultop |
Add → Multiply → Operation の順で適用 |
| Operation, Multiply, Add | .opmultadd |
Operation → Multiply → Add の順で適用 |
| Operation, Add, Multiply | .opaddmult |
Operation → Add → Multiply の順で適用 |
Pre Operation .pre0oper 🧮
Pre 段で適用する単項演算 (1 つの値に対する関数) を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
演算なし (恒等) |
| 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 |
小数部のみ取得 |
| degrees(A) | .degrees |
ラジアン→度 変換 |
| radians(A) | .radians |
度→ラジアン 変換 |
| normalize(A) | .normalize |
ベクトル正規化 (長さ 1) |
| exp10(A) | .exp10 |
10 の A 乗 |
| exp2(A) | .exp2 |
2 の A 乗 |
| exp(A) | .exp |
e の A 乗 (自然指数) |
| log10(A) | .log10 |
常用対数 |
| log2(A) | .log2 |
2 を底とする対数 |
| ln(A) | .ln |
自然対数 |
| sin(A) | .sin |
サイン (正弦) |
| cos(A) | .cos |
コサイン (余弦) |
| tan(A) | .tan |
タンジェント (正接) |
| asin(A) | .asin |
アークサイン (逆正弦) |
| acos(A) | .acos |
アークコサイン (逆余弦) |
| atan(A) | .atan |
アークタンジェント (逆正接) |
| dbtopow(A) | .dbtopow |
デシベル→パワー 変換 |
| powtodb(A) | .powtodb |
パワー→デシベル 変換 |
| dbtoamp(A) | .dbtoamp |
デシベル→振幅 変換 |
| amptodb(A) | .amptodb |
振幅→デシベル 変換 |
Pre Quantize .pre0quantize 📊
Pre 演算結果を離散値に量子化する方法を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
量子化なし (連続値のまま) |
| floor(A) | .floor |
切り捨て量子化 |
| round(A) | .round |
四捨五入量子化 |
| ceil(A) | .ceiling |
切り上げ量子化 |
| A > 0 | .gt0 |
正なら 1、それ以外 0 (二値化) |
| A >= 0 | .gteq0 |
0 以上なら 1、それ以外 0 |
| A == 0 | .eq0 |
0 と一致なら 1、それ以外 0 |
| A != 0 | .neq0 |
0 と不一致なら 1、それ以外 0 |
| A <= 0 | .lteq0 |
0 以下なら 1、それ以外 0 |
| A < 0 | .lt0 |
負なら 1、それ以外 0 |
Pre Result Scope .pre0resultscope 🎯
Pre 演算結果を書き込む出力属性スコープを選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Color | .Color |
Color 属性 (4 成分) に書込み |
| Color.rgb | .Color.rgb |
Color の RGB 部のみに書込み |
| N | .N |
Normal 属性に書込み |
| Tex | .Tex |
テクスチャ座標属性に書込み |
Combine Page 🔀
Combine Sequence .comb 🔀
Combine 演算の本体ブロックを定義するシーケンシャルブロック
Combine .comb 🔀
– Combine (合成ブロック) — 1 段の Combine 演算を管理するシーケンシャルパラメータブロックの起点
– ブロックを追加して段階的に演算を積み重ねることが可能
Scope A .comb0scopea 🅰️
– Scope A (オペランド A) — 演算で「A」として扱う属性のスコープ
Scope B .comb0scopeb 🅱️
– Scope B (オペランド B) — 二項以上の演算で「B」として扱う属性のスコープ
Scope C .comb0scopec Ⓒ
– Scope C (オペランド C) — 三項演算で「C」として扱う属性のスコープ
Combine Operation .comb0oper 🧮
Combine 段で適用する単項・二項・三項演算を選択するメインメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
演算なし |
| A | .copya |
A をそのまま出力 (コピー) |
| abs(A) | .abs |
A の絶対値 |
| sign(A) | .sign |
A の符号 |
| sqrt(A) | .sqrt |
A の平方根 |
| A * A | .square |
A の 2 乗 |
| 1 / A | .inverse |
A の逆数 |
| floor(A) | .floor |
A の切り捨て |
| round(A) | .round |
A の四捨五入 |
| ceil(A) | .ceil |
A の切り上げ |
| int(A) | .int |
A の整数キャスト |
| fract(A) | .fract |
A の小数部 |
| normalize(A) | .normalize |
A の正規化 (長さ 1) |
| exp10(A) | .exp10 |
10 の A 乗 |
| exp2(A) | .exp2 |
2 の A 乗 |
| exp(A) | .exp |
e の A 乗 |
| log10(A) | .log10 |
A の常用対数 |
| log2(A) | .log2 |
A の 2 進対数 |
| ln(A) | .ln |
A の自然対数 |
| sin(A) | .sin |
A のサイン |
| cos(A) | .cos |
A のコサイン |
| tan(A) | .tan |
A のタンジェント |
| asin(A) | .asin |
A のアークサイン |
| acos(A) | .acos |
A のアークコサイン |
| atan(A) | .atan |
A のアークタンジェント |
| degrees(A) | .degrees |
A をラジアン→度 変換 |
| radians(A) | .radians |
A を度→ラジアン 変換 |
| length(A) | .length |
A の長さ (ベクトル長) |
| compadd(A) | .compadd |
A の成分の和 |
| compsub(A) | .compsub |
A の成分の差 |
| compmult(A) | .compmult |
A の成分の積 |
| compdiv(A) | .compdiv |
A の成分の商 |
| compavg(A) | .compavg |
A の成分の平均 |
| compmin(A) | .compmin |
A の成分の最小 |
| compmax(A) | .compmax |
A の成分の最大 |
| A + B | .add |
A と B の和 |
| A – B | .asubb |
A から B を減算 |
| B – A | .bsuba |
B から A を減算 |
| A * B | .mult |
A と B の積 |
| 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 |
atan2 関数 (4 象限アークタンジェント) |
| dot(A, B) | .dot |
ベクトル内積 |
| angle(A, B) | .angle |
ベクトル間の角度 |
| cross(A, B) | .cross |
ベクトル外積 |
| reflect(A, B) | .reflect |
B を法線とする A の反射ベクトル |
| A + B * C | .aaddbmultc |
A + (B × C) |
| A * B + C | .amultbaddc |
(A × B) + C |
| A + B + C | .aaddbaddc |
A + B + C |
| A * B * C | .amultbmultc |
A × B × C |
| rangefrom(A, B, C) | .rangefrom |
A を [B, C] の範囲基準でリマップ元として扱う |
| rangeto(A, B, C) | .rangeto |
A を [B, C] の範囲にリマップ |
| mix(A, B, C) | .mix |
C を比率に A と B を線形補間 |
| 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 |
[B, C] の範囲で C を入力に滑らかな補間 |
| B <= A < C | .bltealtc |
B 以上 C 未満なら 1、それ以外 0 |
| B < A <= C | .bltaltec |
B 超過 C 以下なら 1、それ以外 0 |
| B < A < C | .bltaltc |
B 超過 C 未満なら 1、それ以外 0 |
| B <= A <= C | .bleealetec |
B 以上 C 以下なら 1、それ以外 0 |
| refract(A, B, C) | .refract |
屈折ベクトル (A 入射、B 法線、C は屈折率) |
Combine Result Scope .comb0result 🎯
Combine 演算結果を書き込む出力属性スコープを選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Color | .Color |
Color 属性に書込み |
| Color.rgb | .Color.rgb |
Color の RGB 部のみに書込み |
| N | .N |
Normal 属性に書込み |
| Tex | .Tex |
テクスチャ座標属性に書込み |
Post Page 🔧
Post Sequence .post 🔧
Combine 演算後に適用する後処理 (リマップ / 量子化 / 型キャスト) を定義するシーケンシャルブロック
Post .post 🔧
– Post (後処理ブロック) — Combine 演算後に適用する後処理を 1 ブロック単位で管理するシーケンシャルパラメータブロックの起点
Scope .post0scope 🎯
– Scope (適用範囲) — Post 演算を適用する属性スコープ
Map from Low / High / Map to Low / High .post0fromlow 📏
– Map from Low / Map from High — リマップの入力範囲を指定
– Map to Low / Map to High — リマップ後の出力範囲を指定
– 4 値を組み合わせて値域変換 (例: 0–1 → 0–255) を実装
Post Parameter Size .post0parsize 📏
Post 段で独立して設定するパラメータ成分数を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| 1 | .1 |
1 成分のみ独立設定 |
| 2 | .2 |
2 成分まで独立設定 |
| 3 | .3 |
3 成分まで独立設定 |
| 4 | .4 |
4 成分まで独立設定 |
Post Quantize .post0quantize 📊
Post 演算結果を離散値に量子化する方法を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
量子化なし |
| floor(A) | .floor |
切り捨て量子化 |
| round(A) | .round |
四捨五入量子化 |
| ceil(A) | .ceiling |
切り上げ量子化 |
| A > 0 | .gt0 |
正なら 1、それ以外 0 |
| A >= 0 | .gteq0 |
0 以上なら 1、それ以外 0 |
| A == 0 | .eq0 |
0 と一致なら 1、それ以外 0 |
| A != 0 | .neq0 |
0 と不一致なら 1、それ以外 0 |
| A <= 0 | .lteq0 |
0 以下なら 1、それ以外 0 |
| A < 0 | .lt0 |
負なら 1、それ以外 0 |
Post Cast to .post0castto 🧱
Post 演算結果出力属性の数値型を上書きするメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Automatic | .auto |
出力属性の元の型を維持 |
| Float | .float |
浮動小数として書込み |
| Int | .int |
整数として書込み |
Post Result Scope .post0result 🎯
Post 演算結果を書き込む出力属性スコープを選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Color | .Color |
Color 属性に書込み |
| Color.rgb | .Color.rgb |
Color の RGB 部のみに書込み |
| N | .N |
Normal 属性に書込み |
| Tex | .Tex |
テクスチャ座標属性に書込み |
Output Page 📤
Delete Attributes .delattrs 🗑️
Delete Attributes .delattrs 🗑️
– Delete Attributes (削除する属性) — 出力から取り除きたい属性のパターン
– パターンマッチで複数属性を一括削除可能 (例 tmp*)
Delete New Attributes .delnewattrs 🧹
Delete New Attributes .delnewattrs 🧹
– Delete New Attributes (新規属性の削除) — Math Combine POP 自身が作成した属性を出力から取り除くかを制御するトグル
– 演算過程で使った中間属性を後段に流したくない場合にオン
Output Secondary Attributes .outputsecondary 🔁
2 番目以降の入力から出力に通過させる属性を選択するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| * | .* |
全属性を 2 番目以降の入力から通過させる (ワイルドカード) |
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: 位置に Noise を加算 🌊
SOP to POP (P) + Noise POP (noise) → Math Combine POP (A = P, B = noise, Operation = A + B, Result Scope = P) → Render TOP
SOP to POP のポイント位置属性 P に、別経路で生成した Noise 属性を加算してジオメトリ全体を揺らす基本フロー。Combine Operation を A + B に設定し、Scope A に P、Scope B に noise を指定して結果を P に書き戻すことで、後段のレンダラに揺らされた形状を渡せます。
- SOP to POP を input0 ブロックに接続
- Noise POP を input1 ブロックに接続し、In Attributes を
noiseに絞る - Combine ブロックで Scope A =
P、Scope B =noiseを指定 - Combine Operation を
A + Bに設定 - Combine Result Scope を
P相当 (or new attribute) に指定して P を上書き - 出力を Render TOP に渡してレンダラで確認
Example 2: 色を 8bit にリマップ 🎨
SOP to POP (Cd) → Math Combine POP (Combine = A, Post: Map from 0-1 → Map to 0-255) → File Out POP
Color 属性 Cd を 0–1 の浮動小数表現から 0–255 の 8bit 整数表現へリマップする後処理フロー。Combine 段では恒等演算 A を選び、Post 段で Map from Low/High と Map to Low/High に [0, 1] と [0, 255] を設定、さらに Cast to を Int に切替えて整数として書き出します。
- SOP to POP の Cd を持つ入力を Math Combine POP に接続
- Combine Operation を
A、Scope A をCdに設定 - Post Scope に
Cdを指定 - Post の Map from Low/High に
0/1を設定 - Post の Map to Low/High に
0/255を設定 - Post Cast to を
Intに変更 - 出力を File Out POP に渡して整数 Cd 値を書き出し
Example 3: しきい値で二値化マスク 🎚️
SOP to POP (height) + 定数値 (threshold) → Math Combine POP (A = height, B = threshold, Operation = A > B, Result Scope = mask) → Lookup Attribute POP
ポイントの高さ属性 height がしきい値を超えるかどうかを 0/1 のマスク属性として生成するパターン。Uniforms Page で Vector Uniform threshold を定義しておき、Combine Operation を A > B に設定すれば、しきい値以上のポイントが 1、それ以外が 0 となる新規属性 mask を演算結果として書き出せます。
- SOP to POP を入力に接続し、In Attributes で
heightを取り込む - Uniforms Page で Vector Uniform
threshold(float) を定義し値を設定 - Combine Scope A を
height、Scope B をthresholdに指定 - Combine Operation を
A > Bに切替 - New Page で新規属性
mask(float 1 成分) を定義し、Combine Result Scope をmaskに指定 - Post Quantize を必要に応じ
round(A)にして二値性を保証 - 出力を Lookup Attribute POP に渡してマスクを後段で利用
関連オペレータ 🔗
類似機能OP 🔍
- Math POP — 単一入力の属性に対する単項演算が中心。Math Combine は複数入力 + 二項/三項演算に拡張した上位機能
- Math Mix POP — 複数入力の属性を Blend / Mix で合成する。Math Combine と同じシーケンシャル入力アーキテクチャ
- Attribute Combine POP — 属性を演算で結合するのではなく、名前パターンで選別 + リネームして統合する POP
- Blend POP — 複数 POP 入力をブレンド比率で混合する。演算ではなく重み付き合成
組み合わせ推奨OP 🔄
- Attribute POP — 前段で属性スキーマや初期値を整えてから Math Combine で演算
- Lookup Attribute POP — Math Combine の演算結果を参照テーブルとして他 POP の属性に流し込む
- Convert POP — 演算結果の属性型を変換して後段に渡す
前処理・後処理POP 🎯
Info POP情報 📊
Math Combine 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: エラー数
POP 汎用情報 📊
num_points: 出力ジオメトリのポイント数num_point_attribs: 出力ジオメトリのポイント属性数 (Math Combine で生成・更新された属性を含む)num_vertex_attribs: 出力ジオメトリの頂点属性数num_prim_attribs: 出力ジオメトリのプリミティブ属性数num_prims: 出力ジオメトリのプリミティブ数gpu_memory_used: この POP が使用している GPU メモリ量
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 演算結果が想定値と一致しない
✅ Solution:
- Combine Operation の式 (A / B / C の対応関係) と Scope A / B / C の指定が想定通りか確認
- Pre 段の Multiply / Add / Operation Order を確認し、意図しない前処理が掛かっていないかチェック
- Angle Units (degrees / radians / cycles) が三角関数系の演算と一致しているか確認
❌ Problem: 演算結果が出力属性に書き込まれない
✅ Solution:
- Combine Result Scope が書込みたい属性 (Color / N / Tex 等) と一致しているか確認
- New Page で新規属性を定義した場合、Type と Components が成分数と整合しているか確認
- Output Page の Delete Attributes / Delete New Attributes パターンで意図せず破棄されていないかを確認
❌ Problem: Length Mismatch で処理が停止する
✅ Solution:
- Length Mismatch を
warningまたはignoreに変更して処理を続行 - Length Mismatch Action で範囲外サンプル位置の値補完方針を明示的に選択
- 前段で Convert POP 等を使って入力 POP の要素数を揃える
❌ Problem: 三角関数 (sin / cos / atan2) の挙動が意図と異なる
✅ Solution:
- Inputs Page の Angle Units が想定単位 (Degrees / Radians / Cycles) と一致しているか確認
- Pre 段の Operation で
degrees(A)/radians(A)を使って単位変換を明示 - 正規化が必要な場合は Combine Operation の
normalize(A)を併用
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Math Combine POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- 属性 (Attribute) の基礎
- Math POP (単項演算が中心の姉妹 POP)

