
概要 📖 – POP フレームを時系列にキャッシュして過去状態を取り出す
Cache POPは、入力 POP のフレームを順次キャッシュに蓄積し、指定したインデックスの過去フレームを出力する POPです。Cache Size でバッファ長を、Step Size で取込み間隔を、Output Index で出力するフレーム位置を制御できます。Interpolate Frames をオンにすると、キャッシュ間のフレームを線形補間してスムーズな時間軸サンプリングが可能になります。
主な用途 🎯
- パーティクル / ポイント群の過去フレームを参照したモーション trail 表現
- シミュレーション結果のリプレイ・巻き戻し再生
- フレーム間補間 (Interpolate Frames) によるスローモーション再生
- 遅延エフェクト (delay) のための時間オフセット出力
- Reset パルスを使った任意タイミングでのキャッシュ初期化と再録画
データフロー 🔄
入力: POP (任意ジオメトリ)
↓
Cache POP (時系列スナップショットを内部バッファに蓄積)
↓
Output Index で指定したフレームを出力
↓
下流処理
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Cache Page 📋
キャッシュの有効化と取込み制御 🎬
Active .active 🟢
– オンの間だけ入力 POP フレームを内部バッファに取込む
– オフにすると現在のキャッシュ内容を保持したまま新規取込みを停止 (録画停止のような動作)
Always Cook .alwayscook 🔁
– 下流から要求がなくても毎フレーム強制的にクックさせる
– シーン中で常時キャッシュを進めたい場合 (連続録画) に使用
Cache Size .cachesize 📦
Cache Size .cachesize 📦
– バッファに保持するスナップショットの最大数を整数で指定
– バッファが満杯になると古いスナップショットから順に上書きされる (リングバッファ)
– Output Index でアクセス可能な「過去フレーム」の深さを決めるパラメータ
Step Size Unit .stepunit ⏱️
Step Size の単位 (取込み間隔の指定方法)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Seconds | .seconds |
秒単位で取込み間隔を指定 |
| Frames | .frames |
フレーム単位で取込み間隔を指定 (タイムラインの fps に基づく) |
Output Index Unit .outputindexunit 🎯
Output Index の単位 (どのフレームを取り出すかの指定方法)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Seconds | .seconds |
秒単位でオフセットを指定 (例: -0.5 = 0.5 秒前) |
| Frames | .frames |
タイムライン fps 基準のフレーム単位でオフセットを指定 |
| Index | .index |
Step Size とは独立に、キャッシュ内のスナップショット番号で直接指定 |
出力フレーム位置と補間 🎞️
Step Size .step ⏱️
– 1 回のキャッシュ取込みごとの時間間隔を Step Size Unit 単位で指定
– 値を大きくすると取込み頻度が下がり、より長い時間軸を Cache Size 個のスナップショットでカバーできる
Output Index .outputindex 🎯
– 出力するフレームの位置を Output Index Unit 単位で指定
– 0 は最新フレーム、負値で過去方向に遡る (例: -10 frames = 10 フレーム前)
– アニメーションさせれば時間軸スクラブとして動作する
Interpolate Frames .interp 🌊
– オン: 隣接するキャッシュフレーム間を線形補間して出力 (スムーズな時間軸サンプリング)
– オフ: 最も近いキャッシュフレームをそのまま出力 (離散的なスナップショット)
– 補間が成立するには前後のスナップショットが同一ポイント数である必要がある
Reset 制御 🔄
Reset .reset 🔄
– オンの間、キャッシュを 1 スナップショット (現在フレーム) のみの状態にロックし続ける
– 通常は Reset Pulse と組み合わせ、トリガー時点でキャッシュを初期化する用途で使用
Reset Pulse .resetpulse ⚡
– パルスを送るとキャッシュをクリアして 0 スナップショットの状態へ戻すパルスパラメータ
– 任意タイミングで再録画を始めたい場合の起点として利用 (CHOP / Panel CHOP からトリガー可)
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: パーティクル軌跡のモーション trail 表示 ✨
Particle POP → Cache POP (Cache Size = 60, Step = 1 frame) → Output Index = -30 → Render TOP
Particle POP の出力を 60 フレーム分キャッシュし、Output Index = -30 frames として 30 フレーム前のパーティクル位置を取り出す。最新位置のレイヤと過去位置のレイヤを別々に描画して合成すると、移動の軌跡 (motion trail) として表示できる。Output Index をアニメーションさせれば trail の長さを動的に変えることも可能。
- Particle POP を Cache POP の input1 に接続
- Cache POP の
Cache Size= 60、Step Size Unit= Frames、Step Size= 1 を設定 Output Index Unit= Frames、Output Index= -30 で 30 フレーム前を出力Always Cookをオンにして毎フレーム取込みを保証- Render TOP で trail 用マテリアル (低アルファ等) を適用して合成
Example 2: Reset Pulse によるシミュレーションのリプレイ ⏪
入力 POP (シミュレーション結果) → Cache POP (Cache Size = 300) → Output Index に CHOP アニメ → Render TOP
シミュレーションの結果を Cache POP に 300 フレーム分蓄積し、Reset Pulse でキャッシュをクリアして録画開始 → 一定時間後に Active をオフにして取込み停止 → Output Index を 0 から負方向にアニメーションさせて巻き戻し再生を実現する。再生中はリアルタイム計算が止まるためパフォーマンスも安定する。
- シミュレーション POP を Cache POP の input1 に接続
Cache Size= 300、Step Size= 1 frame を設定- Reset Pulse をトリガーしてキャッシュを 0 にし、その瞬間から録画開始
Activeをオフにして取込みを停止 (再生モードへ移行)Output Indexパラメータに CHOP 出力をバインドしてスクラブ / 巻き戻し操作を実装
Example 3: Interpolate Frames でスローモーション再生 🐢
入力 POP → Cache POP (Step = 1 frame, Interpolate Frames = on) → Output Index = 連続スカラー値 (CHOP) → Render TOP
通常 1 フレームに 1 スナップショットを取込む設定にしておき、Interpolate Frames をオンにする。Output Index を -3.0, -2.5, -2.0 のように 0.5 刻みで動かすと、隣接スナップショット間が線形補間されてフレーム数を増やしたかのようなスローモーション再生になる。シミュレーションの fps を実質倍速で滑らかに見せたいときに有効。
- Cache POP の
Step Size Unit= Frames、Step Size= 1 で取込み Interpolate Framesをオンに切替えOutput Index Unit= Frames を選択- CHOP / LFO で
Output Indexを小数値 (-3.0 〜 0.0 等) で連続変化させる - 前後のスナップショットのポイント数が一致していることを Info DAT で確認 (不一致だと補間が無効化される)
関連オペレータ 🔗
類似機能OP 🔍
- Feedback POP — 前フレームの出力を入力に戻すループ構造で過去状態を保持 (Cache は明示的スナップショット、Feedback は 1 フレーム遅延)
組み合わせ推奨OP 🔄
- Particle POP — パーティクル系の出力を Cache に流して trail / 履歴を作る
- Attribute POP — Cache の入力前後で属性整形 (補間対象の属性を絞り込み)
- Math POP — Cache 出力に対して時間オフセット後のスケーリング・色変換を適用
前処理・後処理POP 🎯
- 前処理: Particle POP、Attribute POP、Math POP
- 後処理: Math POP、Attribute POP
Info POP情報 📊
Cache 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: 出力フレーム (Output Index で選択されたスナップショット) のポイント数num_point_attribs: 出力 POP の point 属性数num_vertex_attribs: 出力 POP の vertex 属性数num_prim_attribs: 出力 POP の primitive 属性数num_prims: 出力プリミティブ数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Output Index を変えても出力が変化しない / 過去フレームが取り出せない
✅ Solution:
Activeがオンになっており、かつCache Sizeが 1 より大きいかを確認 (1 だと過去フレームが保持されない)Always Cookをオンにして毎フレームの取込みが走っているかを確認 (下流が要求しないと cook がスキップされることがある)Output Index UnitとOutput Indexの単位整合を確認 (Frames を選んだのに秒値を入れている等の typo)
❌ Problem: Interpolate Frames が効かず、出力がカクついて見える
✅ Solution:
- 前後のスナップショットのポイント数が一致しているか Info DAT で確認 (不一致だと線形補間は無効化され、最も近い 1 フレームが返る)
- 前段に Attribute POP 等を入れ、補間対象の属性 (P / Color 等) が両フレームに揃っているか確認
Output Indexを整数値ではなく小数値で動かしているか確認 (整数のままだと補間する余地が無い)
❌ Problem: キャッシュが期待より短い時間しか保持されない
✅ Solution:
Cache Size×Step Sizeが実際に必要な時間長 (秒またはフレーム数) を満たしているか計算で確認Step Size Unitが想定と違っていないか確認 (Frames のつもりが Seconds になっていると、ずっと短い時間しか保持されない)- Reset Pulse が予期しないタイミングで発火していないか CHOP / Panel 側のトリガー条件を確認
❌ Problem: VRAM 使用量が想定より大きく膨らむ
✅ Solution:
Cache Sizeを実用上必要な最小値まで下げる (1 ポイントあたりの属性データサイズ × Cache Size がそのまま VRAM を占める)- Common Page の
Delete Input Attributesで trail 表示に不要な属性を捨ててから Cache に入れる - 出力サイズが大きく変動する場合は Common Page の Free Extra GPU Memory パルスで未使用 VRAM を返却
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Cache POP
- Attribute – TouchDesigner 属性概念ページ
- Feedback POP – 1 フレーム遅延ループで履歴を保持する関連 OP
- Particle POP – Cache POP に流す典型的なシミュレーション入力源

