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

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

Triangulate POP の三角形分割機能を示す図

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

概要 📖 – 閉じた線を三角形で埋める

Triangulate POPは、閉じた線状ジオメトリを三角形の面で埋めてメッシュ化する POPです。凸形状のみと凸凹両対応のモードを選べ、四角形プリミティブの三角形化にも対応します。

主な用途 🎯

  • 閉じた線状ジオメトリを三角形の面で埋める (輪郭線だけの形状を塗りつぶしてメッシュ化する)
  • 凸形状・凹形状を切り替えて三角形分割し、複雑な輪郭でも正しく面を張る
  • 四角形プリミティブを三角形に分割し、後段の描画パイプラインで扱いやすい形に整える
  • GPU 上で三角形分割を実行し、大量の閉じた線でも軽量に面化する
  • 後段の変形・描画向けに面を持つ素体を用意 (テクスチャ貼り付けやライティングの土台にする)

データフロー 🔄

入力: 閉じた線状ジオメトリ (POP)

Mode で凸/凹の分割方式を指定

1 反復ごとに三角形を生成

出力: 三角形の面で埋まったジオメトリ (POP)

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Triangulate Page 📋

分割モード .mode 🎛️

閉じた線状ジオメトリをどの方式で三角形分割するかを選ぶメニュー

項目 内部名 説明
Convex Only .convex 凸形状のみを対象に三角形分割 (高速だが凹みのある輪郭は正しく埋まらない)
Convex and Concave (Slower) .concave 凸形状と凹形状の両方を三角形分割 (低速だが凹みのある複雑な輪郭も正しく埋まる)

四角形の分割 🔲

Triangulate Quads .triangulatequads
Triangulate Quads (四角形を三角形へ) — 四角形プリミティブを三角形に分割するかを切替
– オンにすると 1 つの四角形が 2 つの三角形に分割される
– 三角形のみで構成されたメッシュを前提とする後段の描画・変形処理に渡すときに使う

頂点数の上限 🔢

Max Verts per Input Line Strip .lsmaxverts 📈
Max Verts per Input Line Strip (1 本あたりの最大頂点数) — 凸凹モードで、閉じた入力線 1 本あたりに許容する最大頂点数を指定
– 一定値であることが前提で、値を変更すると内部の演算シェーダが再コンパイルされる
– この頂点数を超える閉じた線は現状では出力から除外される

反復回数の上限 🔁

Max Iterations .maxiter ⏱️
Max Iterations (最大反復回数) — 凸凹モードで、閉じた線 1 本を三角形分割するために試みる反復回数の上限を指定
– 非常に長い線のクック時間を抑えるための任意指定で、値が小さすぎると線は部分的にしか三角形分割されない
– 未設定の場合、自己交差する閉じた線が無限ループを起こし TouchDesigner がフリーズする既知の問題があるため指定を推奨


Common Page 🔧

Bypass .bypass 🚫

POP の処理をスキップして入力をパススルーする設定:

  • オン: 最初の入力 (input1) をそのまま出力にパススルー、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 → Triangulate POP (Mode=Convex Only) → Null POP → 描画パイプライン

輪郭線だけの閉じたジオメトリを Triangulate POP で三角形の面に埋めてメッシュ化する最小構成。線だけでは描画できない形状を、塗りつぶされた面に変換してテクスチャやライティングの土台にする定番パターン。

  1. Line POP を配置して閉じた線状ジオメトリを生成
  2. Triangulate POP を後段に接続し ModeConvex Only に設定 (凸形状なら高速)
  3. Triangulate Quads はオフのままで挙動を確認
  4. Null POP を後段に置いて出力を確認し、描画パイプラインに接続
  5. 面が正しく張られているかをビューアで確認し、凹みがある場合は次の例の凸凹モードに切り替え

Example 2: 凹みのある輪郭を分割 🔺

Curve POP → Triangulate POP (Mode=Convex and Concave, Max Iterations=設定)

凹みのある複雑な輪郭を凸凹両対応モードで正しく三角形分割する例。凸専用モードでは破綻する形状を扱う際に使い、長い線でのフリーズを避けるため反復回数の上限を必ず設定する。

  1. Curve POP で凹みを含む閉じた線を生成
  2. Triangulate POP を後段に接続し ModeConvex and Concave (Slower) に設定
  3. Max Iterations に上限値を設定 (未設定だと自己交差する線で無限ループ・フリーズの恐れがあるため必須)
  4. Max Verts per Input Line Strip を入力線の頂点数に合わせて設定し、除外される線が出ていないか確認
  5. Null POP で出力を確認し、凹み部分まで面が張られているかをチェック

