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

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

Line Smooth POP のライン平滑化機能を示す図

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

概要 📖 – 波打つラインを滑らかに

Line Smooth POPは、入力ラインストリップの頂点位置を隣接点との加重平均で平滑化し、ジグザグを取り除いて滑らかなラインに整える POPです。エッジ距離・点ステップの 2 方式とガウシアン・矩形の 2 カーネルを切り替えて、手描きカーブやパーティクル軌跡のノイズ成分だけを取り除き、形状特徴を保ったまま滑らかな曲線に整え直せます。

主な用途 🎯

  • ジグザグしたラインストリップを隣接点との平均化で平滑化し、滑らかな曲線形状に整える
  • 手描きカーブやモーションキャプチャ軌跡のノイズ成分を抑えながら、形状の特徴は保持する
  • エッジ距離方式と点ステップ方式の 2 種類で、平滑化の影響範囲をライン形状に合わせて使い分ける
  • ガウシアンと矩形 (Box) の 2 種類のカーネルで、滑らかな減衰平均と均一平均を切り替える
  • 端点固定オプションでラインの始点・終点を保ち、中間部分だけを滑らかにする
  • Effect パラメータで原形と平滑化結果のブレンド比率を連続的に調整し、平滑化の強度を制御する

データフロー 🔄

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

フィルタ範囲と方式の選択

隣接頂点との加重平均で位置を再計算

出力: 滑らかにされたラインプリミティブ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Line Smooth Page 📋

Attribute Class .attrclass 🏷️

POP が対象とする属性の種類を切り替えるメニューパラメータ

項目 内部名 説明
Point .point ポイント属性を対象に平滑化を実行 (位置 P など)
Vertex .vertex 頂点属性を対象に平滑化を実行 (UV / 法線など)
Primitive .primitive プリミティブ属性を対象に平滑化を実行

Input Attribute Scope .inputattrscope 🎯

選択した属性クラスのうち、どの属性 (または属性のコンポーネント) に平滑化を適用するかを指定するパラメータです。

Input Attribute Scope .inputattrscope 🎯
Input Attribute Scope (入力属性スコープ) — 平滑化対象とする属性名やコンポーネントを指定します。
– 例: P で位置のみ、P N で位置と法線、P(x z) で位置の x / z 成分のみといった指定が可能です。

分割と頂点上限 🔢

平滑化前の事前分割と、出力ジオメトリに確保する頂点数の上限を決めるパラメータ群です。

Pre-Divide .prediv ✂️
Pre-Divide (事前分割) — 平滑化に先立って入力ラインを細分化するトグルパラメータです。
– 粗い制御点列を平滑化したいときに、先に分割して密度を上げてから平均化を適用できます。

Max Distance .maxdivdist 📏
Max Distance (最大分割距離) — 事前分割時に、隣接点間がこの値を超えるセグメントに追加点を挿入するための最大距離です。
– 値が小さいほど細かく分割され、平滑化の解像度が上がります。

Maximum Number of Vertices .maxverts 🧠
Maximum Number of Vertices (最大頂点数) — GPU に確保する頂点数の上限値です。実際に生成される頂点数より大きい値を設定する必要があります。
– 値が大きいほど GPU メモリを消費します。Info ポップアップで現在の頂点数を確認しながら調整します。

Filter Method .filtermethod 🎛️

平滑化の影響範囲を距離で測るか点数で測るかを決定するメニューパラメータ

項目 内部名 説明
Smooth by Edge Distance .dist 隣接エッジに沿った距離で平滑化範囲を指定 (Edge Distance パラメータと連動)
Smooth by Point Steps .point 隣接点数 (前後何点まで参照するか) で平滑化範囲を指定 (Point Step Filter Size と連動)

Filter Type .filtertype 📈

平滑化カーネルの形状 (重み分布) を選ぶメニューパラメータ

項目 内部名 説明
Gaussian .gaussian 中央の重みが大きく、距離が離れるほど指数的に減衰するガウシアン分布 (自然な滑らかさ)
Box .box 範囲内のすべての点を等重みで平均化する矩形カーネル (一定の平滑化)

フィルタ範囲設定 📐

フィルタ方式に応じた近傍範囲・平滑化強度・端点固定の挙動を設定するパラメータ群です。

