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

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

Particle POP がパーティクルを生成し寿命・初期速度を管理して GPU 上で粒子シミュレーションを駆動する様子を示す図

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

概要 📖 – パーティクルの発生と運動制御

Particle POPは、入力ポイントからパーティクルを発生させ、寿命・初期速度・質量・ドラッグなどを管理し、GPU 上で粒子シミュレーションを駆動する POPです。Feedback POP 参照で前フレームの状態を次フレームへ受け渡すフィードバックループ構造により、Force Radial POP などの後段フォースと組み合わせて時間積分的な粒子運動を表現できます。

主な用途 🎯

  • パーティクルの発生と寿命管理 (Birth Rate / Life Expectancy / Random Seed で誕生数と生存時間を制御)
  • 初期速度・初期質量・初期ドラッグの一括設定 (Initial Velocity / Initial Mass / Initial Drag で各粒子のスタート条件を定義)
  • GPU 上での粒子シミュレーション (Force Radial POP / Transform POP と組み合わせて重力・渦・推進などの物理運動を計算)
  • フィードバックループによる時間積分 (Feedback POP 参照で前フレームの状態を次フレームへ受け渡し)
  • カスタム属性の付与と入力属性のリネーム (New Attribute 定義と Input Attributes コピーで下流シェーダ向けデータを構築)

データフロー 🔄

入力: ソースポイント (Point Generator POP / Sphere POP など)

Particle POP (Birth Rate / Initial Velocity / Life Expectancy で粒子化) + Feedback POP 参照

寿命管理されたパーティクル POP を出力

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Particles Page 📋

Feedback POP (フィードバック参照) .targetpop 🔁

次フレームへ粒子状態を再注入するためのフィードバック先 POP:

  • Feedback POP: targetpop (フィードバック先 POP) — ダウンストリームに置いた下流 POP への参照。Particle POP はここを通じて次フレームに粒子状態を再注入する。フィードバックループを構成するための必須参照。

Create Point Primitives (ポイントプリミティブ生成) .createpointprim 🟢

各パーティクルにポイントプリミティブを作成するトグル:

  • Create Point Primitives: createpointprim (ポイントプリミティブ生成) — オンにすると各粒子に対しポイントプリミティブを 1 個ずつ作成。下流でレンダリング (Geometry COMP からの点描画) に使うときに有効化

Point Id Reuse (ポイント ID の再利用方式) .pointidreuse 🔢

パーティクル死亡時にポイント ID を再利用する方式の選択

項目 内部名 説明
Reuse Point Ids in Loop .loop Maximum Particles 上限内で ID をリングバッファ的にループして再利用
Reuse First Available Point Id .unused 空いている最小の ID を割り当てて再利用 (ID 詰めが起きる)
Don’t Reuse Point Ids .none ID を再利用せず常にインクリメント (Maximum Particles 到達で停止)

Maximum Particles (最大パーティクル数) .maxparticles 📏

同時に存在できるパーティクル数の上限:

  • Maximum Particles: maxparticles (最大粒子数) — 同時生存可能なパーティクル数の上限。この値を超えると新規発生が抑制される。VRAM 消費に直結するため適切な上限が必要

Emission from (発生モード) .emissionmode 🎛️

パーティクルの発生方式の選択

項目 内部名 説明
Birth Rate .rate Birth Rate パラメータの値で発生数を直接指定 (パーティクル/単位時間)
Birth Attribute .attr 入力ポイントの属性値で発生数を指定 (Input Birth Attribute で属性名を指定)

Birth Rate / Birth Attribute (発生数の制御) .birthrate 🌱

単位時間あたりの発生数を決めるパラメータ群:

  • Birth Rate: birthrate (誕生率) — 1 単位時間あたりに新規発生させるパーティクル数。Emission from = Birth Rate のとき有効
  • Input Birth Attribute: birthattr (発生属性) — Emission from = Birth Attribute のとき、参照する入力ポイントの属性名。属性値が単位時間あたりの粒子発生数として使われる
  • Randomize Input Points: rndinputpts (入力点シャッフル) — オンにするとソースポイントの選ばれる順序をランダム化。複数フレームにわたって偏らない発生分布を得る

Life Expectancy (寿命とランダム化) .life

粒子の寿命とそのばらつきを決めるパラメータ群:

  • Life Expect: life (寿命の平均) — 各パーティクルの平均生存時間。この時間が経過すると粒子は死亡し ID は Point Id Reuse 設定に従って扱われる
  • Life Variance (Fraction): lifevariance (寿命のばらつき) — 寿命の Life Expect に対するゆらぎ割合 (0〜1)。同じ Random Seed では時間方向に分布が周期的に繰り返すため、長時間シミュでは Random Seed をアニメすると分布の単調さを回避できる
  • Random Seed: randomseed (乱数シード) — 寿命ばらつきとソース位置ばらつきに使う乱数シード

