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

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

Line Metrics POP の点ごとの幾何計測機能を示す図

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

概要 📖 – 点ごとの距離や方向を計測

Line Metrics POPは、ラインストリップの各点について、隣接点との距離・方向・接線・曲率などの幾何情報を計算して属性として書き出す POPです。出力には距離・方向・接線・曲率・頂点インデックスといった属性が追加され、下流の POP やシェーダで線の進行方向や曲がり具合を利用した処理を構築できます。

主な用途 🎯

  • ラインストリップの各点について、隣接点までの距離と方向を属性として書き出す
  • 各点の接線ベクトルと曲率を計算し、曲線に沿った向きや曲がり具合を後段で利用する
  • 線の中での頂点インデックスや、複数あるラインストリップごとの番号を属性化して識別に使う
  • インデックスを 0〜1 に正規化した値を出力し、線の長さ進捗度をシェーダや属性処理で参照する
  • 角度進行度 (角度/距離) を計算し、急峻に曲がる箇所を検出して密度調整やトリミングに使う
  • 重なった同位置の点があっても連続方向ベクトルを得るため、近傍探索範囲を広げて滑らかな方向場を作る

データフロー 🔄

入力: ラインストリップ (連続した頂点列)

隣接点との距離・方向・接線・曲率を計算

頂点インデックス情報を付与

出力: 計測属性が追加されたラインジオメトリ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Neighbor Page 📋

Attribute Class .attrclass 🎛️

計測結果を書き出す属性のクラス (point / vertex / primitive) を選択するメニューパラメータ

項目 内部名 説明
Point .point 点ごとに 1 つの値を持つ点属性として書き出す。最もよく使われるクラス
Vertex .vertex プリミティブの頂点 (vertex) ごとに値を持つ頂点属性として書き出す。同じ点を共有する複数の頂点で異なる値を持たせたいときに使用
Primitive .primitive プリミティブ単位で 1 つの値を持つプリミティブ属性として書き出す

出力属性スイッチ 🏷️

ラインに沿って、隣接点との位置関係や曲線情報を属性として出力するかどうかを個別に切り替えるスイッチ群です。必要な属性だけをオンにして、下流の負荷を抑えます。

Displacement to Next .dispnext ➡️
Displacement to Next (次の点への変位ベクトル) — オンにすると、各点から次の点までの 3D ベクトル (差分) を属性として出力します。
– 線に沿った進行方向と長さを 1 つのベクトルで持ちたいときに使います。

Displacement to Previous .dispprev ⬅️
Displacement to Previous (前の点への変位ベクトル) — オンにすると、各点から前の点までの 3D ベクトルを属性として出力します。
– 後ろ向きの差分が必要な後段処理 (折り返し検出など) で使います。

Distance to Next .distnext 📏
Distance to Next (次の点までの距離) — 各点から次の点までのスカラー距離を属性として出力します。
– 線の密度判定や、距離ベースの後段リサンプリングに利用します。

Distance to Previous .distprev 📐
Distance to Previous (前の点までの距離) — 各点から前の点までのスカラー距離を属性として出力します。
– 累積距離の差分計算や、終端付近の密度確認に使います。

Direction to Next .dirnext ↗️
Direction to Next (次の点への方向) — 各点から次の点への単位ベクトル (向きだけ) を属性として出力します。
– 距離成分を除いた純粋な向きが欲しいときに使います。

Direction to Previous .dirprev ↙️
Direction to Previous (前の点への方向) — 各点から前の点への単位ベクトルを属性として出力します。
– 折り返しや角度判定で、前後両方向の単位ベクトルを必要とするときに使います。

Tangent .tangent 📈
Tangent (接線ベクトル) — 各点の接線方向を属性として出力します。前後の単位ベクトルを平均化したような滑らかな進行方向です。
– シェーダで線をリボン化するときや、進行方向に沿った押し出しのフレーム生成に使います。

Curvature .curvature 🔄
Curvature (曲率) — 各点の曲率 (曲がりのきつさ) をスカラー属性として出力します。
– 急峻に曲がる箇所だけを着色したり、曲率の高い領域を後段で密に分割したいときに使います。

