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

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

Accumulate POP の累積スキャン処理を示す図

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

概要 📖 – 属性のプレフィックススキャンによる累積計算

Accumulate POPは、ポイント・頂点・プリミティブ属性を順次累積 (プレフィックススキャン) し、各要素までの合計値を新しい属性として出力する POPです。Inclusive Scan / Exclusive Scan の 2 モードを選べ、出力属性のクラス・型・コンポーネント数を細かく制御できます。GPU 並列スキャンで動作するため、大規模ポイント数でも軽量に累積処理を実行できます。

主な用途 🎯

  • 位置属性の累積による経路長 (Arc Length) の算出
  • ポイント単位インデックス (連番) の生成(定数 1 を累積)
  • 重み付きサンプリング用の累積分布関数 (CDF) 構築
  • 質量・電荷など物理量のランニング総和の作成
  • GPU 並列プレフィックススキャンによる大規模属性集計

データフロー 🔄

入力: POP (任意属性)

Accumulate POP(Inclusive / Exclusive Scan で点列を順次累積)

出力: 累積値を持つ POP

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 座標としてそのまま使えるため、ラインに沿った進行率の可視化に直結する。

  1. 前段で隣接点間距離を計算した距離属性 seg_len を用意
  2. Accumulate POP の Attribute Class = point、Input Attribute Scope = seg_len を指定
  3. Type = Inclusive Scan、Output Attribute Scope = Custom (例: arcLen)
  4. 下流で arcLenTex.u にマップしてグラデーション表現に利用
  5. 終点の累積値 = 総経路長として 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 に頼らず属性として持ち回せる。

  1. Attribute POP で値 1 の int 属性 one を全点に付与
  2. Accumulate POP の Input Attribute Scope = one を指定
  3. Type = Exclusive Scan を選択 (i=0 で 0 を返したい場合)
  4. Override Automatic Attribute をオンにして Attribute Type = int / Components = 1
  5. Output Attribute Scope = Custom (例: idx) で書き出し

Example 3: 重み付きランダムサンプリング用 CDF の構築 🎲

入力 POP (重み属性 weight 付き) → Accumulate POP (Inclusive Scan, weight) → Lookup Attribute POP (一様乱数からインデックス検索)

重み属性 weight を Inclusive Scan すると、累積分布関数 (CDF) として使える属性が得られる。0〜終点累積値の範囲で一様乱数を引き、CDF 上で二分探索することで、weight に比例する確率でポイントを選べる。パーティクル発生位置の不均一サンプリングなどに有効。

  1. 各点に重み属性 weight を用意 (Attribute POP / CHOP to POP 経由)
  2. Accumulate POP の Input Attribute Scope = weightType = Inclusive Scan
  3. Output Attribute Scope = Custom (例: cdf) として書き出し
  4. 終点の cdf 値を Info DAT 経由で取得し、サンプリング範囲の上限とする
  5. 後段で一様乱数 × 上限を 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 🎯


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 を返却

参考資料 📚

その他 🔗

公式リソース 📖

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