
概要 📖 – 点の軌跡をつなげて描画
Trail POPは、入力 POP の点群を毎フレーム蓄積し、過去フレームの点を時系列に沿って線分やプリミティブで繋いで軌跡として出力する POPです。マウス軌跡・パーティクル履歴・波形ライン等、点の時間履歴をネットワーク上で線として可視化する処理の中核として機能します。
主な用途 🎯
- マウスやセンサー座標の軌跡をリアルタイム可視化
- GPU パーティクルの運動履歴をライン状に蓄積
- 音声波形やデータ列をオシロスコープ風の時系列ラインとして描画
- 属性マッチングでパーティクル個別の独立した軌跡を生成
- ジェネレーティブ表現のストローク・履歴アニメーションを構築
データフロー 🔄
入力: 毎フレームの点群
↓
過去フレームの点群を内部バッファに蓄積
↓
Connectivity 設定に沿って点同士を線分やプリミティブで接続
↓
出力: 履歴を保持した line strip / プリミティブ群
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Trail Page 📋
アクティブ制御 🎛️
Active .active ✅
– Active (アクティブ) — オンの間だけ入力 POP を内部バッファに追記し、軌跡を伸ばします
– オフにすると新規追加は止まり既存軌跡は保持。一時停止やイベント駆動の蓄積制御に使用
Always Cook .alwayscook 🔁
– Always Cook (常時クック) — 下流が要求しなくても毎フレーム強制的にクックさせるトグル
– 時間ベースで軌跡を伸ばすため通常はオン推奨。オフにすると下流参照がないフレームで蓄積が止まる場合あり
トレイル長 📏
Trail Length .length 📐
– Trail Length (軌跡の長さ) — 保持する軌跡の長さを時間単位で指定
– 古いサンプルはこの長さを超えた時点でバッファから順次破棄されます
Trail Length Unit .lengthunit ⏱️
– Trail Length Unit (長さの単位) — Trail Length を解釈する時間単位
– S (秒) / F (フレーム) / I (サンプル) から選択し用途に合わせる
Trail Increment .inc 📊
– Trail Increment (蓄積間隔) — 軌跡上の点と点の間隔を時間単位で指定
– 値を小さくすると密で滑らかな軌跡に、大きくすると間引かれた階段状の軌跡になります
Trail Increment Unit .incunit ⏱️
– Trail Increment Unit (間隔の単位) — Trail Increment を解釈する時間単位
– Trail Length と同じ単位系で揃えると挙動が直感的
Reset .reset 🔄
– Reset (リセット) — パルスパラメータ。蓄積された軌跡を全消去し、その瞬間の入力を 1 サンプルだけ保持した状態に戻します
– シーン切替やイベント開始時に履歴を初期化したい場合に使用
年齢属性の出力 .ageattr 🕒
経過時間を点の属性として出力する設定:
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
年齢属性を出力しない (デフォルト) |
| Seconds | .seconds |
点が追加されてからの経過時間を秒単位で age 属性として出力 |
| Frames | .frames |
点が追加されてからの経過時間をフレーム数で age 属性として出力 |
順序と補完 🔢
Oldest Point First .oldestpointfirst ↩️
– Oldest Point First (古い点を先頭に) — 出力点列の並び順を反転するトグル
– オフ (デフォルト) は新しい点が先頭、オンにすると古い点が先頭。後段でインデックス順に色を変える等の処理で使い分けます
Fill Missed Frames .fillmissedframes 🧩
– Fill Missed Frames (欠落フレーム補間) — ドロップフレームが発生した区間を内挿で埋めるトグル
– GPU 負荷が高い場面でフレーム落ちが起きても軌跡が途切れにくくなるが、補間で擬似的な点が挿入される点に注意
属性マッチング 🎯
Match by Attribute .attrmatch 🔗
– Match by Attribute (属性で対応付け) — オンにすると、同じ属性値を持つ点同士だけを線で繋ぎます
– パーティクル群でそれぞれ独立した軌跡を作りたい場合に必須のトグル
Attribute Name .attrname 🏷️
– Attribute Name (属性名) — 接続判定に使う点属性の名前
– id や uid 等、点ごとに一意な整数属性を指定するのが一般的
整数属性ビット幅 .uintmax 🔢
接続判定属性を符号なし整数として扱う場合の最大値レンジ:
| 項目 | 内部名 | 説明 |
|---|---|---|
| 4 bits UInt (max 16) | .uint4 |
0〜15 の範囲。少数のグループ ID 等に使用 |
| 8 bits UInt (max 256) | .uint8 |
0〜255 の範囲。小規模パーティクル群向け |
| 12 bits UInt (max 4096) | .uint12 |
0〜4095 の範囲 |
| 16 bits UInt (max 65,536) | .uint16 |
0〜65535 の範囲。中規模パーティクル向けの汎用設定 |
| 20 bits UInt (max 1 M) | .uint20 |
0〜約 100 万の範囲 |
| 24 bits UInt (max 16 M) | .uint24 |
0〜約 1600 万の範囲 |
| 28 bits UInt (max 268 M) | .uint28 |
0〜約 2 億 6800 万の範囲 |
| 32 bits UInt (max 4 B) | .uint32 |
0〜約 42 億の範囲。大規模 GPU パーティクル系で使用 |
ライン上限 📈
Max Number of Line Strips .maxls 🔢
– Max Number of Line Strips (ライン本数の上限) — 確保するライン本数の上限値
– 実際のライン本数 (info popup で確認可能) より大きい値を設定しないと、軌跡が一部生成されません
接続形態 .surftype 🧵
蓄積した点同士を結ぶプリミティブの選択:
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
プリミティブを生成せず、点 (point) のみを出力 |
| Point Primitives | .points |
1 点ずつ独立した point primitive として出力 |
| Rows | .rows |
同じ列インデックスの点を線分で接続 (一般的な軌跡描画) |
| Columns | .cols |
同じ行インデックスの点を線分で接続 |
| Rows and Columns | .rowcol |
行と列の両方向を線分で接続し格子状に |
| Triangles | .triangles |
隣接点で三角形を生成し面として接続 |
| Alternating Triangles | .alttriangles |
交互方向で三角形を生成し、ストリップ状の帯面を作成 |
| Quadrilaterals | .quads |
四角形で接続。リボン状のサーフェスを生成する用途 |
| Closed | .closed |
Closed (閉じる) — オンにすると軌跡の末端を先頭頂点とつなげ、ループ状の閉曲線・閉サーフェスにします |
Transform Page 🔄
変換順序 .xord 🔀
拡縮・回転・移動を適用する順番の選択:
| 項目 | 内部名 | 説明 |
|---|---|---|
| Scale Rotate Translate | .srt |
拡縮 → 回転 → 移動 の順で適用 (デフォルト、最も一般的) |
| Scale Translate Rotate | .str |
拡縮 → 移動 → 回転 の順で適用 |
| Rotate Scale Translate | .rst |
回転 → 拡縮 → 移動 の順で適用 |
| Rotate Translate Scale | .rts |
回転 → 移動 → 拡縮 の順で適用 |
| Translate Scale Rotate | .tsr |
移動 → 拡縮 → 回転 の順で適用 |
| Translate Rotate Scale | .trs |
移動 → 回転 → 拡縮 の順で適用 |
回転順序 .rord 🌀
各軸まわりの回転を適用する順番の選択:
| 項目 | 内部名 | 説明 |
|---|---|---|
| Rx Ry Rz | .xyz |
X 軸 → Y 軸 → Z 軸 の順で回転 (デフォルト) |
| Rx Rz Ry | .xzy |
X 軸 → Z 軸 → Y 軸 の順で回転 |
| Ry Rx Rz | .yxz |
Y 軸 → X 軸 → Z 軸 の順で回転 |
| Ry Rz Rx | .yzx |
Y 軸 → Z 軸 → X 軸 の順で回転 |
| Rz Rx Ry | .zxy |
Z 軸 → X 軸 → Y 軸 の順で回転 |
| Rz Ry Rx | .zyx |
Z 軸 → Y 軸 → X 軸 の順で回転 |
移動回転スケール 📐
Translate .t ↔️
– Translate (移動) — 軌跡上の点を時間方向に対して X / Y / Z 軸で平行移動
– 内部成分は tx / ty / tz の 3 軸。値をアニメさせると軌跡全体がスライドします
Rotate .r 🔄
– Rotate (回転) — 軌跡上の点を X / Y / Z 軸まわりに度数 (degree) で回転
– 内部成分は rx / ry / rz。Rotate Order と Pivot の組合せで挙動が変化します
Scale .s 🔍
– Scale (拡縮) — 軌跡を X / Y / Z 軸方向に拡大・縮小
– 内部成分は sx / sy / sz。Pivot を基点として拡縮されます
Pivot .p 📍
– Pivot (基点) — 回転・拡縮の中心となる座標 (px / py / pz)
– 軌跡の中心を変えたい場合や、特定点を軸に回転させたい場合にここを変更
Common Page 🔧
Bypass .bypass 🚫
POP の処理をスキップして入力をパススルーする設定:
- オン: 最初の入力 (input1) をそのまま出力にパススルー、POP 内部の処理を無効化
- 用途: デバッグ時に特定 POP の効果を一時的に外して比較する際に使用
Free Extra GPU Memory .freeextragpumem 🧠
蓄積した GPU メモリの解放:
- Free Extra GPU Memory パルス: 出力ポイント数が増減を繰り返した際に確保されたままの GPU メモリを明示的に解放するパルスパラメータ
- 用途: Trail Length を頻繁に変動させた後や、長尺の軌跡を捨てた直後に未使用 VRAM を返却
Delete Input Attributes .delinputattrs 🗑️
出力属性の絞り込みパターン:
- Delete Input Attributes パターン: 出力に残したい属性名のパターン (例:
P N Cd) を指定。指定外の属性は破棄される - 用途: Trail POP は属性を全フレーム分蓄積するため、不要属性を切ると VRAM・帯域を大きく節約できる
実践アイデア 💡
Example 1: マウス座標の軌跡可視化 🖱️
Mouse In CHOP → CHOP to POP → Trail POP → Geometry COMP → Render TOP
Mouse In CHOP のリアルタイム座標を CHOP to POP で 1 ポイントの POP に変換し、Trail POP に流して過去フレームのマウス位置を線分として蓄積する基本構成。Trail Length を 2 秒程度に、Connectivity を Rows に設定するとなめらかなストロークが描画できます。
- Mouse In CHOP でマウス座標
tx/tyを取得 - CHOP to POP で 1 ポイントの POP に変換し
P属性に座標をマッピング - Trail POP の
Trail Lengthを 2 秒、ConnectivityをRowsに設定 - Geometry COMP と Line MAT を当ててレンダリング
Example 2: 粒子ごとの個別軌跡 ✨
Random POP (初期位置 + id) → Feedback POP (毎フレーム位置更新) → Trail POP (Match by Attribute = id) → Line MAT → Render TOP
Feedback POP で毎フレーム更新される GPU パーティクル位置を Trail POP で蓄積し、Match by Attribute を有効にして id 属性ごとに独立した軌跡を生成するセットアップ。パーティクル数が多い場合は Attrib is UInt を適切なビット幅 (uint16 等) に揃えると高速化できます。
- Random POP で初期位置を生成し、点ごとに
id属性を割り当て - Feedback POP で位置を毎フレーム更新するループを構成
- Trail POP の
Match by Attributeをオン、Attribute Nameをidに設定 Attrib is UIntを粒子総数に合わせて (例: 65,536 個ならuint16) 設定し、Line MAT でレンダリング
Example 3: 音声波形の時系列ライン描画 🌊
Audio Device In CHOP → CHOP to POP → Trail POP (細かい Increment) → Geometry COMP → Render
Audio Device In CHOP で取得した音声サンプルを CHOP to POP で点群化し、Trail POP に通して時系列にラインとして描画するオシロスコープ風の構成。Trail Increment を 1 フレームに、Trail Length を 1 秒程度に設定すると視認性の高い波形ラインになります。
- Audio Device In CHOP でマイク・ラインインから音声を取得
- CHOP to POP で音声サンプルを
P属性付きの点群に変換 - Trail POP の
Trail Incrementを 1 フレーム、Trail Lengthを 1 秒、ConnectivityをRowsに設定 Age AttributeをSecondsに設定し、後段で色をフェードアウト
関連オペレータ 🔗
類似機能OP 🔍
- Trail CHOP — チャンネル時系列版。CHOP の値履歴をサンプル列として蓄積
- Cache POP — 過去フレームをスナップショットとして保持しランダムアクセス
- Feedback POP — 前フレーム出力を取込み状態を反復更新する状態保持型
組み合わせ推奨OP 🔄
- CHOP to POP — CHOP の値を点群に変換して Trail に流し込む前段
- Feedback POP — 毎フレーム更新されるパーティクル位置を蓄積対象として渡す
- Merge POP — 複数ソースの点群を合流してから蓄積
- Random POP — Match by Attribute 用の id 属性を持つ点群を初期生成
- Math POP — 蓄積前後で位置や色を加算・スケーリング
- Line MAT — Trail POP の line strip を線として描画する MAT
前処理・後処理POP 🎯
- 前処理: CHOP to POP、Random POP、Feedback POP、Particle POP、In POP
- 後処理: Math POP、Transform POP、Merge POP、Out POP
Info POP情報 📊
Trail POP は Info CHOP による詳細情報取得に対応しています。
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: Trail POP 出力時点で蓄積されている総ポイント数num_prims: 生成された line strip / プリミティブの本数。Max Number of Line Strips に達していないか監視に使用num_point_attribs: 出力 POP の point 属性数 (Age Attribute オン時に増加)num_vertex_attribs: 出力 POP の vertex 属性数num_prim_attribs: 出力 POP の primitive 属性数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 軌跡が描画されない / ラインが見えない
✅ Solution:
Activeがオンになっているか確認 (オフの間は新規追加が止まる)ConnectivityがNoneのままだとプリミティブが生成されないためRows等に変更- Geometry COMP に Line MAT を当てているか、Wireframe レンダリングになっているか確認
❌ Problem: パーティクル全部が 1 本の線として繋がってしまう
✅ Solution:
Match by Attributeをオンにし、Attribute Nameに点ごとに一意な属性 (例:id) を指定- 上流の Random POP や GLSL POP で各点に固有 id を割り当て
Attrib is UIntを点数の最大値以上のビット幅 (例: 65,536 個ならuint16) に設定
❌ Problem: 軌跡が短くて途中で途切れる
✅ Solution:
Trail Lengthを伸ばし、Trail Length Unitが想定どおり (秒 / フレーム / サンプル) か確認Max Number of Line Stripsが info popup の実本数より小さくないか点検- ドロップフレームが疑わしい場合は
Fill Missed Framesを有効化して補間
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