Time Integration (時間積分の制御) .timeintegration ⏱️

毎フレーム位置・速度を時間積分するかのトグル:

  • Enable Time Integration: timeintegration (時間積分) — オンで位置と速度を毎フレーム時間積分。オフにすると粒子は発生位置・速度に固定され、Force POP の力ベクトルだけが計算される

Jitter (発生タイミング・位置のばらつき) .jitter 🎲

1 フレーム内の発生時刻と位置のランダム化:

  • Jitter Births During Frame: jitterbirthtime (発生時刻のゆらぎ) — オンにすると 1 フレーム内のどの瞬間に粒子が発生するかをランダム化。連続した滑らかな発生ストリームを作るのに有効
  • Jitter Birth Position: jitterbirthpos (発生位置のゆらぎ) — ソース位置の周辺の指定半径内でランダムに発生位置を散らす。点状ソースを使うときに発生位置の塊感を解消するのに使う

Initial Conditions (初期速度・質量・ドラッグ) .initial 🚀

誕生時の物理初期値 (速度・質量・ドラッグ・減衰):

  • Initial Velocity: initvelocity (初期速度ベクトル) — 各粒子の初期速度 (単位: ユニット/秒)。XYZ 成分を指定。Initial Velocity X/Y/Z (initvelocityx / initvelocityy / initvelocityz) で個別制御可能
  • Initial Mass: initmass (初期質量) — 各粒子の質量。後段の Force POP で力から加速度を求める際の分母 (F = m a)
  • Initial Drag: initdrag (初期ドラッグ) — 各粒子の空気抵抗係数。値が大きいほど速度が減衰しやすくなる
  • Velocity Damping: damping (速度減衰) — 毎フレーム速度に乗算される係数。値 < 1 で速度が指数的に減衰し、徐々に静止する

Simulation Control (シミュレーション制御) .simctrl 🎮

Initialize / Start / Speed / Pre-Roll / Done でシミュ全体を制御するパルス・パラメータ群:

  • Initialize: initializepulse (初期化パルス) — 入力とパラメータから POP を初期化する。完了すると接続した Info CHOP の ready チャンネルがオンになり、Start パルス待ち状態へ遷移する
  • Start: startpulse (開始パルス) — 粒子シミュレーションを開始する。Initialize 完了後に押すとフィードバックループが動き始める
  • Speed: speed (シミュ速度) — シミュレーション速度倍率。スローモーション / 早送りに使う
  • Pre-Roll: preroll (事前回転時間) — 初期化時に内部で空回しする時間。最初のフレーム到達時にあらかじめ "前進" した状態から開始したい場合に使う (定常状態に達した粒子分布で見せたいときに便利)
  • Go to Done: donepulse (完了パルス) — 即座に "Done" 状態へ遷移する。シミュレーション終了を強制する用途

Play (再生制御) .play ▶️

フィードバックループの再生・一時停止・1 フレーム送りの制御

項目 内部名 説明
Play .play シミュレーションを継続して進行 (通常再生)
Step Pulse .steppulse 1 フレーム分だけ前進するパルス (フレーム単位デバッグに使用)

Attributes Page 🏷️

Input Attributes (入力属性の取り込み) .attrs 📥

ソースポイント属性のコピー方針とリネーム・強制終了制御:

  • Input Attributes: attrs (取り込む入力属性) — ソースから新規パーティクルへコピーする属性名のリスト (スペース区切り、ワイルドカード可)
  • Rename to: renameto (属性名の置換) — 取り込み時に属性名を別名に変更する。元属性と粒子上属性で名前を分けたいときに使用
  • Use Death Attribute: usedeathattr (死亡属性の使用) — オンにすると粒子上の death 属性が真のとき強制的にその粒子を死亡させる。条件付き間引きに利用

New Attribute (カスタム属性の定義) .attr

パーティクルに新規追加する属性のブロック定義:

  • New Attribute: attr (新規属性ブロック) — シーケンシャルブロックの開始。N 個積み重ねて複数のカスタム属性を同時定義できる
  • New Attribute Name: attr0name (新規属性名) — 追加する属性の名前。あらかじめ定義された属性名 (P / N / Cd など) または任意のカスタム名から選択
  • Attribute Type: attr0type (属性の型) — 属性のデータ型 (浮動小数点・整数・ベクトルなど) を選択
  • Default Value: attr0value (デフォルト値) — 属性の初期値。最大 4 成分 (attr0value0attr0value3) を持ち、Attribute Type に応じて成分数が決まる

