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

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

Cache SOP のジオメトリキャッシュ機能を示す図

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

概要 📖 – ジオメトリ履歴のキャッシュと再生

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 オンなら隣接エントリと補間して) 出力

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 が最も古いエントリ
有効範囲は 0Cache Size - 1
Speed CHOPLFO 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 のトポロジを最初のフレームに固定し、ポイント位置だけを軽量に蓄積できます。

  1. Particle SOP を配置し、好みのソース・フォース設定で点群を動かす
  2. Particle SOP の出力を Cache SOP に接続し、Active をオン、Cache Size120 程度に設定
  3. Cache Points Only をオンにしてトポロジを最初のフレームに固定 (パーティクル数が変動しない設定であることが前提)
  4. LFO CHOP を 1 つ作成し、出力範囲を 0Cache Size - 1 にスケーリングして Cache SOP の Output Index に Export
  5. Blend Position をオンにすると、LFO の連続値が隣接キャッシュ間で線形補間され滑らかなスクラブ再生になる

Example 2: Pre-Fill で起動直後から完全な履歴バッファ状態を再現 ⏳

Sphere SOP (Animate される) → Cache SOP (Cache Size=60, Pre-Fill=1) → Out SOP

ファイルを開いた直後やプロジェクト起動直後でも、キャッシュが既に満杯の状態で再生を始めたい場合のパターンです。Pre-Fill1 以上に設定しておくと、Cache SOP は起動時に Cache Size 回ぶんクックしてバッファを瞬時に充填します。保存時にもこの値が記録されるため、再ロード後も自動で再充填されます。

  1. アニメーションする入力 SOP (例: Sphere SOP の Center を Math CHOP / Constant CHOP で時間駆動) を準備
  2. Cache SOP を接続し、Cache Size を必要な履歴フレーム数 (例: 60) に設定
  3. Pre-Fill1 に設定し、起動時に 60 回ぶんクックしてキャッシュを満杯化
  4. Active をオン、Pre-Fill0 に戻して通常の毎クック追加モードに切り替え
  5. プロジェクトを保存・再ロードし、起動直後から想定の履歴バッファで再生が始まることを確認

Example 3: Step Sizeで長履歴を低メモリ保持 🪜

Animated Geometry → Cache SOP (Cache Size=120, Step Size=5) → Math CHOP で Output Index を Export → Material SOP

120 フレーム ぶんのキャッシュエントリでも、Step Size5 に設定すれば実時間で 600 フレーム (120 × 5) ぶんの履歴をカバーできます。サンプリング解像度は粗くなりますが、長時間にわたる動きの分布を見たい・低メモリで履歴を保ちたい場合に有効です。

  1. 毎フレーム変化する SOP (例: Particle SOP やアニメーション付き Geometry) を入力に接続
  2. Cache SOP の Cache Size120Step Size5 に設定
  3. Math CHOP で 0〜119 の整数を生成し Output Index に Export
  4. 出力を Material SOP / Render TOP に渡して、サンプリング間隔が広い履歴の見え方を確認
  5. メモリ消費に余裕があれば Step Size=1 に戻して時間解像度を上げる、足りなければ Cache Size を絞るというトレードオフを調整

関連オペレータ 🔗

類似機能OP 🔍

  • Trail SOP — 入力ジオメトリの過去フレーム履歴を 1 つの SOP にまとめて trail として可視化 (Cache は履歴を保持して任意フレームを再生、Trail は過去履歴を 1 つに結合して可視化)
  • Sequence Blend SOP — 複数入力ジオメトリのシーケンス間を Blend する (Cache が時系列を内部に持つのに対し、Sequence Blend は外部入力シーケンスをブレンド)

組み合わせ推奨OP 🔄

  • Speed CHOPOutput Index を駆動して履歴を可変速度で再生・スクラブ
  • LFO CHOPOutput Index を周期波形で動かしてループ再生・揺らぎ演出
  • Trigger CHOP — イベント発火時に Reset Pulse を打ってキャッシュを初期化

前処理・後処理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-Fill0 以外になっていないか確認 — Pre-Fill が正値の間は Active がオフとして扱われる
  • Reset がオンになりっぱなしになっていないか確認 (オンの間は全エントリが毎クッククリアされる)
  • 入力 SOP が実際にクックされているか (Viewer で確認)、上流が変化していないと同一エントリが追加されるだけになる

❌ Problem: Output Index を動かしても出力が変わらない / Blend Position の効果が出ない
✅ Solution:

  • Output Index の有効範囲は 0Cache 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 を絞る

参考資料 📚

その他 🔗

公式リソース 📖

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