Edge Distance .filterdist 📏
Edge Distance (エッジ距離) — Smooth by Edge Distance モード時に、隣接エッジに沿って平均化対象として参照する距離です。
– 値が大きいほど広い範囲の点を平均化に使うため、より大きく滑らかになります。

Point Step Filter Size .filtersize 🔢
Point Step Filter Size (点ステップフィルタサイズ) — Smooth by Point Steps モード時に、平滑化カーネルが参照する点数を指定します。
– 値を増やすほど近傍点が多くなり、形状がより大きくなだらかになります。

Effect .effect ⚖️
Effect (適用度) — 平滑化結果を元の形状にどれだけ反映するかを決めるブレンド係数です。
– 0 で原形をそのまま、1 で完全な平滑化結果になります。0.5 のように中間値を入れて部分的に滑らかにする使い方が一般的です。

End Points Fixed .endpointsfixed 📍
End Points Fixed (端点固定) — オンにすると、ラインの始点と終点の位置を平滑化対象から外して固定します。
– ライン全体の長さや端の位置を保ったまま、中間部分だけを滑らかにしたいときに有効です。

Output Attribute Scope .outputattrscope 📤

平滑化結果を書き出す属性名を選択するメニューパラメータ

項目 内部名 説明
P .P ポイント位置属性
N .N 法線属性
Color .Color 色属性 (RGBA すべて)
Color.rgb .Color.rgb 色属性の RGB 成分のみ (アルファ除外)
Tex .Tex テクスチャ座標属性
PointScale .PointScale 点のスケール属性
LineWidth .LineWidth ライン幅属性

出力属性カスタム化 🛠️

出力属性を自動判定ではなく明示的に型・コンポーネント数・初期値で指定するためのパラメータ群です。

Override Automatic Attribute .overrideautoattr 🔧
Override Automatic Attribute (自動属性の上書き) — オンにすると、入力とパラメータから自動決定される出力属性のデータ型・コンポーネント数を、手動で指定したものに切り替えます。
– カスタム属性を生成したい場合や、特定の型・成分数で出力したい場合に使います。

Attribute Type .attrtype 🔣

上書き時の出力属性のデータ型を選択するメニューパラメータ

項目 内部名 説明
float .float 32bit 浮動小数 (標準)
double .double 64bit 浮動小数 (高精度)
int .int 符号付き整数
uint .uint 符号なし整数
Color .color 色 (float ベース)
Color (double) .dcolor 色 (double ベース、高精度)
Direction .dir 方向ベクトル (float)
Direction (double) .ddir 方向ベクトル (double、高精度)

Components .attrnumcomps 🔢

カスタム属性の成分数を選択するメニューパラメータ

項目 内部名 説明
1 .1 スカラー値 (1 成分)
2 .2 2 次元ベクトル (UV など)
3 .3 3 次元ベクトル (位置 / 法線 / RGB)
4 .4 4 次元ベクトル (RGBA / 四元数)

Default Value .attrdefaultval 🎚️

カスタム属性が計算できないときに用いる初期値を、コンポーネントごとに 4 つまで指定するパラメータです。

Default Value .attrdefaultval 🎚️
Default Value (初期値) — カスタム属性の各コンポーネントに対するデフォルト値です。値が計算できなかったポイントにはこの値が入ります。
attrdefaultval0 から attrdefaultval3 まで、コンポーネント数に合わせて使用されます。


Resample Page 🔁

Resample Method .resamplemethod 🎛️

平滑化と同時にラインを再サンプリングするかどうかを決めるメニューパラメータ

項目 内部名 説明
None .none 再サンプリングを行わず、平滑化結果をそのまま出力
Distance between Points .dist 隣接点間の距離が指定範囲に収まるよう、等距離で点を取り直す
By Curvature .curvature 曲率が大きい区間ほど細かく、直線部分は粗く点を配置する

リサンプル制御 🔢

リサンプル方式に応じた最小・最大距離・バイアス・探索回数を指定するパラメータ群です。

Min Distance .resamplemindist 📏
Min Distance (最小距離) — 出力ラインで隣接点間が下回ってはいけない最小距離です。
– 距離ベースのリサンプル時に過密化を防ぐため、ここで指定した距離より近い点は生成されません。