Map Page 🗺️

Mapping (属性 → パラメータ写像) .map 🔁

別 POP の属性をポイント単位で Particle POP のパラメータに割り当てる写像ブロック:

  • Mapping: map (写像ブロック) — 属性 → パラメータ写像ブロックの開始。複数積み重ねて属性ごとに異なるパラメータへ流せる
  • OP: map0op (写像元 OP) — 写像元の OP 参照。デフォルトの _in0 は入力 POP 自身を指す
  • Element: map0element (写像元要素) — 写像元 OP のうち、写像する属性 (またはその成分。例: P.x)

Parameter (写像先パラメータ) .map0parm 🎯

属性が書き込まれる Particle POP 側のパラメータをメニューから選択

項目 内部名 説明
life (Life Expect) .life 寿命の平均値に書き込む
lifevariance (Life Variance) .lifevariance 寿命のばらつき割合に書き込む
damping (Velocity Damping) .damping 速度減衰係数に書き込む
initvelocity (Initial Velocity) .initvelocity 初期速度ベクトル (XYZ 一括) に書き込む
initvelocityx .initvelocityx 初期速度の X 成分のみに書き込む
initvelocityy .initvelocityy 初期速度の Y 成分のみに書き込む
initvelocityz .initvelocityz 初期速度の Z 成分のみに書き込む
initmass (Initial Mass) .initmass 初期質量に書き込む
initdrag (Initial Drag) .initdrag 初期ドラッグ係数に書き込む

Combine Operation (合成方法) .map0combineop

属性値と既存パラメータ値の合成方法

項目 内部名 説明
Set .set パラメータ値を属性値で 上書き
Multiply .mult パラメータ値に属性値を 乗算
Add .add パラメータ値に属性値を 加算

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: 発火の火花 🔥

Point Generator POP (発火源) → Particle POP (birthrate=200, life=0.6, lifevariance=0.4, initvelocity=(0,2,0), damping=0.95) → Force Radial POP (planar=on, planarstrength=-9.8) → Feedback POP

発火源となるソースポイントから瞬間的に多数の火花を散らす例。短い寿命 0.6 秒 + 寿命ばらつき 0.4 で粒子が次々消えていく "火花感" を出し、初期速度を上向き Y に与えて重力 (Planar Force 負値) で落下させる構成。

  1. Point Generator POP で発火源となる単点 (もしくは少数点) を生成
  2. Particle POP の emissionmode = Birth Ratebirthrate = 200 で 1 秒に 200 個発生
  3. life = 0.6、lifevariance = 0.4 で短寿命 + ばらつき設定
  4. initvelocityy = 2.0 で上向きの初速、damping = 0.95 で速度をわずかに減衰
  5. 後段に Force Radial POP を接続し planar オン + planarstrength = -9.8 で重力を表現
  6. Feedback POP を末端に置き、その参照を Particle POP の targetpop に設定

Example 2: 雪の降下 ❄️

Grid POP (天井ソース) → Particle POP (emissionmode=rate, birthrate=50, life=10, jitterbirthpos=on) → Force Radial POP (Global Force = (0,-0.5,0), Wind Speed = (0.3,0,0)) → Feedback POP

天井に広げた Grid をソースに、緩やかな Birth Rate 50 で雪片を発生させ、長寿命 10 秒で空中をゆっくり漂わせる例。発生位置のジッタで天井から一様にばらまき、Force Radial POP の Global Force (重力) と Wind Speed (横風) を組み合わせて緩やかな降雪表現を作る。

  1. Grid POP で天井相当の平面ソースポイントを生成
  2. Particle POP の emissionmode = Birth Ratebirthrate = 50
  3. life = 10、lifevariance = 0.2 で寿命を長めに
  4. jitterbirthpos をオンにして発生位置を Grid 全体にばらまく
  5. 後段 Force Radial POP の globforcey = -0.5 で弱い重力、windspeedx = 0.3 で横風を追加
  6. Feedback POP を経由してフィードバックループを閉じる

Example 3: 属性駆動の発生数制御 🎯

Noise POP (各ポイントに birthrate 属性を付与) → Particle POP (emissionmode=attr, birthattr=birthrate) → Feedback POP

