
概要 📖 – 属性のプレフィックススキャンによる累積計算
Accumulate POPは、ポイント・頂点・プリミティブ属性を順次累積 (プレフィックススキャン) し、各要素までの合計値を新しい属性として出力する POPです。Inclusive Scan / Exclusive Scan の 2 モードを選べ、出力属性のクラス・型・コンポーネント数を細かく制御できます。GPU 並列スキャンで動作するため、大規模ポイント数でも軽量に累積処理を実行できます。
主な用途 🎯
- 位置属性の累積による経路長 (Arc Length) の算出
- ポイント単位インデックス (連番) の生成(定数 1 を累積)
- 重み付きサンプリング用の累積分布関数 (CDF) 構築
- 質量・電荷など物理量のランニング総和の作成
- GPU 並列プレフィックススキャンによる大規模属性集計
データフロー 🔄
入力: POP (任意属性)
↓
Accumulate POP(Inclusive / Exclusive Scan で点列を順次累積)
↓
出力: 累積値を持つ POP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Accumulate Page 📋
対象クラスと入力スコープ 🎯
Attribute Class .attrclass 🎛️
– 累積処理を行う属性のクラスを選択 (point / vertex / primitive)
– 属性の所属クラスにより順次走査される単位 (点・頂点・プリミティブ) が決まる
Input Attribute Scope .inputattrscope 🔍
– 累積対象とする入力属性名のパターン (例: P, Cd, weight)
– コンポーネント指定 (P.x 等) で軸を絞ることも可能
Type .scantype 🔢
プレフィックススキャンの方式選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| Inclusive Scan | .inclusive |
現在の点を含めた累積。出力[i] = 入力[0] + 入力[1] + … + 入力[i] |
| Exclusive Scan | .exclusive |
現在の点を除いた累積。出力[i] = 入力[0] + … + 入力[i-1] (i=0 ではデフォルト値) |
Output Attribute Scope .outputattrscope 📤
累積結果を書き出す属性名 (メニューから定番名を選択、または Custom を直接入力)
| 項目 | 内部名 | 説明 |
|---|---|---|
| P | .P |
ポイント位置属性として出力 (累積位置・経路追跡用) |
| N | .N |
法線属性として出力 |
| Color | .Color |
RGBA カラー属性として出力 |
| Color.rgb | .Color.rgb |
RGB のみのカラー属性として出力 (アルファ除外) |
| Tex | .Tex |
UV テクスチャ座標属性として出力 |
| PointScale | .PointScale |
ポイントスケール属性として出力 (インスタンス描画時のサイズ) |
| LineWidth | .LineWidth |
ライン幅属性として出力 |
出力属性の上書き制御 ✅
Override Automatic Attribute .overrideautoattr 🛠️
– 入力属性とパラメータから自動推定される出力属性の型・コンポーネント数を手動上書き
– オフ時は自動推定、オン時は下の Attribute Type / Components / Default Value で指定
Attribute Type .attrtype 🔢
出力属性のデータ型 (Override Automatic Attribute オン時のみ有効)
| 項目 | 内部名 | 説明 |
|---|---|---|
| float | .float |
32-bit 単精度浮動小数 (デフォルト) |
| double | .double |
64-bit 倍精度浮動小数 (大規模累積で誤差を抑制したいときに使用) |
| int | .int |
32-bit 整数 (連番カウント・離散値用) |
| uint | .uint |
32-bit 符号なし整数 |
| Color | .color |
RGB / RGBA カラー (float 4 成分) |
| Color (double) | .dcolor |
倍精度カラー |
| Direction | .dir |
方向ベクトル (正規化前提の float 3 成分) |
| Direction (double) | .ddir |
倍精度方向ベクトル |
Components .attrnumcomps 📊
出力属性のコンポーネント数 (Override Automatic Attribute オン時のみ有効)
| 項目 | 内部名 | 説明 |
|---|---|---|
| 1 | .1 |
スカラー (1 成分)。連番・経路長など単一値の累積に使用 |
| 2 | .2 |
2D ベクトル (例: UV 座標) |
| 3 | .3 |
3D ベクトル (例: 位置 XYZ / 方向) |
| 4 | .4 |
4D ベクトル (例: RGBA / 四元数) |
Default Value .attrdefaultval 🎯
出力属性のデフォルト値 (Exclusive Scan の最初の点や、計算不能時のフォールバック値)
Default Value .attrdefaultval 📝
– 出力属性の各コンポーネント初期値を attrdefaultval0 / attrdefaultval1 / attrdefaultval2 / attrdefaultval3 で指定
– Components の設定値に応じて使用されるフィールドが決まる
– Exclusive Scan の i=0 の出力に採用される値でもある
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: ライン沿いの経路長 (Arc Length) を属性化 📏
Line POP → Math POP (隣接距離計算) → Accumulate POP (Inclusive Scan, P 距離) → Render TOP
ライン上の各点について「始点からの累積距離」を属性として算出する典型例。前段で隣接点間距離を求めておき、Accumulate POP で Inclusive Scan を取ると arc length が得られる。テクスチャの U 座標としてそのまま使えるため、ラインに沿った進行率の可視化に直結する。
- 前段で隣接点間距離を計算した距離属性
seg_lenを用意 - Accumulate POP の
Attribute Class= point、Input Attribute Scope=seg_lenを指定 Type= Inclusive Scan、Output Attribute Scope= Custom (例:arcLen)- 下流で
arcLenをTex.uにマップしてグラデーション表現に利用 - 終点の累積値 = 総経路長として Info CHOP / Lookup Attribute POP から参照
Example 2: ポイントごとの連番インデックス生成 🔢
入力 POP → Attribute POP (Create: constant=1) → Accumulate POP (Exclusive Scan) → 下流処理
全ポイントに「1」の定数属性を持たせて Exclusive Scan を取ると、0, 1, 2, 3 … のインデックス属性が生成できる。シェーダや GLSL POP 内で i 相当の値を参照したい場合、組込み index に頼らず属性として持ち回せる。
- Attribute POP で値 1 の int 属性
oneを全点に付与 - Accumulate POP の
Input Attribute Scope=oneを指定 Type= Exclusive Scan を選択 (i=0 で 0 を返したい場合)Override Automatic AttributeをオンにしてAttribute Type= int /Components= 1Output Attribute Scope= Custom (例:idx) で書き出し
Example 3: 重み付きランダムサンプリング用 CDF の構築 🎲
入力 POP (重み属性 weight 付き) → Accumulate POP (Inclusive Scan, weight) → Lookup Attribute POP (一様乱数からインデックス検索)
重み属性 weight を Inclusive Scan すると、累積分布関数 (CDF) として使える属性が得られる。0〜終点累積値の範囲で一様乱数を引き、CDF 上で二分探索することで、weight に比例する確率でポイントを選べる。パーティクル発生位置の不均一サンプリングなどに有効。
- 各点に重み属性
weightを用意 (Attribute POP / CHOP to POP 経由) - Accumulate POP の
Input Attribute Scope=weight、Type= Inclusive Scan Output Attribute Scope= Custom (例:cdf) として書き出し- 終点の
cdf値を Info DAT 経由で取得し、サンプリング範囲の上限とする - 後段で一様乱数 × 上限を Lookup Attribute POP で
cdfに対し検索してインデックスを得る
関連オペレータ 🔗
類似機能OP 🔍
- Math POP — 属性値の点別算術変換 (累積ではないが、累積前後の前処理・後処理として頻用)
- Attribute POP — 属性の作成・リネーム (Accumulate の入出力属性名を整える)
組み合わせ推奨OP 🔄
- Attribute POP — 累積対象の入力属性を作成・リネームしてから Accumulate に渡す
- Math POP — 累積後の値をスケーリング・正規化
- Lookup Attribute POP — 累積結果 (CDF 等) を別属性のインデックスとして参照
- CHOP to POP — CHOP チャンネル値を属性として注入してから累積
前処理・後処理POP 🎯
- 前処理: Box POP、Line POP、Particle POP
- 後処理: Math POP、Lookup Attribute POP
Info POP情報 📊
Accumulate POPは Info CHOP / Info DAT による詳細情報取得に対応しています。
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: エラー数
出力属性・ポイント情報 🧬
num_points: 累積対象となった出力ポイント数num_point_attribs: 出力 POP の point 属性数 (累積結果の出力属性を含む)num_vertex_attribs: 出力 POP の vertex 属性数num_prim_attribs: 出力 POP の primitive 属性数num_prims: 出力プリミティブ数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 累積結果が期待値とずれる (1 つずれている / 開始値が違う)
✅ Solution:
Typeが Inclusive Scan か Exclusive Scan かを再確認 (i 番目に現在点を含めるかどうかでオフセットが 1 つズレる)- Exclusive Scan の i=0 は
attrdefaultval0..3の値になるため、Default Value の設定を確認 Input Attribute Scopeのスペル・コンポーネント指定 (例:P.x) が意図と合っているか確認
❌ Problem: 出力属性が下流のオペレータで見つからない
✅ Solution:
Output Attribute Scopeの名前が下流で参照している名前と一致しているか確認 (Custom の typo に注意)Attribute Classが下流オペレータの期待クラス (point / vertex / primitive) と揃っているか確認- Common Page の
Delete Input Attributesパターンで誤って削除されていないか確認
❌ Problem: 大規模ポイントで累積誤差が大きく出る
✅ Solution:
Override Automatic AttributeをオンにしてAttribute Type= double / Color (double) / Direction (double) に切替- 極端なスケール差がある場合は前段の Math POP で値レンジを正規化してから累積
- 累積後に再度 Math POP で逆スケールを掛けて元レンジへ戻す
❌ Problem: パフォーマンスが落ちる / VRAM 使用量が増える
✅ Solution:
Componentsを必要最小限 (例: スカラーなら 1) に絞る- Common Page の
Delete Input Attributesで下流に渡す属性を必要最小限に絞り込み - 出力サイズが変動するワークフローでは Common Page の Free Extra GPU Memory パルスを使って未使用 VRAM を返却
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Accumulate POP
- Attribute – TouchDesigner 属性概念ページ
- Attribute POP – 累積前後の属性整形に組合せる関連 OP
- Math POP – 累積前後の数値変換に組合せる関連 OP

