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

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

Project SOP の 3D 曲線を曲面に投影する機能を示す図

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

概要 📖 – 3D 曲線を曲面に投影

Project SOPは、3D 曲線やフェイスを NURBS スプライン曲面に投影し、曲面上のプロファイル曲線として貼り付ける SOPです。投影方法は Along Vector(指定したベクトル方向に投影 / 軸 X・Y・Z・法線・最短距離・任意ベクトルから選択)と Parametrically(曲面の UV ドメインに直接マッピング)の 2 種類から選択でき、Cycle Type で複数曲線と複数曲面の対応関係(順次配置・重ね合わせ・1 対 1・循環)を切り替えられます。Profile SOP の逆操作として、ラウンドトリップ編集ワークフローでも中心的な役割を担います。

主な用途 🎯

  • 3D 曲線(フェイス)を NURBS スプライン曲面に投影してプロファイル曲線として貼り付ける用途で、独立した曲線を曲面上の輪郭ラインに変換する
  • ベクトル投影とパラメトリック投影の使い分けにより、空間的な位置関係を保った投影と、曲面の UV ドメインに直接マッピングする展開的投影を選択できる
  • 投影軸(X/Y/Z/法線/最短距離/任意ベクトル)の切替で、垂直プレス的な投影や曲面法線に沿った貼付など、用途に応じた投影方向を指定する
  • 複数曲線・複数曲面の対応関係(順次配置/重ね合わせ/1:1/循環)Cycle Type で制御し、文字列のレイアウトや繰り返しパターンの曲面配置に活用する
  • 抽出(Profile SOP)→ 2D 編集 → 再投影(Project SOP)のラウンドトリップで、曲面に貼り付いたプロファイルを一度平面化して編集してから元の場所に正確に戻すワークフロー
  • レーザー彫刻データの曲面転写・テクスチャ画像の曲面装飾で、平面で設計した曲線パターンを実物形状の表面に投影して加工用データとして展開する

データフロー 🔄

入力 1: 投影する 3D 曲線(フェイス)

入力 2: 投影先の NURBS スプライン曲面

Method(Along Vector で軸方向投影 / Parametrically で UV ドメイン直接マッピング)と Cycle Type を選択

投影演算(Ray Tolerance / Fit Tolerance / Divisions per Span で精度制御)

出力: 曲面上にプロファイル曲線として貼り付いた NURBS / Bezier 曲線

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Page 📁

対象フェイス・曲面の選択 🎯

Face Group .facegroup 🎯
Face Group (フェイスグループ) — 投影元となるフェイス(曲線・ポリゴン)を入力 1 のジオメトリの中から指定するためのパターン入力
– グループ名や、*[0-9] 等のパターンマッチング記法を受け付ける
– 空欄時は入力 1 のフェイス全体が投影対象となる
– 詳細は Pattern Matching の記法を参照

Surface Group .surfgroup 🌐
Surface Group (曲面グループ) — 投影先となる NURBS スプライン曲面を入力 2 のジオメトリの中から指定するためのパターン入力
– 複数曲面の一部だけを投影対象にしたい場合に使う
– 空欄時は入力 2 の曲面全体が投影対象となる

対応関係の決定 .cycle 🔄

Cycle Type (循環方式) — 複数のフェイスと複数の曲面が入力された際の、フェイスと曲面の対応関係を決定するメニューパラメータ

項目 内部名 説明
All on Each Surface in Sequence .allseq 全フェイスを各曲面に順次投影。パラメトリック投影時は空間的な並び順が保持される(例: 「hello」の文字列を投影すると文字間隔がそのまま曲面上に並ぶ)。Along Vector 投影時は適用されない
All on Each Surface Overlapping .allover 全フェイスを各曲面に重ねて投影。パラメトリック投影時は空間的な並び順が無視され、指定 UV 領域に重なって配置される。Along Vector 投影時は適用されない
One per Surface .oneeach フェイスと曲面を入力順またはグループ順に 1 対 1 で対応させて投影する
Cycled .cycled 1 対 1 対応と同様だが、フェイス数より曲面数が多い場合はフェイスを最初から繰り返し循環させて全曲面に投影する

Method Page 🧭

投影方式 .method 🧭