ソース POP の各ポイントに Noise POPAttribute POPbirthrate 属性を計算しておき、Particle POP の emissionmode = Birth Attribute で属性値を発生数として読ませる例。発生量を空間的に変化させたいシーン (高密度ホットスポット、密度マップ駆動) で使う。

  1. ソース POP (Grid / Sphere など) を用意し各ポイントを発生候補に
  2. Noise POP / Attribute POP で各ポイントに birthrate 属性を計算
  3. Particle POP の emissionmode = Birth Attribute を選択
  4. birthattr = "birthrate" を指定 (属性名と完全一致が必要)
  5. Feedback POP でフィードバックを閉じる

関連オペレータ 🔗

類似機能OP 🔍

  • None — Particle POP は POP ファミリー内で唯一の GPU パーティクル発生器。類似機能 OP は存在しません。

組み合わせ推奨OP 🔄

  • Force Radial POP — 発生したパーティクルに放射状・軸方向・螺旋・平面の力を加える物理フォース
  • Transform POP — パーティクル位置全体に平行移動・回転・スケールを適用
  • Attribute POP — パーティクルに任意属性 (色・サイズ等) を追加・編集
  • Attribute Combine POP — 複数属性を演算で合成 (速度と外力を加算するなど)
  • Noise POP — 発生数や属性に乱流的ノイズを加える
  • Random POP — 粒子属性にランダム値を割り当てる (個性付け)
  • Lookup Attribute POP — 他 POP の属性を ID 経由でルックアップして取得
  • GLSL POP — GLSL シェーダでカスタム粒子ロジックを実装
  • Cache POP — シミュ結果をフレームキャッシュして再生・編集
  • File Out POP — パーティクルの各フレームをファイル出力 (アーカイブ・再利用)

前処理・後処理POP 🎯


Info POP情報 📊

Particle 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: エラー数
  • gpu_memory: Particle POP が確保している GPU メモリ使用量。Maximum Particles に比例して増加

シミュレーション状態 🧪

  • ready: Initialize パルスによる初期化が完了し、Start パルスを受け付けられる状態か (真理値)
  • running: 現在シミュレーションが進行中か (Play 状態かつ Done に到達していない)
  • done: シミュレーションが終了状態かどうか (Go to Done パルスや内部条件で真になる)

粒子数・属性数 🧩

  • num_points: 現在生存しているパーティクル数。発生・死亡で時々刻々変化する
  • num_attributes: 出力 POP が保持する属性の総数 (Input Attributes + New Attribute で定義した属性の合計)

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: パーティクルが発生しない / Start を押しても進まない
✅ Solution:

  • targetpop (Feedback POP 参照) が空または不正な POP を指していないか確認。フィードバックループが閉じていないとシミュは進行しない
  • Initialize パルスを押した後に Start パルスを押す順序を守る。Info CHOP の ready チャンネルがオンになるまで待つ
  • maxparticles = 0 や非常に小さい値になっていないか確認 (上限ゼロでは発生できない)
  • emissionmode = Birth Attribute の場合、ソースに birthattr で指定した属性が実際に存在し非ゼロ値を持っているか Info DAT で確認

❌ Problem: パーティクルが画面に出ない / レンダリングされない
✅ Solution:

  • createpointprim をオンにしてポイントプリミティブを作成しているか確認 (オフではポイントとしては描画されない)
  • Geometry COMP 経由でレンダリングし、POP を Geometry の中で参照しているか確認
  • Particle POP 出力後に Convert POP / Transform POP を挟む構成の場合、最終 POP が Geometry COMP の SOP/POP 入力に接続されているかチェック
  • Info DAT で num_points が 0 でないか (= そもそも粒子が存在しているか) を確認

❌ Problem: パーティクルが瞬時に消えてしまう / 寿命が短すぎる
✅ Solution:

  • life (Life Expect) が想定より小さくないか。秒単位なので 0.1 などにすると一瞬で消える
  • lifevariance が 1 に近いと寿命のばらつきが極端になり、想定外に短命な粒子が発生する。0.2〜0.4 程度に抑える
  • usedeathattr がオンで death 属性が誤って真になっていないか入力側で確認
  • damping の影響で速度が早期に消える場合、見た目の動き喪失と寿命切れを混同していないか切り分け

❌ Problem: Map で属性が反映されない / パラメータ駆動できない
✅ Solution:

  • map0op が正しい OP を指しているか確認。デフォルトの _in0 は入力 POP 自身
  • map0element に指定した属性名が写像元 OP に実在するか Info DAT で確認 (大文字小文字を含めて完全一致)
  • map0parm が書き込みたい先のパラメータと一致しているか (例: 初期速度 X だけに写像したいなら initvelocityx)
  • map0combineopSet 以外 (Multiply / Add) のとき、元のパラメータ値とのスケール関係を確認

参考資料 📚

その他 🔗

公式リソース 📖

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