Max Distance .resamplemaxdist 📐
Max Distance (最大距離) — 隣接点間が超えてはいけない最大距離です。
– この値を超えるセグメントには追加点が挿入され、点密度の不均一を解消します。

Min Max Bias .resampleminmaxbias ⚖️
Min Max Bias (最小最大バイアス) — 点生成を最小距離側に寄せるか、最大距離側に寄せるかのバイアス値です。
– 値が小さいほど密に、大きいほど疎にポイントが配置されます。

Max Tries for Binary Search .maxtries 🔁
Max Tries for Binary Search (二分探索の最大試行回数) — 距離ベースで線形リサンプリングする際の二分探索の最大繰り返し回数を指定します。
– 大きいほど精度は上がりますが計算コストが増えます。


Map Page 🗺️

属性マッピング 🎚️

ポイント属性を Line Smooth のパラメータ値にマッピングして、点ごとに平滑化強度や範囲を変える機能のパラメータ群です。

Mapping .map 🧩
Mapping (マッピング数) — 属性 → パラメータの順次マッピングブロックの先頭パラメータです。
– 必要な数だけマッピングを追加することで、同じ POP 内で複数の属性 → パラメータ対応を設定できます。

OP .map0op 🔗
OP (参照 OP) — マッピング元となる属性を持つ POP を指定します。
– デフォルトの _in0 はこの POP の入力 1 を参照します。

Element .map0element 🏷️
Element (要素) — 参照 POP のどの属性 (もしくは属性のコンポーネント) をパラメータ値にマッピングするかを指定します。
– 例: P(x) なら位置の x 成分、Cd(r) なら色の R 成分。

Target Parameter .map0parm 🎯

属性値をマッピング先として割り当てる Line Smooth POP 側のパラメータを選択するメニュー

項目 内部名 説明
filterdist (Edge Distance) .filterdist 属性値をエッジ距離 (Edge Distance) にマッピング、点ごとに距離ベースの平滑化範囲を変える
filtersize (Point Step Filter Size) .filtersize 属性値を点ステップフィルタサイズにマッピング、点ごとに参照する点数を変える

Combine Operation .map0combineop

属性値とパラメータ値の合成方式を選ぶメニューパラメータ

項目 内部名 説明
Set .set 属性値でパラメータを直接上書き
Multiply .mult 属性値をパラメータ値に乗算
Add .add 属性値をパラメータ値に加算

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: 手描きラインを平滑化 🖋️

Line POP → Line Smooth POP (Gaussian / Edge Distance) → Render

手描きツールやタブレット入力で生成された粗い制御点列を、ガウシアン分布の平滑化で滑らかな曲線に整えるワークフローです。Edge Distance 方式を使うと、点密度がバラついていても距離ベースで均一に平滑化されます。

  1. Line POP で手描き入力の制御点列を生成、または外部から座標列を読み込む
  2. Line Smooth POP を後段に接続し、Filter Method を Smooth by Edge Distance、Filter Type を Gaussian に設定
  3. Edge Distance を入力ラインの代表的なセグメント長の 2-3 倍程度に設定して影響範囲を決める
  4. End Points Fixed をオンにして始点・終点の位置を保ち、中間部分だけを滑らかにする
  5. Effect を 0.7-1.0 程度に調整し、平滑化の強度を求める滑らかさに合わせて決める

Example 2: 軌跡のジッタを除去 ✨

Particle POP → Trail POP → Line Smooth POP (Point Steps / Box) → Render

Particle POP の軌跡を Trail POP でラインストリップ化したあと、Line Smooth POP の点ステップ + 矩形カーネルでフレーム間のジッタを除去します。点数ベースの指定なので、軌跡の長さに依らず安定した平滑化が効きます。

  1. Particle POP でパーティクルを生成し、Trail POP で各点の履歴をラインストリップに変換
  2. Line Smooth POP を接続し、Filter Method を Smooth by Point Steps、Filter Type を Box に設定
  3. Point Step Filter Size を 3-7 程度に設定して前後数フレーム分の点を平均化
  4. Effect を 0.5 程度にすることで、ジッタを抑えつつ動きの特徴は保持する
  5. 下流の Render TOP で滑らかな軌跡として描画する

Example 3: 法線の連続性を確保 🎯