Method (投影方式) — ベクトル方向への空間的投影と、曲面 UV ドメインへのパラメトリックマッピングを切り替えるメニューパラメータ

項目 内部名 説明
Along Vector .vector フェイスを指定した 3D ベクトル方向に投影し、曲面との交差をプロファイル曲線として取り出す。1 本の曲線が複数のプロファイルに分かれる場合もあり、曲面と交差しないフェイスは何も生成されない
Parametrically .parametric フェイスの空間サイズを曲面の UV ドメインに直接マッピングする。曲面のパラメータ化に依存して歪みが出やすいが、形状が規則的でコード長パラメータ化の曲面では高速かつ良好に動作する

ベクトル投影の軸 .axis 📐

Axis (投影軸) — フェイスを投影する 3D ベクトル方向を決定するメニューパラメータ。各カーテシアン軸・法線・最短距離・任意ベクトルから選択

項目 内部名 説明
X .xaxis カーテシアン X 軸方向へ投影
Y .yaxis カーテシアン Y 軸方向へ投影
Z .zaxis カーテシアン Z 軸方向へ投影
Face Normal .fnorm 各フェイスの法線方向に沿って投影する。フェイスごとに投影方向が異なる可能性があり、非平面フェイスに対しても良好に動作する
Minimum Distance .mindist 3D フェイス全体を曲面までの最短距離ベクトルに沿って投影する。投影解像度は Divisions per Span で制御される
User Defined .other Vector パラメータで X・Y・Z 各成分を直接指定して任意方向に投影する

投影方向と投影面の制御 🎚️

Vector .vector ➡️
Vector (ベクトル) — AxisUser Defined を選択した際に、投影ベクトルの X・Y・Z 成分を直接指定する
– 他の軸選択時は無効化される
– 任意方向の斜め投影や、ユーザー定義の固定ベクトル投影に使う

Side .projside 🔀
Side (投影面) — ジオメトリのどちら側に投影するかを選択(最も近い側 / 最も遠い側)
Closest (最も近い側): 投影ベクトルのどちらの向きでも、曲面の最も近い部分に投影。例えば曲線が円筒の内側にある場合は両側に 2 本の曲線が生成され、外側にある場合は曲線に近い側のみに投影される
Farthest (最も遠い側): Closest の逆。円筒内側では両側生成、外側では遠い側に投影される

投影面の選択 .projside 🔀

Side (投影面) — 曲面のどちら側(近い側 / 遠い側)に投影するかを決定するメニューパラメータ

項目 内部名 説明
Closest .closest 投影ベクトルのいずれの向きにおいても、曲面の最も近い部分に投影する。例えば円筒内側の曲線は両側に 2 本のプロファイルを生成し、外側の曲線は曲線に近い側にのみ投影される
Farthest .farthest Closest の逆方向。円筒内側では同様に両側生成され、外側の曲線は曲線から遠い側に投影される

投影精度の設定 🎯

Divisions per Span .sdivs 🔢
Divisions per Span (スパン分割数) — フェイスのスパンあたりに計算するポイント数を指定する
– スパンは、ポリゴンでは隣接 CV 間のライン、スプライン曲線では隣接ブレークポイント間の弧
– 値が大きいほど投影精度が高くなる(計算コストとのトレードオフ)

Ray Tolerance .rtolerance 📐
Ray Tolerance (光線許容誤差) — 投影ベクトルに沿って曲面と交差判定する際の精度を制御する
– 3D 曲線の各ポイントから投影ベクトル方向に光線を飛ばし、曲面との交差点を求める
– 値を小さくすると交差検出が厳密になるが、計算負荷が増す

Fit Tolerance .ftolerance 📏
Fit Tolerance (フィット許容誤差) — 投影結果を 2D 曲線にフィッティングする際の精度を制御する
通常は 0.01 未満の値を使用
– 値を小さくするほど元のフェイスへの忠実度が上がるが、フィッティング計算コストが増加

Max UV Gap (%) .uvgap 📊
Max UV Gap (%) (最大 UV ギャップ) — 分離した 2 本のプロファイルを 1 本に結合してよい曲面ドメインサイズの許容パーセンテージ
– 値が大きいほど隙間が空いたプロファイル同士でも連結されやすくなる

