
概要 📖 – ラインの点を再分布
Line Resample POPは、入力ラインストリップを 5 種類の方式で再サンプリングし、ポイント密度を均一化して出力する POPです。等距離・曲率ベース・キーフレーム等の方式を切り替えて、粗い制御点列やジグザグなパーティクル軌跡を均一な点間隔のラインに整え直せます。
主な用途 🎯
- ラインストリップの点列を等距離・曲率・キーフレームで再サンプリングし、ポイント密度を均一化する
- 手描きカーブやパーティクル軌跡のジグザグした点間隔を整え、後段レンダリングで滑らかなストロークに整える
- 曲率が大きい区間だけ細かくサンプリングし、直線部分は粗く保つことで頂点数を最適化する
- 独立変数属性 (Independent Variable) を時間軸とみなして、アニメーションの中割りポイントを等パラメトリックに生成する
- 制御点フラグ属性で元の頂点位置を保持しながら、間に補間ポイントを追加して密度だけ上げる
- 下流の Attribute POP や Render TOP に渡す前段で頂点間隔を整えて、後処理の品質を底上げする
データフロー 🔄
入力: ラインストリップ (制御点列)
↓
リサンプル方式の選択
↓
距離・分割数・独立変数を基準に再サンプリング
↓
出力: 点密度が整ったラインプリミティブ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Resample Page 📋
Resample Method .resamplemethod 🎛️
ラインストリップをどの基準で再サンプリングするかを決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
再サンプリングを行わず、入力をそのまま出力 |
| Divisions per Line Strip | .linestrip |
各ラインストリップを一定の分割数で均等に区切り、固定数の点を生成 |
| Distance between Points | .dist |
隣接点間の距離が指定範囲に収まるように、等距離で点を取り直す |
| By Curvature | .curvature |
曲率が大きい区間ほど細かく、直線的な区間は粗く点を配置する |
| Points as Keyframes | .keyframes |
独立変数属性をキーフレーム値として、等パラメトリック分布でサンプリングする |
サンプリング制御 🔢
リサンプル方式に応じた分割数・距離・バイアス・属性を指定するパラメータ群です。
Divisions .resampledivs 🔢
– Divisions (分割数) — 各ラインストリップを均等に区切るときの分割数です。
– Divisions per Line Strip モード時に有効になります。
Min Distance .resamplemindist 📏
– Min Distance (最小距離) — 出力ラインで隣接点間が下回ってはいけない最小距離です。
– 距離ベースのリサンプル時に過密化を防ぐため、ここで指定した距離より近い点は生成されません。
Max Distance .resamplemaxdist 📐
– Max Distance (最大距離) — 隣接点間が超えてはいけない最大距離です。
– 距離ベースのリサンプル時にこの値を超えるセグメントには追加点が挿入され、密度の不均一を解消します。
Min Max Bias .resampleminmaxbias ⚖️
– Min Max Bias (最小最大バイアス) — 点生成を最小距離側に寄せるか、最大距離側に寄せるかのバイアス値です。
– 値が小さいほど密に、大きいほど疎にポイントが配置されます。
Control Points Attribute .usectrlpoints 🏷️
– Control Points Attribute (制御点属性使用) — オンにすると、各点に値が 0 または 1 の属性が割り当てられ、どの点が元の制御点かを下流の POP で識別できるようになります。
– パーティクル軌跡や手描きカーブの「元の頂点」を保持して再サンプル後にマーカーや色を付けたいときに使います。
Control Points Attribute Name .ctrlpointsattr 🔤
– Control Points Attribute Name (制御点属性名) — 上記のフラグを書き込む属性の名前を指定します。
– 既存属性と衝突しないよう、自由に名前を変更できます。
Independant Variable Attribute .indvarattr 🏷️
– Independant Variable Attribute (独立変数属性) — リサンプリングの基準にするポイント属性名を指定します。
– 通常は距離やパラメトリック値、時間に相当する属性を指定し、その値を一定刻みでサンプリングします。
Independant Variable Step .indvarstep 📐
– Independant Variable Step (独立変数の刻み幅) — 独立変数の取り出し刻み幅です。独立変数の範囲全体に対する割合 (fraction) で指定するのが一般的です。
– 値が小さいほど細かくサンプリングされます。
Maximum Number of Vertices .maxverts 🧠
– Maximum Number of Vertices (最大頂点数) — GPU に確保する頂点数の上限値です。実際に生成される頂点数より大きい値を設定する必要があります。
– 値が大きいほど GPU メモリを消費します。Info ポップアップで現在の頂点数を確認しながら調整します。
Max Tries for Binary Search .maxtries 🔁
– Max Tries for Binary Search (二分探索の最大試行回数) — 距離ベースで線形リサンプリングする際の二分探索の最大繰り返し回数を指定します。
– 大きいほど精度は上がりますが計算コストが増えます。
Remove Unused Points .rmvunusedpts 🗑️
– Remove Unused Points (未使用ポイント削除) — どのプリミティブからも参照されないポイントを出力から除去します。
– 下流のジオメトリ処理を軽量化したいときに有効です。
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: 軌跡を等間隔に均す ✨
Particle POP → Trail POP → Line Resample POP (Distance between Points) → Render
Particle POP のパーティクル軌跡を Trail POP でラインストリップ化したあと、Line Resample POP の等距離リサンプルで点間隔をそろえ、レンダリング向けの均一なストロークに整える用途です。
- Particle POP で軌跡を生成し、Trail POP で各点の履歴をラインストリップに変換
- Line Resample POP を後段に接続し、Resample Method を
Distance between Pointsに設定 - Min Distance / Max Distance を調整して、出力点の最小・最大間隔を決定
- 下流のレンダリング POP / SOP で均一な点密度の曲線として描画
Example 2: 曲率で点密度を変える 📐
Curve POP → Line Resample POP (By Curvature) → Transform POP
Curve POP で生成した曲線に対して、Line Resample POP の曲率ベースモードを使うと、湾曲部分はメッシュを精細に、直線部分は頂点数を抑えて軽量化するという最適化が一発で実現できます。
- Curve POP で制御点列を構成し、Line Resample POP の Resample Method を
By Curvatureに設定 - Min Distance と Max Distance を調整して、湾曲部分と直線部分の密度範囲を指定
- Control Points Attribute をオンにして、下流の Transform POP で元の制御点位置を識別
Example 3: 属性で点を取り直す 🔁
Line POP → Attribute POP → Line Resample POP (Points as Keyframes)
独立変数属性を時間軸とみなしてキーフレーム的にリサンプリングすることで、アニメーションの中割りポイントを等間隔で生成し、per-frame の色や速度を後段で割り当てるのに便利です。
- Line POP で制御点列を構成し、Attribute POP で時間に相当する属性 (例:
t) を付与 - Line Resample POP の Resample Method を
Points as Keyframesに設定し、Independant Variable Attribute にtを指定 - Independant Variable Step を 0.05 など細かい刻みに設定して中割りポイントを生成
関連オペレータ 🔗
類似機能OP 🔍
- Line Divide POP — 分割 + 補間 + 事後リサンプルを一気にこなす上位互換。Line Resample は等距離・曲率・キーフレームでの再サンプリングに特化
- Line Smooth POP — ラインのジグザグを平均化で平滑化する POP。Line Resample が点間隔を整え直すのに対し、Line Smooth は既存ポイント位置を平均化で動かす
組み合わせ推奨OP 🔄
- Line POP — 前段でラインプリミティブを生成、Line Resample でその点間隔を整える
- Curve POP — 前段で曲線を構成し、Line Resample で密度を調整して下流に渡す
- Particle POP — 前段でパーティクル発生源を構成、Trail と組み合わせて軌跡を均一密度に整える
- Trail POP — 前段で各点の履歴を線にし、Line Resample で間隔を揃えて綺麗な軌跡に仕上げる
- Attribute POP — 前段で独立変数属性 (時間など) を付与、Line Resample がそれをキーフレームとしてサンプリング
- Transform POP — 後段で再サンプリング結果のラインに移動・回転・スケールを適用
- Convert POP — 後段で均一化されたラインを別のプリミティブ形式 (パッチ等) に変換
前処理・後処理POP 🎯
- 前処理: Line POP、Curve POP、Particle POP、Trail POP、Attribute POP
- 後処理: Transform POP、Convert POP、Line Smooth POP、Line Divide POP
Info POP情報 📊
Line Resample 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: エラー数
POP 汎用情報 📊
num_points: Line Resample が生成した出力ジオメトリのポイント数num_prims: 出力ラインプリミティブの総数num_point_attribs: 出力ポイント属性数 (制御点フラグ属性等を含む)num_vertex_attribs: 出力ジオメトリの頂点属性数num_prim_attribs: 出力ジオメトリのプリミティブ属性数gpu_memory_used: この POP が使用している GPU メモリ量
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 想定どおりに点が増えない
✅ Solution:
Resample MethodがNoneのままだと再サンプリングは行われないため、目的に応じてDivisions per Line Strip/Distance between Points/By Curvature/Points as Keyframesに切替Maximum Number of Verticesが小さい値に制限されていると、想定数より少ない頂点しか生成されないため Info ポップアップの実頂点数を見ながら拡大- 距離ベース時に
Min Distanceが大きすぎると過密化を防ぐためにサンプリングが抑制されるため、値を下げて再確認
❌ Problem: 曲率モードで湾曲部分が荒くなる
✅ Solution:
Min Distanceを小さく設定して、湾曲部分の最小間隔の下限を下げるMax Distanceも合わせて下げ、湾曲・直線両方の上限を引き締める- 前段で密度が足りない場合は Line Divide POP で補間してから Line Resample に渡す
❌ Problem: Points as Keyframes で点が偏る
✅ Solution:
Independant Variable Attributeに指定した属性が、ライン全長で単調増加 (もしくは単調減少) しているか確認Independant Variable Stepが大きすぎると粗くなり、小さすぎると過密になるため、独立変数の範囲全体に対する割合 (fraction) で調整- 属性値の分布が不均一な場合は、前段で Attribute POP を使って独立変数を作り直す
❌ Problem: CPU 側で出力頂点数が取得できない
✅ Solution:
Maximum Number of Verticesの値で確保サイズを確認しつつ、Info ポップアップで実頂点数を取得- プログラムから参照したい場合は Info CHOP を後段に接続して
num_pointsを取得 - GPU と CPU の同期が必要な場合は下流に CPU 読み戻し対応の POP を挟む構成を検討
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Line Resample POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- 属性 (Attribute) の基礎
- TouchDesigner公式ドキュメント – Line Divide POP (関連: 分割+補間+リサンプル)