Curve POP → Line Smooth POP (Output: N) → Transform POP

Curve POP で構成した曲線の法線属性 (N) だけを Line Smooth POP で平滑化し、隣接点間の法線の急変を取り除くことで、後段のシェーダで滑らかな陰影が得られるようにする使い方です。

  1. Curve POP で制御点列と法線属性を構成する
  2. Line Smooth POP を接続し、Input Attribute Scope と Output Attribute Scope の両方に N を指定
  3. Filter Type を Gaussian、Effect を 1.0 に設定して法線だけ完全に平滑化
  4. 後段の Transform POP で形状を移動・回転しても法線が滑らかに追従する

関連オペレータ 🔗

類似機能OP 🔍

  • Line Resample POP — ラインの点間隔を再分布する POP。Line Smooth が既存ポイント位置を平均化で動かすのに対し、Line Resample は点の数と間隔自体を取り直す
  • Line Divide POP — ラインの分割と補間を担当する POP。Line Smooth が滑らかにするのに対し、Line Divide は分割後の点を補間で生成する

組み合わせ推奨OP 🔄

  • Line POP — 前段でラインプリミティブを生成、Line Smooth で平滑化
  • Curve POP — 前段で曲線を構成し、Line Smooth で形状や法線を滑らかにする
  • Particle POP — 前段でパーティクル発生源を構成、Trail と組み合わせて軌跡を平滑化
  • Trail POP — 前段で各点の履歴を線にし、Line Smooth でフレーム間のジッタを除去
  • Attribute POP — 前段で平滑化対象とする属性を生成、Line Smooth で滑らかに整える
  • Transform POP — 後段で平滑化結果のラインに移動・回転・スケールを適用
  • Convert POP — 後段で平滑化されたラインを別のプリミティブ形式に変換

前処理・後処理POP 🎯


Info POP情報 📊

Line Smooth 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 Smooth が生成した出力ジオメトリのポイント数
  • num_prims: 出力ラインプリミティブの総数
  • num_point_attribs: 出力ポイント属性数
  • num_vertex_attribs: 出力ジオメトリの頂点属性数
  • num_prim_attribs: 出力ジオメトリのプリミティブ属性数
  • gpu_memory_used: この POP が使用している GPU メモリ量

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

よくある問題と解決策 🔧

❌ Problem: 平滑化されない / 効果が薄い
✅ Solution:

  • Effect パラメータが 0 になっていると原形がそのまま出力されるため、0.5-1.0 程度に上げて反映度を確認
  • Filter MethodSmooth by Edge DistanceEdge Distance が極端に小さい場合は近傍点がほぼ含まれないため、入力ラインのセグメント長に対し 2-3 倍程度に上げる
  • Filter MethodSmooth by Point StepsPoint Step Filter Size が 1 だと隣接点を 1 点しか参照しないため、3-7 程度に増やす

❌ Problem: ライン全体が縮んで見える
✅ Solution:

  • ガウシアン / 矩形カーネルでの平均化は性質上、湾曲した区間で内側に寄りやすいため、End Points Fixed をオンにして端点を固定する
  • Effect を 1.0 ではなく 0.5 程度に下げて、原形と平滑化結果のブレンドにする
  • Filter TypeBox から Gaussian に切り替えて、中央重みの大きい分布で形状特徴を保つ

❌ Problem: 端点が想定外に動いてしまう
✅ Solution:

  • End Points Fixed がオフだと始点・終点も平滑化対象になるため、オンに切り替えて端点を固定する
  • ラインが閉曲線でないか確認 (閉曲線の場合は端点の概念がなく、全周で平滑化される)
  • 上流に Line Divide POP を入れて端付近の点密度を上げると、平均化による移動量が相対的に小さくなる

❌ Problem: 出力頂点数が想定より少ない
✅ Solution:

  • Maximum Number of Vertices が小さいと割当不足で頂点が切り捨てられるため、Info ポップアップの実頂点数を見ながら値を上げる
  • Pre-Divide をオンにし Max Distance を小さく設定すると、平滑化前に分割して頂点数を増やせる
  • Resample Page の Resample MethodDistance between Points に設定して平滑化後にリサンプリングし、目的の点間隔まで点を増やす

参考資料 📚

その他 🔗

公式リソース 📖

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