Order .order 🎚️
Order (次数) — 投影結果として生成されるプロファイル曲線のスプライン次数を指定する
– 曲線の型(Bezier または NURBS)は元の空間曲線から継承されるが、次数はフィット品質制御のために独立指定
– 元のフェイスがポリゴンの場合、投影結果は NURBS 曲線として生成される

Preserve Sharp Corners .csharp 📍
Preserve Sharp Corners (鋭角コーナーの保持) — 投影曲線中の鋭角コーナーを補間する際の精度を制御する
曲率変化が急な領域がある場合はオンにする
– コーナー位置で曲線の特徴が丸まらないよう、ブレークポイントとして扱う

Super Accurate Projection .accurate 🎯
Super Accurate Projection (超精密投影) — 代数的プルーニングアルゴリズムを用いた高精度な交差判定を有効化する
非常に高精度だが計算コストも非常に高い
– 通常モードで交差検出が破綻する複雑な曲面・微細曲線の組み合わせでのみ使用を検討

パラメトリック軸の対応 .ufrom 🗺️

U from / V from (UV 対応軸) — 空間座標(X・Y・Z)のうちどれを曲面の U・V パラメトリック方向にマッピングするかを決定するメニューパラメータ

項目 内部名 説明
X Coordinate .uvx X 座標を U 方向にマッピング
Y Coordinate .uvy Y 座標を U 方向にマッピング
Z Coordinate .uvz Z 座標を U 方向にマッピング

UV 範囲とマッピング 📏

Map Profile to Range .userange 🗺️
Map Profile to Range (プロファイルを範囲に合わせる) — 投影フェイスを曲面ドメインの指定範囲にスケーリング・変換するかを指定(デフォルト: オン)
– オン: フェイスが曲面ドメインの U Range / V Range 内に収まるようスケーリング・変換される
– オフ: フェイスの座標が曲面ドメインに変換なしで直接マッピングされる(曲面ドメイン外のポイントは不可視となる)
Profile SOP の Parametrically to X Y オプションで抽出した曲線を再投影する場合は、必ずオフにする(既にパラメトリック展開済みのため再スケーリング不要)

U Range .urange 📏
U Range (U 範囲) — 曲面の U パラメトリック方向のうち、マッピング対象とする領域をパーセンテージで指定する
0-1 のフルレンジ指定で U 方向全域にマッピング
– 0-1 の範囲に制限されず、外側の値も指定可能

V Range .vrange 📏
V Range (V 範囲) — 曲面の V パラメトリック方向のうち、マッピング対象とする領域をパーセンテージで指定する
0-1 のフルレンジ指定で V 方向全域にマッピング
– 0-1 範囲外も指定可能(範囲外プロファイルは不可視)

マッピング方式 .maptype 🗺️

Mapping Type (マッピング方式) — 既存のプロファイルを指定の曲面ドメイン範囲内に再配置・スケーリングする方法を選択するメニューパラメータ

項目 内部名 説明
Uniform .unif 曲面のパラメータ化を考慮せず、投影フェイスの空間座標を曲面ドメインの (U,V) 点へ一様変換する(実装が単純で軽量)
Chord Length .chordlen 曲面のパラメータ化を考慮し、モデルの空間的・パラメトリック決定要因に最適な投影を計算する(モデル形状を尊重した高品質マッピング)

実践アイデア 💡

Example 1: ロゴを曲面に貼付け 🎨

Text SOP (ロゴ曲線) → Project SOP (Method=Along Vector, Axis=Z) → Sphere SOP → Material SOP → Geometry COMP

Text SOP で生成したロゴ文字列の輪郭曲線を、製品の曲面モデル(NURBS スプライン曲面)に Z 軸方向から投影してプロダクトの曲面装飾を作るパターンです。Project SOP の Along Vector モードと Axis=Z でプレス機のような垂直投影を実現し、曲面上のプロファイル曲線として貼り付けます。Material SOP で輪郭の色や太さを設定すれば、レーザー彫刻のプレビューや CG 上の刻印表現として使えます。

  1. Text SOP でロゴテキストを生成し、必要に応じて Transform SOP で位置・スケールを調整して投影元曲線を準備
  2. Sphere SOP や Polypatch SOP 等で投影先となる NURBS スプライン曲面を入力 2 に接続
  3. Project SOP の MethodAlong VectorAxisZ に設定して Z 軸方向の垂直投影に切り替え
  4. SideClosest に設定し、曲面の手前側にのみ投影されるようにする
  5. Material SOP で投影されたプロファイル曲線に輪郭色を設定し、Geometry COMP で表示

