
概要 📖 – 動く形状の残像を記録
Trail SOPは、入力ジオメトリを過去フレーム分キャッシュし、動きの軌跡を残像として描き出す SOPです。Trail Length で残像の長さ、Result Type で軌跡の構築方法、Compute velocity で速度属性の付与を制御し、動く形状の尾やゴーストを生成します。
主な用途 🎯
- 動くジオメトリの過去フレームを記録して残像 (トレイル) を生成する用途で、入力に流れ込む形状を過去数フレーム分キャッシュし、その軌跡を 1 ノードで可視化
- Result Type による残像の構築方法の切替で、元形状の保持 (Preserve Original)、メッシュ接続、ポリゴン接続、速度計算の 4 方式から軌跡の出力形態を選択
- Trail Length による残像の長さ調整で、何フレーム分さかのぼって軌跡を描くかを指定し、長い尾を引く動きや短い瞬間の残像を作り分け
- Compute velocity による速度属性の付与で、点が速く動くほど大きくなる速度 (velocity) 属性を計算し、後段のモーションブラーやパーティクル制御に活用
- Trail Increment による軌跡の間引きで、フレームを一定間隔で飛ばして点数を減らし、長さを保ったまま残像の密度を下げて軽量化やゴースト表現を実現
- Reset / Reset Pulse による軌跡のクリアで、蓄積したキャッシュをいつでも初期化し、現在の入力形状だけの状態に戻して描き直し
データフロー 🔄
入力: 毎フレーム変化するジオメトリ (移動・変形する点や面)
↓
Trail Length 分のフレームを Cache に蓄積し Result Type に従い軌跡を構築
↓
Connectivity でメッシュ化、Compute velocity で速度属性を付与
↓
出力: 過去フレームの残像を含むジオメトリ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
軌跡の構築方法 .result 🎛️
Result Type (結果の種類) — トレイル (残像) ジオメトリをどう構築するかを指定するメニューパラメータ。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Preserve Original | .preserve |
Preserve Original (元形状を保持) — 過去フレームの元ジオメトリをそのまま重ねて残す (ゴースト表示向き) |
| Connect as Mesh | .mesh |
Connect as Mesh (メッシュとして接続) — 各フレームの点を結んでメッシュ (面) として接続 |
| Connect as Polygons | .poly |
Connect as Polygons (ポリゴンとして接続) — 各フレームの点を結んでポリゴンとして接続 |
| Compute velocity | .velocity |
Compute velocity (速度を計算) — 点が速く動くほど大きくなる速度 (velocity) 属性を点に付与 |
残像の長さと間引き 📏
Trail Length .length 📏
– Trail Length (残像の長さ) — Trail SOP が使う最大フレーム数を指定し、残像の長さを決定
– 例: 25 を指定すると直前 25 フレーム分のジオメトリを連結
– 値を大きくするほど長い尾を引いた軌跡になる
Trail Increment .inc ⏭️
– Trail Increment (フレーム間引き) — 指定したフレーム数だけ飛ばして軌跡を構築し、点数を減らしつつ同じ長さを維持
– 軌跡の解像度 (点の密度) を下げて軽量化する用途
– 2 以上にすると、同じ長さの軌跡でも形状コピーの数が少なくなる (Preserve Original でのゴースト表現に有効)
キャッシュと評価範囲 💾
Cache Size .cache 💾
– Cache Size (キャッシュサイズ) — 使用可能なメモリ内に保持しておくフレーム数
– 残像の長さに応じて十分なキャッシュを確保する必要がある
Evaluate Within Frame Range .evalframe 🎞️
– Evaluate Within Frame Range (フレーム範囲内で評価) — オンにすると、現在のフレーム範囲 ($FSTART 〜 $FEND) 内でのみ評価 (クック) する
– オフの場合、開始フレームより前でも SOP が評価される
メッシュの接続方式 .surftype 🔗
Connectivity (接続方式) — メッシュとして接続する際 (Result Type がメッシュ系) に生成するサーフェスの種類を指定するメニューパラメータ。
| 項目 | 内部名 | 説明 |
|---|---|---|
| Rows | .rows |
Rows (行) — 水平方向のラインを生成 |
| Columns | .cols |
Columns (列) — 垂直方向のラインを生成 |
| Rows and Columns | .rowcol |
Rows and Columns (行と列) — 行と列の両方。ワイヤーフレーム表示ではクワッド状だが、すべてのポリゴンは開いた状態 |
| Triangles | .triangles |
Triangles (三角形) — グリッドを三角形で構築 |
| Quadrilaterals | .quads |
Quadrilaterals (四角形) — 四角形で側面を生成 (デフォルト) |
| Alternating Triangles | .alttriangles |
Alternating Triangles (交互三角形) — 向きが交互になる三角形を生成 (Triangles オプションに類似) |
行の閉じと速度倍率 🎚️
Close Rows .close 🔁
– Close Rows (行を閉じる) — 選択すると、出力選択の行を閉じた状態にする
Velocity Scale .velscale 🚀
– Velocity Scale (速度倍率) — Compute velocity を選択している場合に、速度を指定値でスケール
– 速度属性の大きさを後段の用途に合わせて調整
軌跡のリセット ♻️
Reset .reset ♻️
– Reset (リセット) — オンの間、キャッシュしたジオメトリをクリアし、トレイルを入力の現在状態に戻す
– オンを維持している間は軌跡が蓄積されない
Reset Pulse .resetpulse ⏺️
– Reset Pulse (リセットパルス) — 1 フレームだけジオメトリをリセットするパルス
– ボタンを押した瞬間に軌跡をクリアして描き直し
実践アイデア 💡
Example 1: 動く点の軌跡を描く ✨
Sphere SOP → Transform SOP (アニメ移動) → Trail SOP (Result Type=Connect as Polygons, Trail Length=30) → Out SOP
アニメーションで移動する小さな球の動きを Trail SOP で過去フレーム分連結し、軌跡をポリゴンラインとして描く基本構成です。Transform SOP のパラメータに時間で変化する式を入れて点を動かし、Trail SOP に流すと、Trail Length で指定した数のフレーム分だけ過去の位置が線で連結され、動きの尾が可視化されます。
- Sphere SOP を 1 個配置し、小さめの球を作る
- Transform SOP を後段に置き、Translate に時間で変化する式 (例: 正弦波) を入れて球を動かす
- Trail SOP を接続し、
Result TypeをConnect as Polygonsに切替 Trail Lengthに30程度を指定 (直前 30 フレーム分の軌跡)- 再生して球の移動に追従する軌跡ラインが描かれることを Geometry Viewer で確認
Example 2: 残像ゴーストを重ねる 👻
Geometry (アニメ) → Trail SOP (Result Type=Preserve Original, Trail Increment=3) → Material SOP
動く形状そのものを過去フレーム分だけ重ねて表示し、ストロボ的なゴースト (残像) を作る用途です。Result Type を Preserve Original にすると過去の形状コピーがそのまま残り、Trail Increment を上げてフレームを間引くことで、密集しすぎないコマ送り風のゴースト表現になります。
- アニメーションする任意のジオメトリ (移動・回転する形状) を用意
- Trail SOP を接続し、
Result TypeをPreserve Originalに切替 Trail Lengthでゴーストを残すフレーム数を指定Trail Incrementを3程度に上げてコピー数を間引く- 再生してコマ送り状のゴーストが重なって表示されることを確認
Example 3: 速度属性を後段で利用 🚀
Geometry (アニメ) → Trail SOP (Result Type=Compute velocity, Velocity Scale) → 後段の速度依存処理
Trail SOP の Compute velocity モードで点ごとの速度 (velocity) 属性を生成し、後段でモーションブラーやパーティクル制御に渡す用途です。点が速く動くほど velocity 属性が大きくなるため、Velocity Scale で属性値を調整したうえで、速度に応じて見た目や挙動を変える表現に活用できます。
- アニメーションするジオメトリを Trail SOP に接続
Result TypeをCompute velocityに切替Velocity Scaleで速度属性の大きさを調整- 後段で velocity 属性を参照する処理 (モーションブラーや速度依存の描画) に接続
- 点の速さに応じて velocity が変化することを確認
関連オペレータ 🔗
類似機能OP 🔍
- Particle SOP — 点群を時間発展させて動かす (Trail は既存形状の過去フレーム記録、Particle はシミュレーションによる点の生成・移動)
- Spring SOP — バネ物理で点を時間変化させる (Trail は軌跡の記録、Spring は動き自体の生成)
組み合わせ推奨OP 🔄
- Transform SOP — 前段で形状を時間移動・回転させ、その動きを Trail SOP に記録させる
- Skin SOP — Trail が出力した各フレームの輪郭を後段で面張りしてサーフェス化
- Convert SOP — Trail のメッシュ・ポリゴン出力を後段で別の形式に変換
- Resample SOP — Trail が連結した軌跡ラインを後段で一定間隔に再サンプリング
前処理・後処理SOP 🎯
- 前処理: Transform SOP、Sphere SOP、Line SOP、Particle SOP
- 後処理: Skin SOP、Convert SOP、Resample SOP、Facet SOP、Material SOP、Out SOP
Info CHOP情報 📊
Trail 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— このオペレータが最後にクックされたフレーム番号
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 軌跡 (残像) が描かれない
✅ Solution:
- 入力ジオメトリが実際に毎フレーム動いているか確認 (静止していると軌跡は重ならない)
Trail Lengthが1など短すぎないか確認し、十分なフレーム数を指定Resetがオンのままになっていないか確認 (オンだと軌跡が蓄積されない)
❌ Problem: 軌跡が途中で途切れる・短くなる
✅ Solution:
Cache SizeがTrail Lengthに対して十分か確認し、必要なフレーム数を保持できるよう拡大Evaluate Within Frame Rangeをオフにして、フレーム範囲外でも評価されるようにする- 前段の Transform SOP 等で動きが毎フレーム継続しているか確認
❌ Problem: 残像のコピーが多すぎて重い
✅ Solution:
Trail Incrementを2以上に上げてフレームを間引き、点数を削減Trail Lengthを短くして記録フレーム数を減らす- 後段で Resample SOP を使い軌跡ラインの点数を整理
❌ Problem: リセットしても軌跡が消えない
✅ Solution:
- 1 フレームだけクリアしたい場合は
Reset Pulseを押す (Resetはオンの間だけ有効) Resetをオンにした状態を維持して新しい蓄積を止めているか確認- 入力側に動きが残っていないか (前段がまだアニメしていないか) を確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Trail SOP
- TouchDesigner公式ドキュメント – Particle SOP
- TouchDesigner公式ドキュメント – Spring SOP
- TouchDesigner公式ドキュメント – Skin SOP

