
概要 📖 – フレームをまたぐ POP データの反復処理
Feedback POPは、別 POP (Target POP) の前フレーム出力を 1 クック遅延で取り込み、フレームをまたいで POP データを反復的に更新する POPです。パーティクル・物理シミュレーション・履歴トレイル等、GPU 上で状態を持つフィードバック処理の中核として機能します。
主な用途 🎯
- GPU パーティクル系の前フレーム位置・速度を保持して反復更新
- ジェネレーティブ形状の毎フレームごとの成長・進化処理
- 物理シミュレーション (Boids / 反応拡散 等) の状態保持
- 履歴トレイルの GPU 上での蓄積と可視化
- セルラオートマトン等の時間発展型計算ループの構築
データフロー 🔄
入力: 初期 POP データ
↓
Initialize で snapshot 確定 → Pre-Roll でウォームアップ
↓
Target POP の前フレーム出力を取得 → 下流チェーンで加工
↓
出力 → Target POP へ循環
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Feedback Page 📋
Target POP .targetpop 🎯
フィードバックの参照先となる下流 POP の指定:
- Target POP:
targetpop— ネットワーク下流に配置した POP ノードへの参照。指定した POP の出力が 1 クック (1 フレーム) 遅延で取得される
ライフサイクル制御 🎬
Initialize .initializepulse 🔄
– パルスパラメータ。入力とパラメータから POP を初期化し、内部状態の snapshot を確定
– 初期化完了は Info CHOP の ready チャンネルが ON になることで判定可能。以降は Start パルスを待機する状態
Start .startpulse ▶️
– パルスパラメータ。フィードバックループの再生を開始
– Initialize 抜きで Start を押すと、その場で snapshot を取って即時再生される
Play .play ⏯️
– トグルパラメータ。フィードバックループの再生/一時停止を切替
– オフにするとループ全体のクックが停止し、状態は保持される
Step Pulse .steppulse ⏭️
– パルスパラメータ。1 フレームのみ進めて一時停止状態に戻る
– デバッグ時にフレーム単位で状態遷移を確認したい場合に使用
Go to Done .donepulse ⏹️
– パルスパラメータ。フィードバックループを即時に done 状態へ遷移
– ループに沿った下流ノードの追加クックを停止し、次の Initialize を待機
Pre-Roll .preroll ⏪
Pre-Roll .preroll ⏱️
– 初期化時に ready 状態へ移行する前に実行するウォームアップ時間
– 0 より大きい値を設定すると、Initialize 押下後にこの時間ぶんループを空回ししてから ready 状態になる
Pre-Roll Unit .prerollunit 📏
Pre-Roll 値の単位
| 項目 | 内部名 | 説明 |
|---|---|---|
| F | .frames |
Pre-Roll をフレーム数で測定 |
| S | .seconds |
Pre-Roll を秒で測定 |
GPU メモリ制限 🧠
Use Memory Limit .usememlimit ✅
– トグルパラメータ。Target POP からコピーバックされる GPU メモリ量に上限を設ける
– デフォルトはオフ。大規模パーティクル等で VRAM を保護したい場合に有効化
Input Multiplier .inputmul ✖️
– 入力 POP の GPU メモリ使用量に対する倍率で本 POP の GPU メモリ上限を決定
– Use Memory Limit オン時のみ有効。値を大きくすると Target 出力が増減してもメモリ確保に余裕を持たせられる
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: GPU パーティクル位置更新ループ ✨
Random POP (初期位置) → Feedback POP → Math POP (速度加算) → Noise POP (ばらつき) → Out POP
Random POP で生成した初期位置の点群を Feedback POP で前フレームの位置として取り込み、後段の Math POP / Noise POP で速度や乱流を加算して毎フレーム新しい位置にずらしていく GPU パーティクルの基本構成です。
- Random POP で初期パーティクル位置を生成
- Feedback POP の
Target POPに下流の Out POP を指定して循環参照を構成 - 後段に Math POP や Noise POP を挿入して位置にオフセット・乱流を加算
Initialize→Startを順番にパルスしてループを開始
Example 2: 反応拡散シミュレーションの状態保持 🧪
Grid POP (初期値) → Feedback POP → GLSL POP (反応拡散カーネル) → Out POP
Grid POP で初期化された 2 つの濃度フィールドを Feedback POP で 1 フレーム遅延取り込みし、GLSL POP 内の反応拡散シェーダで毎フレーム更新するセットアップ。Gray-Scott モデル等の時間発展計算を GPU 上で完結できます。
- Grid POP で計算ドメインの初期濃度フィールドを生成
- Feedback POP を挿入し
Target POPをループ末尾の Out POP に設定 - GLSL 系 POP で反応・拡散の差分方程式をシェーダ内に実装
Pre-Rollに 100 フレーム程度を設定して初期パターン発生まで一気にウォームアップ
Example 3: 履歴トレイルの蓄積 📈
Input POP → Feedback POP → Math POP (減衰乗算) → Merge POP (新規ポイント追加) → Out POP
毎フレーム入ってくる現在のポイント群と Feedback POP で取り込んだ過去フレーム履歴を Merge POP で重ね合わせ、Math POP で輝度や寿命を減衰させていく履歴トレイル構成。
- 現在フレームのポイント源 (例: マウス座標やセンサー入力) を準備
- Feedback POP + Merge POP で過去ポイントと現在ポイントを合成
- Math POP で寿命属性・輝度属性を毎フレーム減衰させる
- 上限ポイント数に近づいたら
Use Memory Limitを有効化して VRAM 保護
関連オペレータ 🔗
類似機能OP 🔍
- Particle POP — Feedback POP の拡張、寿命・出生・誕生処理を内蔵したパーティクル専用版
- Cache POP — 過去フレームをまとめてスナップショット保持、ランダムアクセス可
- Trail POP — 履歴を一定ウィンドウで保持する用途特化型
組み合わせ推奨OP 🔄
- Math POP — 前フレーム値に速度や減衰を加算する状態更新
- Transform POP — 前フレーム位置に回転・スケールを蓄積
- Noise POP — 状態に毎フレーム乱流ノイズを注入
- Force Radial POP — 中心引力・斥力を毎フレーム速度に加算する物理項
- GLSL POP — カスタムシェーダで反応拡散など任意の更新式を実装
- Merge POP — 現在フレームのポイントと履歴を結合
前処理・後処理POP 🎯
- 前処理: Random POP、Grid POP、Box POP、In POP
- 後処理: Math POP、Transform POP、Out POP
Info POP情報 📊
Feedback 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: エラー数
num_points: Feedback POP 出力時点のポイント数num_point_attribs: 出力 POP の point 属性数num_vertex_attribs: 出力 POP の vertex 属性数num_prim_attribs: 出力 POP の primitive 属性数num_prims: 出力プリミティブ数ready: Initialize 完了後 ready 状態に入ったときに 1。Start パルス待機を示すフラグrunning: Start パルス後ループ実行中に 1done: Go to Done パルス後または明示的に done 状態に到達したときに 1
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Initialize を押しても ready 状態にならない
✅ Solution:
Target POPに有効な下流 POP が参照されているか確認 (ループが閉じていないと初期化が完了しない)Pre-Rollが大きすぎないか確認、長時間ウォームアップ中は Info CHOP のinitializingが 1 のままになる- 下流チェーンにエラー POP が含まれていないかネットワーク全体を点検
❌ Problem: GPU メモリ使用量が増え続けてしまう
✅ Solution:
Use Memory Limitを有効化してInput Multiplierで上限を設定- Common Page の
Free Extra GPU Memoryをパルスして蓄積したメモリを解放 - 下流で
Delete Input Attributesを使い、運ばれる属性を必要最小限に削る
❌ Problem: Pre-Roll が想定の時間ぶん回らない
✅ Solution:
Pre-Roll UnitがF(フレーム) かS(秒) のどちらに設定されているかを再確認- プロジェクトの FPS と Pre-Roll 値の組み合わせを Info CHOP の
timer_seconds等で実測 - Initialize 後に手動で
Startを押していないか確認、Pre-Roll 後は自動で ready 状態に入るだけで再生は始まらない
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

