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

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

Primitive SOP のプリミティブ単位変形機能を示す図

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

概要 📖 – プリミティブを個別に変形

Primitive SOPは、入力 SOP のプリミティブ 1 つずつに対し、変形・テンプレート整列・メタ重み・パーティクル描画タイプを編集する SOPです。第 2 入力のテンプレート点に沿った配置や、Lookat Object 指定によるカメラ正対スプライト、メタボールの重み調整、パーティクル描画タイプ切替まで、プリミティブ単位の細やかな編集を 1 ノードで完結させます。

主な用途 🎯

  • プリミティブ単位での位置・回転・拡縮の編集(SOP 全体ではなく各プリミティブを個別変形)
  • テンプレート点に沿った整列(第 2 入力の点位置・法線に各プリミティブを合わせる)
  • スプライト群を常にカメラへ正対させる用途(Lookat Object でカメラを指定)
  • メタサーフェスの重み付け編集(Meta-Surface Weight でメタボール合成の影響度を調整)
  • パーティクル描画タイプの切替(ライン描画と Point Sprite 描画の選択)

データフロー 🔄

入力 1: プリミティブを持つ SOP
入力 2 (任意): テンプレート点 SOP

プリミティブごとに変形 / Lookat / メタ重み / パーティクル描画タイプを適用

出力: 編集済み SOP

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Transform Page 📁

変形の有効化 .doxform 🔘

Do Transformation .doxform
Do Transformation (変形の実行) — オンにするとプリミティブ単位の変形(移動・回転・拡縮)が有効になります。
オフのままでは下のパラメータを設定しても変形は適用されないため、最初に必ず確認します。

テンプレート連動 .dorot 🧭

Rotate to Template (テンプレートへの整列) — 第 2 入力に接続したテンプレート点の位置と法線に、各プリミティブを整列させるモードを選択します。

項目 内部名 説明
Off .off 整列しない(変形パラメータの値のみ適用)
On .on プリミティブの法線が (0,0,1) であると見なし、テンプレート点の法線方向へ向ける
Match Normals .match プリミティブの実際の法線と、テンプレート点の法線が一致するように回転

変形順序 .xord 🔀

Transform Order (変形の適用順) — 移動 (T) / 回転 (R) / 拡縮 (S) を適用する順番を選びます。順番が異なると同じ数値でも結果が変わります。

項目 内部名 説明
Scale Rotate Translate .srt 拡縮 → 回転 → 移動 の順
Scale Translate Rotate .str 拡縮 → 移動 → 回転 の順
Rotate Scale Translate .rst 回転 → 拡縮 → 移動 の順
Rotate Translate Scale .rts 回転 → 移動 → 拡縮 の順
Translate Scale Rotate .tsr 移動 → 拡縮 → 回転 の順
Translate Rotate Scale .trs 移動 → 回転 → 拡縮 の順

回転順序 .rord 🔃

Rotate Order (回転軸の適用順) — X / Y / Z 軸まわりの回転を適用する順番を選びます。

項目 内部名 説明
Rx Ry Rz .xyz X → Y → Z の順に回転
Rx Rz Ry .xzy X → Z → Y の順に回転
Ry Rx Rz .yxz Y → X → Z の順に回転
Ry Rz Rx .yzx Y → Z → X の順に回転
Rz Rx Ry .zxy Z → X → Y の順に回転
Rz Ry Rx .zyx Z → Y → X の順に回転

移動・回転・拡縮 .trs 🎯

Translate .t ➡️
Translate (移動量) — X / Y / Z の各軸方向にプリミティブを移動する量を指定します。
プロファイル(2D 曲線プリミティブ)の場合は tx / ty のみが使われます。

Rotate .r 🔄
Rotate (回転角) — X / Y / Z の各軸まわりの回転角度(度)を指定します。
プロファイルの場合は rz のみが使われます。

Scale .s 📐
Scale (拡大縮小率) — X / Y / Z の各軸方向の拡縮率を指定します。
プロファイルの場合は sx / sy のみが使われます。