Angle per Distance .angleperdist 📊
Angle per Distance (距離あたりの角度) — 単位距離あたりに線が曲がる角度を属性として出力します。
– 曲率に比べ、距離スケールを意識した「進行のひねり具合」を表す指標として使えます。

方向計算オプション 🧭

方向ベクトルの計算条件を細かく調整するためのパラメータ群です。同じ位置に重なった点 (co-incident points) があるラインでも、滑らかな方向場を得たいときに使います。

Continuous Direction .continuousdir 🔁
Continuous Direction (連続方向) — オンにすると、同じ位置に重なった連続する点 (co-incident points) があっても、近傍まで遡って連続した方向ベクトルを返します。
– 重複点でゼロベクトルが出るのを防ぎ、後段のフレーム計算が破綻しないようにします。

Max Neighbors .maxneighbors 🔢
Max Neighbors (最大近傍数) — 方向ベクトル計算時に、何点先までさかのぼって近傍を探すかの上限です。
– 同位置の点が連続する場合に、何点先まで参照すれば有効な差分が得られるかを制御します。値が大きいほど計算コストが増えます。


Index Page 📋

インデックス出力 🔢

各点が、線の何番目か・全体で何個ある線の何本目か、といったインデックス情報を属性として書き出すスイッチ群です。シェーダや属性処理で線の進捗度や線ごとの識別を行うときに使います。

Vert Index in Line Strip .pointindex 🔢
Vert Index in Line Strip (ラインストリップ内の頂点番号) — 各点が、所属するラインストリップ内で何番目の頂点かを整数属性として出力します。
– 各頂点がユニークである前提で、線の頭からの順序を整数で取得できます。

Number of Verts in Line Strip .numverts 🧮
Number of Verts in Line Strip (ラインストリップの総頂点数) — 各点が所属するラインストリップ全体の頂点数を属性として出力します。
– 後段で「いまの点は線全体の何%地点か」を計算するときの分母として使えます。

Vert Index in Line Strip Normalized .vertindexnorm 📊
Vert Index in Line Strip Normalized (頂点番号の正規化) — 頂点番号を 0〜1 に正規化した値を属性として出力します。
– 線の頭を 0、末尾を 1 とした進捗度として、シェーダや色マッピングで使いやすい形になります。

Line Strip Index .linestripindex 🏷️
Line Strip Index (ラインストリップ番号) — 入力に複数のラインストリップがある場合、各点がどの番号のラインストリップに属するかを整数属性として出力します。
– 複数本の線を 1 つのジオメトリにまとめている状態で、線ごとに色や挙動を変えたいときに使います。

Line Strip Index Normalized .lsindexnorm 📈
Line Strip Index Normalized (ラインストリップ番号の正規化) — ラインストリップ番号を 0〜1 に正規化した値を属性として出力します。
– 線の本数によらず、後段で「線全体の中で何番目寄りか」を相対値として扱えます。


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: 曲率で線の色を変える 🌈

Curve POP → Line Metrics POP (Curvature) → Attribute POP → Render

曲線ジオメトリの曲率属性を Line Metrics POP で書き出し、その値を Attribute POP でカラー属性にマッピングすることで、急峻に曲がっている領域だけを濃い色で可視化するフロー。

  1. Curve POP で制御点列から曲線を構成
  2. Line Metrics POP の Curvature をオンに設定し、点属性として書き出し
  3. 下流の Attribute POP で curvature 属性を Cd (カラー) に変換
  4. レンダリングで曲率の高い領域だけが強調表示される

Example 2: 進行方向にリボンを張る 🎀

Trail POP → Line Metrics POP (Tangent) → GLSL POP (リボン押し出し)

パーティクル軌跡をリボンとして可視化したいときに、Line Metrics POP の Tangent (接線) 属性を使って、各点から進行方向に直交する横方向ベクトルをシェーダ側で生成し、線を帯状に押し出す用途。

  1. Particle POPTrail POP で軌跡をラインストリップ化
  2. Line Metrics POP の TangentContinuous Direction をオンに設定
  3. 下流の GLSL POP で接線属性から法線方向を計算し、両側に押し出してリボンメッシュを生成
  4. レンダリングで進行方向に沿った滑らかな帯が描画される

Example 3: 進捗度で頭尾をフェード 🌗