Example 2: ラウンドトリップ編集 🔄

NURBS Surface with Profile → Profile SOP (Method=Extract, Parametrically to X Y=ON) → Edit / Transform SOP → Project SOP (Method=Parametrically, Map Profile to Range=OFF) → 元の曲面

曲面上に貼り付いたプロファイル曲線を Profile SOP でパラメトリック展開で 2D 化し、XY 平面で頂点編集や Transform SOP による位置調整を施した後、Project SOP の Parametrically モードで元の曲面上の同じ位置に正確に戻すラウンドトリップワークフローです。曲面に貼り付いたままでは編集しづらいプロファイルを、いったん平面に出してから加工して元の場所に戻したい場合に使います。

  1. プロファイル曲線が貼り付いた NURBS スプライン曲面を Profile SOP に入力
  2. Profile SOP の MethodExtractParametrically to X Y をオンに設定して XY 平面のパラメトリック表現として抽出
  3. 得られた 2D ファセットの頂点を直接編集、または Transform SOP で位置・回転・スケーリングを調整
  4. Project SOP の MethodParametrically に設定し、Map Profile to Rangeオフ にする(既にパラメトリック展開済みのため再スケーリング不要)
  5. 元の NURBS 曲面を入力 2 に接続して投影実行 — 編集結果が元プロファイルと同じパラメトリック位置で曲面に再貼付される

Example 3: 法線投影でクリーンな刻印 📐

Line SOP (装飾パターン) → Project SOP (Method=Along Vector, Axis=Face Normal) → 任意形状の NURBS 曲面 → Sweep SOP → Material SOP

起伏のある任意形状の曲面に対し、フェイス法線方向(Face Normal)に沿って装飾パターン曲線を投影することで、曲面の凹凸に追従した自然な刻印・装飾ラインを生成するパターンです。各フェイスごとに法線方向が異なるため、平面投影では歪んでしまう複雑な形状でも、表面に密着した投影結果が得られます。投影曲線を Sweep SOP のバックボーンとして使えば、立体的な装飾レリーフも生成できます。

  1. 装飾パターンとして使う 3D 曲線(手描きの Line SOP / Text SOP / Spline 曲線等)を入力 1 として準備
  2. 起伏のある NURBS スプライン曲面(彫刻したい製品形状)を入力 2 に接続
  3. Project SOP の MethodAlong VectorAxisFace Normal に設定してフェイス法線方向の投影に切り替え
  4. Preserve Sharp Corners をオンにしてパターンの鋭角部分の特徴を保持、Fit Tolerance を 0.005 程度に下げて投影精度を上げる
  5. 投影プロファイル曲線を Sweep SOP のバックボーンに接続し、断面プロファイルを押し出して立体装飾を生成

関連オペレータ 🔗

類似機能OP 🔍

  • Profile SOP — Project SOP の逆方向操作: 曲面上のプロファイル曲線を独立した 3D 曲線として取り出す。ラウンドトリップ編集のペア
  • Surfsect SOP — 曲面同士のブール演算で交差プロファイルを生成する。Project SOP が曲線→曲面なら Surfsect SOP は曲面→曲面の交差処理

組み合わせ推奨OP 🔄

  • Profile SOP — Profile SOP(Extract + Parametrically to XY)で取り出した 2D ファセットを編集してから Project SOP で同位置に再投影するラウンドトリップ
  • Sweep SOP — Project SOP で生成した曲面上のプロファイル曲線をバックボーンに、断面プロファイルを押し出して立体装飾・レリーフを生成
  • Surfsect SOP — Surfsect SOP の曲面ブール結果プロファイルとは別経路で、独立 3D 曲線を Project SOP で曲面に貼り付ける(装飾と幾何構築の使い分け)
  • Trim SOP — Project SOP で生成したプロファイル曲線を境界として曲面をトリミング(穴開けや切り抜き)する後段処理
  • Convert SOP — 投影結果の NURBS / Bezier プロファイル曲線をポリゴン化して、下流のポリゴンベースのジオメトリ処理に流す