Pivot .p 📍
Pivot (基準点) — 変形の基準点(中心)の位置を X / Y / Z で指定します。
プロファイルの場合は px / py のみが使われます。

基準オブジェクトと上方向 .lookat 👁️

Lookat Object .lookat 🎥
Lookat Object (注視対象オブジェクト) — 各プリミティブが向くべき対象のパスを指定します。
オブジェクト空間での Lookat となり、ワールド空間で行いたい場合はオブジェクト側の Transform ページの Lookat を使います。
カメラのパスを指定すると、複数のスプライトを常にカメラへ正対させる用途で便利です。

Up-Vector .upvector ⬆️
Up-Vector (上方向ベクトル) — Lookat 適用時にプリミティブをどの方向で立てるかを X / Y / Z で指定します。
既定値は Y = 1 で、対象が近づいた際に Z 軸まわりに自然に回り込む挙動になります。
ベクトルを長くするほどプリミティブは直立を保ち、Lookat 対象との接近時にも回転が抑制されます。


Meta Page 📁

メタサーフェス重み .metaweight ⚖️

Meta-Surface Weight .metaweight
Meta-Surface Weight (メタサーフェスの重み付け) — オンにするとメタサーフェス(メタボール)の重み付けを有効化します。
メタボールの合成への影響度をプリミティブ単位で変えたい場合に使います。

Weight .doweight 🔢
Weight (重み値) — Meta-Surface Weight をオンにしたときに適用する重みの数値を入力します。
大きいほど合成への寄与が強くなります。


Particles Page 📁

パーティクル描画切替 .doprender 🔘

Particle Render Type .doprender
Particle Render Type (パーティクル描画タイプの切替) — オンにすると下の Particle Type メニューでパーティクルの描画方法を選べるようになります。

パーティクルタイプ .prtype

Particle Type (パーティクルの描画方法) — 上の切替がオンのとき、パーティクルをどの形で描画するかを選びます。

項目 内部名 説明
Render as Lines .lines 各パーティクルを 2 点からなるラインとして描画。長さは速度に基づいて決まり、速度ゼロのときは 1 ピクセルになります。
Render as Point Sprites (旧) .pointprites Point Sprite MAT 用の描画方式。各パーティクルがカメラに正対する正方形ピクセル群になり、サイズは MAT 側パラメータと pscale 属性で決まります。テクスチャ座標は自動生成 ((0,0) が左下、(1,1) が右上)。
Render as Point Sprites .pointsprites 上記と同じく Point Sprite MAT 用の描画方式(新しい内部名)。

実践アイデア 💡

Example 1: カメラへ常に正対 🎥

Rectangle SOP (複数枚) → Copy SOP (位置散布) → Primitive SOP (Lookat Object=Camera) → Geometry COMP → Render TOP

板状のスプライトを散布した後、Primitive SOP の Lookat Object にカメラのパスを指定して各スプライトを常にカメラへ向けます。ビルボード表現の定番フローで、葉や火花、テキストカードなどに使えます。

  1. Rectangle SOP で板を作り、Copy SOP でテンプレート点に沿って複数配置します
  2. Primitive SOP を後段に接続し、Lookat Object にカメラ COMP のパスを設定します
  3. Up-Vector を Y = 1 のままにし、必要に応じて値を強めて直立を保たせます
  4. Geometry COMP に接続し、Render TOP でカメラを動かしても全スプライトが正対し続けることを確認します

Example 2: テンプレート点に整列 🧭

Rectangle SOP → Primitive SOP (入力 2 = テンプレート点 SOP, Rotate to Template=Match Normals) → Geometry COMP

第 2 入力にテンプレート点 SOP を接続し、Primitive SOP の Rotate to Template を Match Normals にして、各プリミティブをテンプレート点の位置と法線に整列させます。曲面上にプレートを貼り付けるような用途に向きます。

  1. Rectangle SOP などの板状プリミティブを用意します
  2. Sphere SOP や Grid SOP をテンプレート点として用意し、Primitive SOP の第 2 入力に接続します
  3. Do Transformation をオンにし、Rotate to TemplateMatch Normals に設定します
  4. Translate / Scale をテンプレート点の局所座標で微調整して配置を整えます