Line POP → Line Metrics POP (Vert Index Normalized) → Attribute POP → Render

線の頭から末尾までの進捗度 (0〜1) を Vert Index in Line Strip Normalized で取得し、これを透明度に割り当てることで線の両端をフェードさせる演出。長い軌跡や音声ビジュアライザの帯を綺麗に消したいときに使う。

  1. Line POP または Trail POP でラインストリップを構築
  2. Line Metrics POP の Vert Index in Line Strip Normalized をオンに設定し、0〜1 の進捗属性を生成
  3. Attribute POP で進捗値を Alpha 属性に変換 (頭と末尾で 0 になるカーブを適用)
  4. レンダリングで線の両端がフェードアウトする

関連オペレータ 🔗

類似機能OP 🔍

  • Normal POP — 面メッシュに対して法線を計算する POP。Line Metrics が線専用に距離・方向・接線を出すのに対し、Normal POP は面の法線が対象
  • Attribute POP — 汎用に属性を計算・追加できる POP。Line Metrics で得た幾何属性をさらに加工したり、別の派生属性を作りたい場合に併用

組み合わせ推奨OP 🔄

  • Line POP — 前段でラインストリップを構築、Line Metrics で各点に幾何属性を付与
  • Curve POP — 曲線として制御点列を渡し、Line Metrics で接線・曲率を計算
  • Particle POP — パーティクル発生源を構成、Trail と組み合わせた軌跡に幾何属性を付与
  • Trail POP — 前段で各点の履歴をラインストリップ化、Line Metrics で進行方向や曲率を計算
  • Line Divide POP — 前段で曲線を補間・分割した後、Line Metrics で再分割後の各点に属性を書き出す
  • Attribute POP — 後段で計測属性を読み取り、色や透明度などの per-point 値にマッピング
  • Transform POP — 後段で計測属性付きのラインに移動・回転・スケールを適用

前処理・後処理POP 🎯


Info POP情報 📊

Line Metrics 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 Metrics の出力ジオメトリのポイント数 (入力と同じ)
  • num_prims: 出力ラインプリミティブの総数
  • num_point_attribs: 出力ポイント属性の数 (距離・方向・接線・曲率・インデックス等を含む)
  • num_vertex_attribs: 出力ジオメトリの頂点属性数 (Attribute Class が vertex のとき増加)
  • num_prim_attribs: 出力ジオメトリのプリミティブ属性数 (Attribute Class が primitive のとき増加)
  • gpu_memory_used: この POP が使用している GPU メモリ量

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: 属性が出力されない
✅ Solution:

  • 出力したい属性 (Distance to Next / Direction to Next / Tangent 等) のスイッチがオンになっているか確認
  • Attribute Class が想定と異なるクラス (point/vertex/primitive) になっていないか確認、下流で参照しているクラスと一致させる
  • Delete Input Attributes のパターンで出力したい属性名が除外されていないか確認

❌ Problem: 方向ベクトルがゼロになる
✅ Solution:

  • 同じ位置に重なった連続点 (co-incident points) がある場合は Continuous Direction をオンにして、近傍点まで遡って方向を計算させる
  • Max Neighbors を増やし、より遠くの点まで参照して有効な差分を得る
  • 前段で Line Divide POP を使い、重なった制御点を間引いてから渡す

❌ Problem: 曲率が想定より大きい・小さい
✅ Solution:

  • 前段の点密度を変えると曲率値も変わるため、Line Resample POPLine Divide POP で密度を統一してから計測
  • ジグザグなノイズが乗っているときは Line Smooth POP を前段に挟んで平滑化
  • Angle per Distance も併用すると、距離スケールの違いに左右されにくい曲がり指標が得られる

❌ Problem: 頂点インデックスが想定外
✅ Solution:

  • Vert Index in Line Strip は各ラインストリップ内の番号、Line Strip Index は何本目の線かを表すため用途を取り違えていないか確認
  • 複数の線が入力にある場合は、Line Strip IndexLine Strip Index Normalized も併用して線ごとに識別
  • 正規化値 (...Normalized) は線の長さに依存するため、線ごとに点数が異なると 0〜1 のステップ幅も線ごとに変わる点に注意

参考資料 📚

その他 🔗

公式リソース 📖

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