前処理・後処理SOP 🎯


Info CHOP情報 📊

Project SOP は Info CHOP による詳細情報取得に対応しています。

ジオメトリ統計 📐

  • num_points: この SOP に含まれるポイント数
  • num_prims: この SOP に含まれるプリミティブ数
  • num_particles: この SOP に含まれるパーティクル数
  • num_vertices: num_vertices — 投影プロファイルの制御点や曲面の頂点を合算した頂点総数

GPU 転送タイミング 🎮

  • last_vbo_update_time: 別スレッドで SOP の CPU データを GPU 上のジオメトリデータに更新するのにかかった時間 (フレーム時間外)
  • last_meta_vbo_update_time: 別スレッドで metaball や NURBS のようなメタサーフェスジオメトリデータを GPU に更新するのにかかった時間 (フレーム時間外)

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始以降にこのオペレータがクックされた合計回数
  • cook_time: 直近のクック所要時間 (ミリ秒)
  • cook_frame: このオペレータが最後にクックされたフレーム番号
  • warnings: このオペレータの警告数
  • errors: このオペレータのエラー数

クック統計 ⏱️

  • total_cooks: total_cooks — プロセス開始以降にこのオペレータがクックされた合計回数
  • cook_time: cook_time — 直近のクック所要時間(ミリ秒)。光線交差判定とフィッティングが走るため、複雑曲面では値が大きくなりやすい
  • cook_frame: cook_frame — このオペレータが最後にクックされたフレーム番号
  • cooked_this_frame: cooked_this_frame — 当該フレームでクックされた場合は 1

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

よくある問題と解決策 🔧

❌ Problem: 投影プロファイルが曲面上に現れない
✅ Solution:

  • MethodAlong Vector の場合、投影ベクトル方向で入力 1 のフェイスが入力 2 の曲面と交差しているか確認 — 交差しないとプロファイルは生成されない
  • AxisFace NormalMinimum Distance に変更して、ベクトル方向に依存しない投影で交差検出を試す
  • MethodParametrically に切り替え、空間的な交差不要のマッピング投影を試す
  • Face Group / Surface Group のパターンマッチング指定が空欄でないか確認(誤指定で対象がゼロになることがある)

❌ Problem: 投影結果が歪む / 期待した位置に乗らない
✅ Solution:

  • MethodParametrically の場合、曲面の UV パラメータ化に依存して歪みやすい — Mapping TypeUniform から Chord Length に変更してパラメータ化を尊重したマッピングに切り替え
  • U from / V from の空間座標対応が、曲面の UV 方向の向きと一致しているか確認(例: 縦方向の曲面に対して Z 座標を U 方向にマッピングしているか)
  • Fit Tolerance を 0.005 等に下げてフィッティング精度を上げ、形状の細部を保持する
  • Divisions per Span を増やしてスパンあたりのサンプリング数を上げる

❌ Problem: 1 本の曲線から複数のプロファイルが生成される
✅ Solution:

  • 閉じた曲面(円筒・球など)の内側に曲線がある場合は Closest / Farthest のどちらでも両側に投影されるため、必要なら投影前に曲線を曲面の外側に移動する
  • Max UV Gap (%) を大きく設定して分離プロファイルを 1 本に結合する
  • Cycle TypeOne per Surface に変更し、複数フェイスが 1 曲面に重なって投影されるのを防ぐ

❌ Problem: クックが重くフレームレートが落ちる
✅ Solution:

  • Super Accurate Projection が有効になっていないか確認 — 高精度だが非常に重いため、通常はオフにする
  • Divisions per Span を下げてスパンあたりのサンプリング数を減らす(精度とのトレードオフ)
  • Fit Tolerance を 0.01 程度に緩めてフィッティング許容誤差を拡大し、収束計算を早める
  • 前段で Refine SOPConvert SOP でフェイス・曲面のポイント数を削減してから投影する

参考資料 📚

その他 🔗

公式リソース 📖

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