
概要 📖 – ジオメトリ履歴のキャッシュと再生
Cache SOPは、入力 SOP のジオメトリを毎クック単位でキャッシュに蓄積し、過去フレームを任意のインデックスで取り出して再生・補間できる SOPです。Pre-Fill で起動時に瞬時に充填、Step Size で長時間履歴を低メモリで保持、Cache Points Only でトポロジ固定の軽量モード、Blend Position で隣接エントリ間の滑らかな補間が可能です。
主な用途 🎯
- 入力ジオメトリのフレーム単位スナップショット保存で、毎クックごとに入力 SOP の状態を 1 フレーム分キャッシュに蓄積
- 過去フレームのジオメトリ取り出しで、
Output Indexにより最新 (0) から最古 (Cache Size - 1) までの任意フレームを出力 - Pre-Fill による起動時の即時バッファ充填で、再生開始前に Cache Size 回クックして瞬時にキャッシュを満杯にし、ファイル保存・再ロードでも復元可能
- Step Size による低レートサンプリングで、N クックごとに 1 フレームのみキャッシュし長時間履歴をメモリ効率よく保持
- Cache Points Only によるトポロジ固定モードで、最初のフレームのみトポロジ (接続情報) を保持し以降は point データだけ蓄積して軽量化
- Blend Position によるキャッシュフレーム間補間で、隣接する 2 つのキャッシュエントリ間で point 位置を線形補間し滑らかな再生を実現
データフロー 🔄
入力: 任意 SOP のフレーム単位ジオメトリ
↓
毎クック時に Active がオンなら現在状態を 1 エントリとしてキャッシュへ追加 (Step Size 単位で間引き / Cache Points Only で軽量化)
↓
Output Index 指定エントリを (Blend Position オンなら隣接エントリと補間して) 出力
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
キャッシュ動作の有効化 ▶️
Active .active ▶️
– オンにすると毎クックごとに入力ジオメトリのスナップショットを 1 つキャッシュに追加
– オフにするとキャッシュへの追加が止まり、現在保持しているキャッシュ内容はそのまま維持される
– 動画録画のように特定区間だけ蓄積したい場合に活用
Pre-Fill による事前充填 ⏳
Pre-Fill .prefill ⏳
– 0 より大きい値を設定すると、その回数だけ Cache Size 分のクックを即座に実行してキャッシュを充填
– 再生中に 0 から正値へ変更すると即時に再充填、ファイル保存して再ロードした場合も次回ロード時に自動 pre-fill
– 0 → 正値 → 0 → 正値 と切り替えると、その都度キャッシュをクリアして再充填
– Pre-Fill が 0 より大きい間は Active がオフとして扱われる
キャッシュ容量とサンプリング間隔 📦
Cache Size .cachesize 📦
– キャッシュに保持できるジオメトリエントリの最大数
– 値を超えると古いエントリから順に破棄される (リングバッファ動作)
– 長時間履歴が必要なら大きく、メモリ消費を抑えたいなら小さく設定
Step Size .step 🪜
– 1 の場合は毎クックごとに 1 エントリ追加
– 2 なら 2 クックごとに 1 エントリ、N なら N クックごとに 1 エントリだけキャッシュ
– 同じ Cache Size でもサンプリング間隔を粗くすることで長時間履歴を保持可能
出力フレームの選択 🎯
Output Index .outputindex 🎯
– キャッシュから出力するエントリのインデックス
– 0 が最も新しいキャッシュエントリ、Cache Size - 1 が最も古いエントリ
– 有効範囲は 0 〜 Cache Size - 1
– Speed CHOP や LFO CHOP 等の値を Export してインデックスを動的に変化させると、過去履歴のスクラブ再生が可能
ポイントデータのみ蓄積モード 🪶
Cache Points Only .cachepoints 🪶
– オンにすると最初のキャッシュエントリのみトポロジ (プリミティブ接続情報) を保持し、以降のエントリは point 位置データだけを蓄積
– 入力ジオメトリのトポロジが毎フレーム変わらない場合に有効でメモリ消費とコピーコストを大幅に削減
– トポロジが時間と共に変化するジオメトリ (パーティクル誕生・消滅等) では情報が欠落するためオフのまま使用
キャッシュ間補間 🌀
Blend Position .blendpos 🌀
– オンにすると Output Index の小数部 (例えば 2.3 の .3) を利用して、隣接する 2 エントリ間で point 位置を線形補間
– 連続値で Output Index を動かしたときの再生が滑らかになる
– Cache Points Only と組み合わせて軽量かつ滑らかな履歴スクラブを実現可能
キャッシュのリセット ♻️
Reset .reset ♻️
– オンにしている間、蓄積された全キャッシュエントリをクリアし続ける
– 一定期間蓄積を停止しつつ既存履歴も破棄したい用途で使う
– 通常使用ではオフのまま Reset Pulse を併用するのが推奨
Reset Pulse .resetpulse 💥
– パルスとして 1 回押すと、その瞬間にキャッシュを全クリア
– 録画リセット・初期化スクリプト・特定イベント発火時のクリア処理に利用
– Trigger CHOP 等から Export して条件付きクリアを組むことも可能
実践アイデア 💡
Example 1: Particle SOP の動きを時間遅延で再生する履歴ライン演出 ✨
Particle SOP → Cache SOP (Active=ON, Cache Size=120, Step Size=1, Cache Points Only=ON) → Output Index は LFO CHOP で 0〜119 を動かして Export → Material SOP → Render TOP
Particle SOP が毎フレーム動かしているポイント群を Cache SOP で 120 フレーム分蓄積し、LFO CHOP で Output Index を周期的に動かしながら出力することで、過去フレームを順に再生する履歴ライン演出を作るパターンです。Cache Points Only をオンにすると Particle のトポロジを最初のフレームに固定し、ポイント位置だけを軽量に蓄積できます。
- Particle SOP を配置し、好みのソース・フォース設定で点群を動かす
- Particle SOP の出力を Cache SOP に接続し、
Activeをオン、Cache Sizeを120程度に設定 Cache Points Onlyをオンにしてトポロジを最初のフレームに固定 (パーティクル数が変動しない設定であることが前提)- LFO CHOP を 1 つ作成し、出力範囲を
0〜Cache Size - 1にスケーリングして Cache SOP のOutput Indexに Export Blend Positionをオンにすると、LFO の連続値が隣接キャッシュ間で線形補間され滑らかなスクラブ再生になる
Example 2: Pre-Fill で起動直後から完全な履歴バッファ状態を再現 ⏳
Sphere SOP (Animate される) → Cache SOP (Cache Size=60, Pre-Fill=1) → Out SOP
ファイルを開いた直後やプロジェクト起動直後でも、キャッシュが既に満杯の状態で再生を始めたい場合のパターンです。Pre-Fill を 1 以上に設定しておくと、Cache SOP は起動時に Cache Size 回ぶんクックしてバッファを瞬時に充填します。保存時にもこの値が記録されるため、再ロード後も自動で再充填されます。
- アニメーションする入力 SOP (例: Sphere SOP の Center を Math CHOP / Constant CHOP で時間駆動) を準備
- Cache SOP を接続し、
Cache Sizeを必要な履歴フレーム数 (例:60) に設定 Pre-Fillを1に設定し、起動時に 60 回ぶんクックしてキャッシュを満杯化Activeをオン、Pre-Fillを0に戻して通常の毎クック追加モードに切り替え- プロジェクトを保存・再ロードし、起動直後から想定の履歴バッファで再生が始まることを確認
Example 3: Step Sizeで長履歴を低メモリ保持 🪜
Animated Geometry → Cache SOP (Cache Size=120, Step Size=5) → Math CHOP で Output Index を Export → Material SOP
120 フレーム ぶんのキャッシュエントリでも、Step Size を 5 に設定すれば実時間で 600 フレーム (120 × 5) ぶんの履歴をカバーできます。サンプリング解像度は粗くなりますが、長時間にわたる動きの分布を見たい・低メモリで履歴を保ちたい場合に有効です。
- 毎フレーム変化する SOP (例: Particle SOP やアニメーション付き Geometry) を入力に接続
- Cache SOP の
Cache Sizeを120、Step Sizeを5に設定 - Math CHOP で 0〜119 の整数を生成し
Output Indexに Export - 出力を Material SOP / Render TOP に渡して、サンプリング間隔が広い履歴の見え方を確認
- メモリ消費に余裕があれば
Step Size=1に戻して時間解像度を上げる、足りなければCache Sizeを絞るというトレードオフを調整
関連オペレータ 🔗
類似機能OP 🔍
- Trail SOP — 入力ジオメトリの過去フレーム履歴を 1 つの SOP にまとめて trail として可視化 (Cache は履歴を保持して任意フレームを再生、Trail は過去履歴を 1 つに結合して可視化)
- Sequence Blend SOP — 複数入力ジオメトリのシーケンス間を Blend する (Cache が時系列を内部に持つのに対し、Sequence Blend は外部入力シーケンスをブレンド)
組み合わせ推奨OP 🔄
- Speed CHOP —
Output Indexを駆動して履歴を可変速度で再生・スクラブ - LFO CHOP —
Output Indexを周期波形で動かしてループ再生・揺らぎ演出 - Trigger CHOP — イベント発火時に
Reset Pulseを打ってキャッシュを初期化
前処理・後処理SOP 🎯
- 前処理: Particle SOP、Transform SOP、Convert SOP、Copy SOP
- 後処理: Material SOP、Transform SOP、Convert SOP、Out SOP
Info CHOP情報 📊
Cache SOP は Info CHOP による詳細情報取得に対応しています。
ジオメトリ統計 📐
num_points: この SOP に含まれるポイント数num_prims: この SOP に含まれるプリミティブ数num_particles: この SOP に含まれるパーティクル数
GPU 転送タイミング 🎮
last_vbo_update_time: 別スレッドで SOP の CPU データを GPU 上のジオメトリデータに更新するのにかかった時間 (フレーム時間外)last_meta_vbo_update_time: 別スレッドで metaball や NURBS のようなメタサーフェスジオメトリデータを GPU に更新するのにかかった時間 (フレーム時間外)
汎用オペレータ情報 🔄
total_cooks: プロセス開始以降にこのオペレータがクックされた合計回数cook_time: 直近のクック所要時間 (ミリ秒)cook_frame: このオペレータが最後にクックされたフレーム番号warnings: このオペレータの警告数errors: このオペレータのエラー数
クック統計 ⏱️
total_cooks:total_cooks— プロセス開始以降にこのオペレータがクックされた合計回数cook_time:cook_time— 直近のクック所要時間 (ミリ秒)cook_frame:cook_frame— このオペレータが最後にクックされたフレーム番号cooked_this_frame:cooked_this_frame— 当該フレームでクックされた場合は1
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: Active をオンにしてもキャッシュが蓄積されない
✅ Solution:
Pre-Fillが0以外になっていないか確認 — Pre-Fill が正値の間は Active がオフとして扱われるResetがオンになりっぱなしになっていないか確認 (オンの間は全エントリが毎クッククリアされる)- 入力 SOP が実際にクックされているか (Viewer で確認)、上流が変化していないと同一エントリが追加されるだけになる
❌ Problem: Output Index を動かしても出力が変わらない / Blend Position の効果が出ない
✅ Solution:
Output Indexの有効範囲は0〜Cache Size - 1。範囲外の値はクランプされるBlend Positionをオンにしないと整数インデックス単位の切り替えとなり、隣接エントリ間の線形補間は行われない- Math CHOP / Speed CHOP / LFO CHOP 等で Export しているか、Export の符号・スケールが意図通りか確認
❌ Problem: キャッシュのメモリ消費が大きい
✅ Solution:
Cache Points Onlyをオンにして、最初のフレームのトポロジを保持し以降は point データだけ蓄積するモードに切替 (入力ジオメトリのトポロジが毎フレーム変わらない場合のみ)Cache Sizeを必要最小限まで小さくし、Step Sizeを上げて長時間履歴を粗く保持- 前段に Convert SOP や Resample 系の SOP を入れて、入力ジオメトリ自体のポイント数を絞る
❌ Problem: Cache Points Only でトポロジが乱れる / 期待した形状にならない
✅ Solution:
Cache Points Onlyは 入力のトポロジが毎フレーム変化しない場合専用。パーティクル誕生・消滅やプリミティブ追加削除があるとオフにする- トポロジが時間変化する場合は
Cache Points Onlyをオフにして完全なジオメトリを各エントリで保持 - 代わりにメモリ消費を抑えたい場合は
Step Sizeを上げて低レートサンプリング、またはCache Sizeを絞る
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Cache SOP
- TouchDesigner公式ドキュメント – Trail SOP
- TouchDesigner公式ドキュメント – Sequence Blend SOP
- TouchDesigner公式ドキュメント – Pre-Filling