Example 3: パーティクルを面描画 ✨

入力 SOP → Particle SOP → Primitive SOP (Particle Render Type=ON, Particle Type=Render as Point Sprites) → Point Sprite MAT → Render TOP

Particle SOP の出力を Primitive SOP に通し、Particle Render Type をオン・Particle Type を Render as Point Sprites に設定して、カメラ正対のテクスチャ付きスプライトとして描画させます。Point Sprite MAT 側のサイズと pscale 属性で見た目を調整できます。

  1. 発生源となる SOP(Grid SOP など)を Particle SOP に接続してパーティクルを生成します
  2. Primitive SOP を後段に接続し、Particle Render Type をオンにします
  3. Particle TypeRender as Point Sprites に設定します
  4. Geometry COMP に Point Sprite MAT を割り当て、テクスチャやサイズを調整します

関連オペレータ 🔗

類似機能OP 🔍

  • Transform SOP — SOP 全体に一括変形を掛ける(プリミティブ単位ではなく SOP 単位)
  • Point SOP — ポイント属性(位置・法線・色)を編集する(プリミティブ単位ではなく点単位)
  • Copy SOP — テンプレート点に沿った複製を行う(複製しつつ整列)

組み合わせ推奨OP 🔄

  • Particle SOP — パーティクルを生成し、Primitive SOP で描画タイプを切替える
  • Point Sprite MAT — Render as Point Sprites と組み合わせてテクスチャ付きスプライトを描画
  • Sprite SOP — スプライト生成後の整列・正対調整を Primitive SOP で行う
  • Metaball SOP — Meta-Surface Weight でメタボールの合成寄与を個別調整
  • Geometry COMP — Primitive SOP の出力をレンダリングパイプラインに投入

前処理・後処理SOP 🎯


Info CHOP情報 📊

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

ジオメトリ統計 📐

  • num_points: この SOP に含まれるポイント数
  • num_prims: この SOP に含まれるプリミティブ数
  • num_particles: この SOP に含まれるパーティクル数

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 — このオペレータが最後にクックされたフレーム番号

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

よくある問題と解決策 🔧

❌ Problem: Do Transformation をオフのままパラメータを変えても何も起きない
✅ Solution:

  • Do Transformation をオンに切替えます(変形系パラメータはこのスイッチがオンのときだけ有効)
  • Translate / Rotate / Scale の値が既定値(移動 0 / 回転 0 / 拡縮 1)から変更されているか確認します
  • プロファイル(2D 曲線)の場合は tx / ty / rz / sx / sy / px / py 以外は無視される点に注意します

❌ Problem: Rotate to Template が効かない、整列されない
✅ Solution:

  • 第 2 入力にテンプレート点を持つ SOP を接続しているか確認します(テンプレート点が無いと整列対象が存在しません)
  • Rotate to TemplateOff 以外に切替えます(On または Match Normals
  • プリミティブ側に法線が無いと Match Normals は正しく働かないため、必要なら下流で Point SOP 等で法線を整えます

❌ Problem: Lookat Object を指定したのに正対しない / 想定外の向きになる
✅ Solution:

  • Lookat Object のパスがオブジェクト COMP として解決できているか確認します
  • Up-Vector の方向が用途に合っているか確認します(既定は Y = 1、垂直を保ちたい場合はベクトルを強める)
  • オブジェクト空間 Lookat なので、ワールド空間で正対させたい場合は親 COMP 側の Transform ページの Lookat を併用します

❌ Problem: Particle Type を切替えても見た目が変わらない
✅ Solution:

  • Particle Render Type をオンにしているか確認します(オフでは Particle Type の選択は無視されます)
  • 入力 SOP に実際にパーティクルが含まれているか確認します(Info CHOPnum_particles を見ます)
  • Render as Point Sprites 選択時は Geometry COMP に Point Sprite MAT を割当てる必要があります

参考資料 📚

その他 🔗

公式リソース 📖

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