
概要 📖 – 曲線をなめらかに分割
Line Divide POPは、入力ラインの制御点間を再分割・補間して、なめらかで密度の整った曲線として出力する POPです。分割条件 (固定数 / 距離 / 曲率) と補間メソッド (線形 / カーディナル / B スプライン / ベジェ) を組み合わせて、粗い制御点列を滑らかな曲線として再構築できます。
主な用途 🎯
- 長いラインストリップを定間隔・距離・曲率に応じて再分割し、密度を整える
- 少数の制御点から線形・カーディナル・ベジェ・B スプラインで滑らかな補間曲線を生成する
- 分割後にさらに距離やキーフレーム条件で再リサンプルし、ポイント密度を二段階で調整する
- 制御点フラグ属性 (ControlPoint 属性) を付与し、下流の POP で元の頂点を識別する
- 独立変数属性 (Independent Variable) でラインの長さ進行を制御し、等パラメトリック分布を作る
- パーティクル軌跡や手描きカーブを補間で滑らかにし、レンダリング向けの高品質ストロークに整える
データフロー 🔄
入力: ラインストリップ (制御点列)
↓
区切りメソッドで再分割
↓
補間メソッドで間を埋める
↓
リサンプル方式で再サンプリング
↓
出力: 補間・再分割されたラインプリミティブ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Divide Page 📋
Divisions Method .divmethod 🎛️
ラインをどの基準で再分割するかを決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
再分割を行わず、制御点列をそのまま補間処理に渡す |
| Divisions per Segment | .segment |
各セグメント (制御点間) を一定の分割数で均等に区切る |
| Distance between Points | .dist |
隣接点間の距離が指定範囲に収まるように区切りを挿入 |
| Distance by Curvature | .curvature |
曲率が大きい箇所ほど細かく、直線的な箇所は粗く区切りを挿入 |
分割数・距離設定 🔢
区切り方法に応じた分割数・距離・バイアスを指定するパラメータ群です。
Divisions .divs 🔢
– Divisions (分割数) — 各セグメントを均等に区切るときの分割数です。
– Divisions per Segment モード時に有効になります。
Min Distance .mindist 📏
– Min Distance (最小距離) — 出力ラインで隣接ポイント間が下回ってはいけない最小距離です。
– 距離ベースの区切りモード時に有効で、ポイントの過密化を防ぎます。
Max Distance .maxdist 📐
– Max Distance (最大距離) — 隣接ポイント間が超えてはいけない最大距離です。
– この値を超えたセグメントには追加の区切りが挿入され、密度の不均一を解消します。
Min Max Bias .minmaxbias ⚖️
– Min Max Bias (最小最大バイアス) — ポイント生成を最小距離側に寄せるか、最大距離側に寄せるかのバイアス値です。
– 値が小さいほど密に、大きいほど疎にポイントが配置されます。
By Edge .byedge 🔁
– By Edge (エッジごとに再起動) — 距離ベース分割時、各セグメント (制御点間) の境界で距離計算をリセットするかを指定します。
– オンにすると元の制御点位置が必ず保持され、エッジを越えた連続分割が行われません。
Add ControlPoint Attribute .addctrlpointattr 🏷️
– Add ControlPoint Attribute (制御点属性追加) — 元の制御点に対して値 1 が立つ ControlPoint 属性を出力ジオメトリに追加します。
– 下流の POP やシェーダで「元の制御点だけ」を識別したいときに使います。
Maximum Number of Vertices .maxverts 🧠
– Maximum Number of Vertices (最大頂点数) — GPU に確保する頂点数の上限です。実際に生成される頂点数より大きい値を設定する必要があります。
– 値が大きいほど GPU メモリを消費します。Info ポップアップで現在の頂点数を確認しながら調整します。
Interpolate Page 📋
Interpolation Method .interpmethod 🎛️
制御点間をどの数式で滑らかにつなぐかを決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Linear | .linear |
隣接点を直線でつなぐ最も単純な補間。角張った形が必要なときに使用 |
| Cardinal (Interpolating) | .cardinal |
カーディナルスプライン。制御点を必ず通過する滑らかな曲線、テンションで張りを調整可能 |
| BSpline | .bspline |
B スプライン。制御点は必ずしも通過しないが、最もなめらかな曲線が得られる |
| Cubic Bezier With Tangents | .cubicbeziertang |
入出力タンジェント属性を使って制御する 3 次ベジェ曲線 |
| Cubic Bezier | .cubicbezier |
標準的な 3 次ベジェ曲線。3 点を 1 セグメントとして消費 |
| Quadratic Bezier | .quadraticbezier |
2 次ベジェ曲線。2 点を 1 セグメントとして消費、3 次より計算が軽い |
補間制御属性 🏷️
補間挙動を点ごとに変えるための属性スイッチ群です。
Interpolation Method per Segment .interpmethodpersegment 🎚️
– Interpolation Method per Segment (セグメント別補間) — オンにすると、入力ラインストリップ内の各セグメントごとに別々の補間メソッドを使用できます。
– セグメント別属性で「ここは直線、ここはベジェ」と切替えたい場合に使います。
Weight Attribute .useweight ⚖️
– Weight Attribute (重み属性使用) — オンにすると、各制御点に重み属性が割り当てられ、補間曲線の張りを点ごとに変えられます。
– NURBS 的な強弱付け表現が可能になります。
In Tangent Attribute .usetanin ↘️
– In Tangent Attribute (入力タンジェント) — オンにすると、制御点に「入ってくる方向」のタンジェントベクトル属性が使用可能になります。
– Cubic Bezier With Tangents モードで主に使用します。
Out Tangent Attribute .usetanout ↗️
– Out Tangent Attribute (出力タンジェント) — オンにすると、制御点に「出ていく方向」のタンジェントベクトル属性が使用可能になります。
– Cubic Bezier With Tangents モードで対になって使用します。
In Tangent Constraint Attribute .usetaninconst 🔒
– In Tangent Constraint Attribute (タンジェント拘束) — オンにすると、その制御点での曲線の拘束 (フリー / ミラー / 角ばり等) を点ごとに指定する属性が使用可能になります。
– 角張りと滑らかさを混在させたいとき有用です。
Clamped .clamped 📍
– Clamped (端点固定) — Cardinal / BSpline 補間時に、ライン両端の制御点を重複させてカーブを端点に密着させるかを指定します。
– 開いたラインストリップにのみ効果があります (閉じたループでは無視)。
Tension .tension 🎚️
– Tension (張り) — Cardinal 補間時に、曲線が制御点をどれだけきつく曲がるかを調整します。
– 値が大きいほどシャープに、小さいほど緩やかに曲がります。
Resample Page 📋
Post-Resample Method .resamplemethod 🎛️
分割と補間の後に、さらにラインをサンプリングし直す方式を決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| None | .none |
リサンプルを行わず、補間結果をそのまま出力 |
| Distance between Points | .dist |
出力ポイントが指定の最大距離以下になるように等距離リサンプリング |
| Points as Keyframes | .keyframes |
独立変数属性をキーフレーム値として、等パラメトリック分布でリサンプリング |
リサンプル制御 🔧
事後リサンプル時の分割数・独立変数・上限を指定するパラメータ群です。
Divisions .resampledivs 🔢
– Divisions (リサンプル分割数) — 事後リサンプリングで作成する分割数を指定する整数値です。
– 補間後の曲線をどの密度で再サンプリングするかを直接決めます。
Independant Variable Attribute .indvarattr 🏷️
– Independant Variable Attribute (独立変数属性) — リサンプリングの基準にするポイント属性名を指定します。
– 通常は距離やパラメトリック値を表す属性を指定し、その値を一定刻みでサンプリングします。
Independant Variable Step .indvarstep 📐
– Independant Variable Step (独立変数の刻み幅) — 独立変数の取り出し刻み幅です。独立変数の範囲全体に対する割合 (fraction) で指定するのが一般的です。
– 値が小さいほど細かくサンプリングされます。
Maximum Number of Vertices .resamplemaxverts 🧠
– Maximum Number of Vertices (最大頂点数) — リサンプリング後の出力で GPU に確保する頂点数の上限値です。
– 実際の頂点数は Info ポップアップで確認できます。確保しすぎると GPU メモリを浪費する点に注意します。
Max Tries for Binary Search .maxtries 🔁
– Max Tries for Binary Search (二分探索の最大試行回数) — 距離ベース・リニア リサンプリング時の二分探索の最大繰り返し回数を指定します。
– 大きいほど精度は上がりますが計算コストが増えます。
Remove Unused Points .rmvunusedpts 🗑️
– Remove Unused Points (未使用ポイント削除) — どのプリミティブからも参照されないポイントを出力から除去します。
– 下流のジオメトリ処理を軽量化したいときに有効です。
Max Distance .resamplemaxdist 📏
– Max Distance (リサンプル最大距離) — 距離ベースリサンプリング時の隣接ポイント間最大距離を指定します。
– 出力ポイント密度をこの距離以下で均一化するのに使います。
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 Divide POP (Cardinal 補間) → Render
Particle POP のパーティクル軌跡を Trail POP で線として蓄積し、Line Divide POP のカーディナル補間で角張りを取り除いて滑らかなストロークに整える用途。
- Particle POP で軌跡を生成し、Trail POP で各ポイントの履歴をラインストリップ化
- Line Divide POP を後段に接続し、Divisions Method を Distance between Points に設定
- Interpolation Method を Cardinal にして、Tension を 0.5 前後で調整
- 下流のレンダリング POP / SOP で滑らかな曲線として描画
Example 2: 曲率に応じて密度を調整 📐
Curve POP → Line Divide POP (Distance by Curvature) → Connectivity POP
Curve POP で生成した曲線に対し、曲率が大きい箇所だけ細かく分割するモードを使うことで、直線部分はメッシュを軽く、湾曲部分は精細に保つ最適化フロー。
- Curve POP で制御点列を構成、Line Divide POP の Divisions Method を Distance by Curvature に設定
- Min Distance と Max Distance を調整し、湾曲部分の密度範囲を決定
- Add ControlPoint Attribute をオンにして、元の制御点を下流で識別可能にする
Example 3: キーフレームでリサンプル 🔁
Line POP → Line Divide POP (Points as Keyframes) → Attribute POP
独立変数属性を時間軸とみなしてキーフレーム的にリサンプリングすることで、アニメーションの中割りポイントを等間隔で生成し、後段の Attribute POP で per-frame の色や速度を割り当てる用途。
- Line POP で制御点列を構成し、各点に時間に相当する属性 (例:
t) を付与 - Line Divide POP の Post-Resample Method を Points as Keyframes に設定し、Independant Variable Attribute に
tを指定 - Independant Variable Step を 0.05 など細かい刻みに設定して中割りポイントを生成
- 下流の Attribute POP で per-frame の色・速度などを割り当て
関連オペレータ 🔗
類似機能OP 🔍
- Line Resample POP — ラインを等距離で再サンプリングする専用 POP。Line Divide が「分割 + 補間 + 再リサンプル」を一気にこなすのに対し、Line Resample は等距離リサンプルに特化
- Subdivide POP — 面メッシュを含む一般ジオメトリのサブディビジョンに対応。ラインに限定したい場合は Line Divide のほうが軽量
- Line Smooth POP — ラインのジグザグを平均化で平滑化する POP。Line Divide が補間で密度を上げて滑らかにするのに対し、Line Smooth は既存ポイント位置を平均化で動かす
組み合わせ推奨OP 🔄
- Line POP — 前段でラインプリミティブを生成、Line Divide でそれを補間・再分割
- Curve POP — 前段で曲線を構成し、Line Divide で密度を調整しながら補間種別を切り替える
- Particle POP — 前段でパーティクル発生源を構成、Trail と組み合わせて軌跡を滑らかにする
- Trail POP — 前段で各ポイントの履歴を線にし、Line Divide で補間して綺麗な軌跡に整える
- Connectivity POP — 後段で分割ラインを再接続し、別のプリミティブ形式に変換する
- Transform POP — 後段で補間結果のラインに移動・回転・スケールを適用
- Attribute POP — 後段で ControlPoint 属性や独立変数属性を読み取り、per-point の色や速度を生成
前処理・後処理POP 🎯
- 前処理: Line POP、Curve POP、Particle POP、Trail POP
- 後処理: Transform POP、Attribute POP、Connectivity POP、Convert POP、Line Smooth POP
Info POP情報 📊
Line Divide 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 Divide が生成した出力ジオメトリのポイント数num_prims: 出力ラインプリミティブの総数num_point_attribs: 出力ポイント属性数 (ControlPoint 属性等を含む)num_vertex_attribs: 出力ジオメトリの頂点属性数num_prim_attribs: 出力ジオメトリのプリミティブ属性数gpu_memory_used: この POP が使用している GPU メモリ量
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 分割が想定どおりに増えない
✅ Solution:
Divisions MethodがNoneのままだと再分割は行われないため、目的に応じてDivisions per Segment/Distance between Points/Distance by Curvatureに切替Maximum Number of Verticesが小さい値に制限されていると、想定数より少ない頂点しか生成されないため Info ポップアップの実頂点数を見ながら拡大- 距離ベース分割時に
Min Distanceが大きすぎると過密化を防ぐために分割が抑制されるため、値を下げて再確認
❌ Problem: 補間曲線が荒い・角張る
✅ Solution:
Interpolation MethodをLinearからCardinalやBSplineに変更して滑らかな補間を選択- Cardinal 補間時は
Tensionを 0.5 以下に下げて緩やかな曲がりに調整 - 前段で密度が足りない場合は、Divide ページで
Divisions per Segmentを増やすか、Line Smooth POP を後段に追加して再平滑化
❌ Problem: CPU 側で出力頂点数が取得できない
✅ Solution:
Maximum Number of Verticesの値で確保サイズを確認しつつ、Info ポップアップで実頂点数を取得- プログラムから参照したい場合は Info CHOP を後段に接続して
num_pointsを取得 - GPU と CPU の同期が必要な場合は下流に CPU 読み戻し対応の POP を挟む構成を検討
❌ Problem: Cubic Bezier With Tangents で形が崩れる
✅ Solution:
In Tangent AttributeとOut Tangent Attributeがオンになっており、入力ジオメトリに対応するタンジェント属性が存在するか確認Clampedをオンにして両端の制御点が固定されるようにし、端での暴れを抑える- セグメントごとに別の補間を混ぜたい場合は
Interpolation Method per Segmentをオンにして属性で切替
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Line Divide POP
- POP 概要 (Points, Vertices and Primitives in POPs)
- 属性 (Attribute) の基礎
- Line Resample POP (関連: 等距離リサンプリング)