Example 3: 面化して変形・描画 🌊

Line POP → Triangulate POP → Transform POP → 描画パイプライン

三角形分割で面を持たせたジオメトリを後段の Transform POP で動かしながら描画する典型パターン。線のままでは載らないテクスチャやライティングを、面化した素体に乗せて表現の幅を広げる。

  1. Line POP で閉じた線状ジオメトリを配置
  2. Triangulate POP を後段に置いて面を生成し、Mode を形状に合わせて選択
  3. Transform POP を後段に接続して移動・回転・スケールを掛ける
  4. 面の三角形数が増えすぎると処理負荷が上がるため、Info CHOPnum_prims で常に把握
  5. Null POP に接続して結果を確認し、描画パイプラインへ渡す

関連オペレータ 🔗

類似機能OP 🔍

  • Polygonize POP — 閉じた線をポリゴン面に変換する POP (Triangulate は三角形に特化)
  • Facet POP — 面の法線処理や点結合などメッシュの面属性を編集する POP
  • Convert POP — ジオメトリ型を変換する POP (面化の前後で型を整える)

組み合わせ推奨OP 🔄

  • Line POP — 三角形分割の入力となる閉じた線状ジオメトリを生成
  • Curve POP — 凹みを含む滑らかな閉じた輪郭を作って凸凹モードで面化
  • Transform POP — 面化した出力にさらに移動・回転・スケールを掛ける
  • Subdivide POP — 三角形分割後の面をさらに細分化して滑らかにする
  • Convert POP — 面化結果を別のジオメトリ型に変換して下流へ渡す

前処理・後処理POP 🎯


Info POP情報 📊

Triangulate POPは Info CHOP / Info DAT による詳細情報取得に対応しています。

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: num_points — この POP に含まれる点数
  • num_prims: num_prims — この POP に含まれるプリミティブ数 (三角形分割後の面数)
  • num_point_attribs: num_point_attribs — 出力 POP の point 属性数

クック統計 ⏱️

  • total_cooks: total_cooks — プロセス開始以降にこのオペレータがクックされた合計回数
  • cook_time: cook_time — 直近のクック所要時間 (ミリ秒、凸凹モードや長い線で増えやすい)
  • cook_frame: cook_frame — このオペレータが最後にクックされたフレーム番号

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

よくある問題と解決策 🔧

❌ Problem: 凹みのある輪郭が正しく面で埋まらない
✅ Solution:

  • ModeConvex Only から Convex and Concave (Slower) に切り替えて凹形状にも対応させる
  • 凸専用モードは凹みのある輪郭を正しく処理しない仕様なので、複雑な形状では凸凹モードを使う
  • 前段の Curve POP 等で輪郭が確実に閉じているかを確認する

❌ Problem: TouchDesigner がフリーズする / クックが終わらない
✅ Solution:

  • Max Iterations に上限値を設定する — 未設定だと自己交差する閉じた線で無限ループが起き、フリーズする既知の問題がある
  • 入力の閉じた線が自己交差していないか前段で確認し、必要なら形状を整える
  • 凸凹モードはクック時間が増えやすいため、Info CHOPcook_time で負荷を把握する

❌ Problem: 一部の閉じた線が出力に現れない
✅ Solution:

  • Max Verts per Input Line Strip を入力線の頂点数より大きい値に設定する — この上限を超える線は出力から除外される仕様
  • 頂点数の多い線を前段で間引いて頂点数を上限以下に抑える
  • 出力されたプリミティブ数を Info CHOPnum_prims で確認し、想定どおりの面数になっているか比較する

❌ Problem: 後段で四角形が想定どおりに描画されない
✅ Solution:

  • Triangulate Quads をオンにして四角形プリミティブを三角形に分割する
  • 三角形のみを前提とする後段の描画・変形処理では四角形を残さないようにする
  • 面化結果は後段の Facet POP で法線を整えてから描画する

参考資料 📚

その他 🔗

公式リソース 📖

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