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

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

Cache POP の時系列キャッシュ処理を示す図

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

概要 📖 – POP フレームを時系列にキャッシュして過去状態を取り出す

Cache POPは、入力 POP のフレームを順次キャッシュに蓄積し、指定したインデックスの過去フレームを出力する POPです。Cache Size でバッファ長を、Step Size で取込み間隔を、Output Index で出力するフレーム位置を制御できます。Interpolate Frames をオンにすると、キャッシュ間のフレームを線形補間してスムーズな時間軸サンプリングが可能になります。

主な用途 🎯

  • パーティクル / ポイント群の過去フレームを参照したモーション trail 表現
  • シミュレーション結果のリプレイ・巻き戻し再生
  • フレーム間補間 (Interpolate Frames) によるスローモーション再生
  • 遅延エフェクト (delay) のための時間オフセット出力
  • Reset パルスを使った任意タイミングでのキャッシュ初期化と再録画

データフロー 🔄

入力: POP (任意ジオメトリ)

Cache POP (時系列スナップショットを内部バッファに蓄積)

Output Index で指定したフレームを出力

下流処理

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 の長さを動的に変えることも可能。

  1. Particle POP を Cache POP の input1 に接続
  2. Cache POP の Cache Size = 60、Step Size Unit = Frames、Step Size = 1 を設定
  3. Output Index Unit = Frames、Output Index = -30 で 30 フレーム前を出力
  4. Always Cook をオンにして毎フレーム取込みを保証
  5. 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 から負方向にアニメーションさせて巻き戻し再生を実現する。再生中はリアルタイム計算が止まるためパフォーマンスも安定する。

  1. シミュレーション POP を Cache POP の input1 に接続
  2. Cache Size = 300、Step Size = 1 frame を設定
  3. Reset Pulse をトリガーしてキャッシュを 0 にし、その瞬間から録画開始
  4. Active をオフにして取込みを停止 (再生モードへ移行)
  5. 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 を実質倍速で滑らかに見せたいときに有効。

  1. Cache POP の Step Size Unit = Frames、Step Size = 1 で取込み
  2. Interpolate Frames をオンに切替え
  3. Output Index Unit = Frames を選択
  4. CHOP / LFO で Output Index を小数値 (-3.0 〜 0.0 等) で連続変化させる
  5. 前後のスナップショットのポイント数が一致していることを Info DAT で確認 (不一致だと補間が無効化される)

関連オペレータ 🔗

類似機能OP 🔍

  • Feedback POP — 前フレームの出力を入力に戻すループ構造で過去状態を保持 (Cache は明示的スナップショット、Feedback は 1 フレーム遅延)

組み合わせ推奨OP 🔄

  • Particle POP — パーティクル系の出力を Cache に流して trail / 履歴を作る
  • Attribute POP — Cache の入力前後で属性整形 (補間対象の属性を絞り込み)
  • Math POP — Cache 出力に対して時間オフセット後のスケーリング・色変換を適用

前処理・後処理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 UnitOutput 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 を返却

参考資料 📚

その他 🔗

公式リソース 📖

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