
概要 📖 – プリミティブを個別に変形
Primitive SOPは、入力 SOP のプリミティブ 1 つずつに対し、変形・テンプレート整列・メタ重み・パーティクル描画タイプを編集する SOPです。第 2 入力のテンプレート点に沿った配置や、Lookat Object 指定によるカメラ正対スプライト、メタボールの重み調整、パーティクル描画タイプ切替まで、プリミティブ単位の細やかな編集を 1 ノードで完結させます。
主な用途 🎯
- プリミティブ単位での位置・回転・拡縮の編集(SOP 全体ではなく各プリミティブを個別変形)
- テンプレート点に沿った整列(第 2 入力の点位置・法線に各プリミティブを合わせる)
- スプライト群を常にカメラへ正対させる用途(Lookat Object でカメラを指定)
- メタサーフェスの重み付け編集(Meta-Surface Weight でメタボール合成の影響度を調整)
- パーティクル描画タイプの切替(ライン描画と Point Sprite 描画の選択)
データフロー 🔄
入力 1: プリミティブを持つ SOP
入力 2 (任意): テンプレート点 SOP
↓
プリミティブごとに変形 / Lookat / メタ重み / パーティクル描画タイプを適用
↓
出力: 編集済み SOP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 にカメラのパスを指定して各スプライトを常にカメラへ向けます。ビルボード表現の定番フローで、葉や火花、テキストカードなどに使えます。
- Rectangle SOP で板を作り、Copy SOP でテンプレート点に沿って複数配置します
- Primitive SOP を後段に接続し、
Lookat Objectにカメラ COMP のパスを設定します Up-Vectorを Y = 1 のままにし、必要に応じて値を強めて直立を保たせます- 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 にして、各プリミティブをテンプレート点の位置と法線に整列させます。曲面上にプレートを貼り付けるような用途に向きます。
- Rectangle SOP などの板状プリミティブを用意します
- Sphere SOP や Grid SOP をテンプレート点として用意し、Primitive SOP の第 2 入力に接続します
Do Transformationをオンにし、Rotate to TemplateをMatch Normalsに設定します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 属性で見た目を調整できます。
- 発生源となる SOP(Grid SOP など)を Particle SOP に接続してパーティクルを生成します
- Primitive SOP を後段に接続し、
Particle Render Typeをオンにします Particle TypeをRender as Point Spritesに設定します- 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 🎯
- 前処理: Copy SOP、Particle SOP、Sprite SOP、Sphere SOP、Grid SOP
- 後処理: Transform SOP、Merge SOP、Convert SOP、Material 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 TemplateをOff以外に切替えます(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 CHOP の
num_particlesを見ます) Render as Point Sprites選択時は Geometry COMP に Point Sprite MAT を割当てる必要があります
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Primitive SOP
- TouchDesigner公式ドキュメント – Copy SOP
- TouchDesigner公式ドキュメント – Point Sprite MAT

