
概要 📖 – プリミティブの位置・向きを基準点に整列
Align SOPは、プリミティブの UV 基準点同士を一致させて、位置と向きを整列させる SOPです。補助入力を使わない単一入力モードではプリミティブ同士を連鎖配置でき、補助入力を接続すれば基準ジオメトリへの吸着整列もできるため、レイアウトの自動化やジオメトリのスナップ用途に使えます。
主な用途 🎯
- 複数プリミティブを 1 列に整列させて並べる (UV 基準点で連鎖配置)
- 補助入力 (2nd input) の基準プリミティブに対して左入力を吸着・整列
- Groups of N Primitives モードで N 個ごとのサブグループ単位に整列
- 整列と同時に回転を一致させて向きを揃える (Rotate オプション)
- Right UV End を指定して左プリミティブを基準区間に均等分布配置
データフロー 🔄
入力 1 (左/整列対象 SOP) [+ 入力 2 (右/基準 SOP・オプション)]
↓
Group でサブセット抽出
↓
Align モードで対象範囲決定
↓
Left UV / Right UV / Bias で基準点計算
↓
Translate / Rotate で位置・向きを整列
↓
後段 Transform Page で post-alignment 補正
↓
出力: 整列済み SOP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Page 📁
対象プリミティブ選択関連パラメータ 🎯
Group .group 🎯
– 整列対象とするプリミティブのサブセットを指定するパターン文字列
– 空欄の場合は入力全体が整列対象になる
– Pattern Matching に従う (* や 0-15 等)
Align .align 🎛️
整列の対象範囲をどのプリミティブ単位で行うかの切替
| 項目 | 内部名 | 説明 |
|---|---|---|
| All Primitives | .all |
Group で絞った全プリミティブを 1 つの連鎖として整列 |
| Groups of N Primitives | .group |
N パラメータで指定した個数ごとのサブグループ単位に整列を反復 |
N 関連パラメータ 🔢
N .inc 🔢
– Groups of N Primitives モード時のサブグループ単位、または周期的にスキップする間隔
– 例: プリミティブが 0–5 の 6 個で N=2 のとき、2 個ずつのサブグループまたは 2 個おきの整列になる
Align Page 📁
Bias 関連パラメータ ⚖️
Bias .bias ⚖️
– 整列のどちら側を基準として固定するかを決定 (0 = Left を固定 / 1 = Right を固定)
– 補助入力なしの場合、Bias=0 だと連鎖の先頭プリミティブが基準、Bias=1 だと末尾が基準になる
UV 基準点関連パラメータ 📍
Left UV .leftuv 📍
– 「左」プリミティブ側のピボット位置 (UV 座標)
– 各プリミティブのこの UV 位置が Right UV にスナップされる
– サブ項目: U (leftuv1) / V (leftuv2)
- U (
leftuv1) - V (
leftuv2)
Right UV .rightuv 📍
– 「右」プリミティブ側のピボット位置 (UV 座標)
– Left UV の点がこの位置に吸着するように整列が行われる
– サブ項目: U (rightuv1) / V (rightuv2)
- U (
rightuv1) - V (
rightuv2)
Right UV End .rightuvend 📏
– 補助入力 (2nd input) 使用時、整列区間の終点となる UV 位置
– 左プリミティブは Right UV と Right UV End の間に均等分布される
– サブ項目: U (rightuvend1) / V (rightuvend2)
- U (
rightuvend1) - V (
rightuvend2)
整列挙動関連パラメータ 🔧
Individual Alignment .individual 🧩
– 入力の各プリミティブを個別に整列する
– オフにすると先頭プリミティブのみが整列され、残りは先頭との相対位置関係を保ったまま移動 (左プリミティブ群の空間レイアウトが保持される)
Translate .dotrans ↔️
– オンの場合、整列時に Left UV の位置を Right UV の位置へ平行移動する
– オフにすると位置の整列をスキップ
Rotate .dorotate 🔄
– オンの場合、Left UV の接線方向を Right UV の接線方向に合わせるよう回転する
– オフにすると向きの整列をスキップし、位置のみ揃える
Transform Page 📁
Transform Order .xord 🎛️
整列後に適用される変換 (Translate / Rotate / Scale) の適用順
| 項目 | 内部名 | 説明 |
|---|---|---|
| Scale Rotate Translate | .srt |
Scale → Rotate → Translate の順 (TouchDesigner 標準のデフォルト) |
| Scale Translate Rotate | .str |
Scale → Translate → Rotate の順 |
| Rotate Scale Translate | .rst |
Rotate → Scale → Translate の順 |
| Rotate Translate Scale | .rts |
Rotate → Translate → Scale の順 |
| Translate Scale Rotate | .tsr |
Translate → Scale → Rotate の順 |
| Translate Rotate Scale | .trs |
Translate → Rotate → Scale の順 |
Rotate Order .rord 🔄
整列後の回転を X / Y / Z 軸に適用する順序
| 項目 | 内部名 | 説明 |
|---|---|---|
| Rx Ry Rz | .xyz |
Rx → Ry → Rz の順 (デフォルト) |
| Rx Rz Ry | .xzy |
Rx → Rz → Ry の順 |
| Ry Rx Rz | .yxz |
Ry → Rx → Rz の順 |
| Ry Rz Rx | .yzx |
Ry → Rz → Rx の順 |
| Rz Rx Ry | .zxy |
Rz → Rx → Ry の順 |
| Rz Ry Rx | .zyx |
Rz → Ry → Rx の順 |
post-alignment 変換関連パラメータ 🛠️
Translate .t ↔️
– 整列処理後にローカル XYZ 軸方向へ追加で平行移動する量
– サブ項目: X (tx) / Y (ty) / Z (tz)
- X (
tx) - Y (
ty) - Z (
tz)
Rotate .r 🔄
– 整列処理後にローカル XYZ 軸方向へ追加で回転する量 (度)
– サブ項目: X (rx) / Y (ry) / Z (rz)
- X (
rx) - Y (
ry) - Z (
rz)
Scale .s 📐
– 整列処理後にローカル XYZ 軸方向へ追加でスケーリングする量
– サブ項目: X (sx) / Y (sy) / Z (sz)
- X (
sx) - Y (
sy) - Z (
sz)
Pivot .p 📌
– 整列処理後の追加変換における基準点 (回転・スケーリングが行われる中心位置)
– サブ項目: X (px) / Y (py) / Z (pz)
- X (
px) - Y (
py) - Z (
pz)
実践アイデア 💡
Example 1: 複数プリミティブを 1 列に連鎖整列させる基本パターン 🟢
Sphere SOP (×N, Merge SOP で結合) → Align SOP (Align=All Primitives, Left UV=(0,0.5), Right UV=(1,0.5), Translate=ON) → Geometry COMP
複数の球を Merge SOP でまとめて Align SOP に流し、各プリミティブの左端 (U=0) を直前プリミティブの右端 (U=1) にスナップさせて 1 列に連鎖配置する最小構成。レイアウトの自動化に使えます。
- Sphere SOP を複数配置し Merge SOP で 1 本にまとめる
- Align SOP を後段に接続し
AlignをAll Primitivesに設定 Left UVを(0, 0.5)、Right UVを(1, 0.5)に設定Translateをオンにして位置整列を有効化- Geometry COMP に接続し、プリミティブが横方向に連鎖配置されることを確認
Example 2: 補助入力で基準ジオメトリにスナップ整列 🎯
Grid SOP (左/整列対象) → Align SOP (2nd input: Sphere SOP, Right UV End 指定) → Geometry COMP
Align SOP の 2 つめの入力に基準プリミティブ (例: Sphere SOP) を接続し、左側のプリミティブを基準ジオメトリの指定区間 (Right UV ~ Right UV End) に均等分布させる用途。基準形状へのスナップに向きます。
- 整列対象となる Grid SOP を 1st input に接続
- 基準となる Sphere SOP を 2nd input に接続
Biasを1(Right 固定) に設定して基準側を不動にRight UVとRight UV Endで基準プリミティブ上の配置区間を指定TranslateとRotateをオンにして位置・向きを基準にスナップ
Example 3: Groups of Nで2個ずつペア整列 🔢
複数 Add SOP → Merge SOP → Align SOP (Align=Groups of N Primitives, N=2) → Geometry COMP
Merge SOP で連結した複数プリミティブを Align SOP の Groups of N モードで 2 個ずつのペアに分け、ペアごとに整列を反復する例。連続配置ではなくグループ単位の整列が必要なときに有効です。
- Add SOP 等で複数プリミティブを生成し Merge SOP で結合
- Align SOP を後段に接続し
AlignをGroups of N Primitivesに設定 Nを2に設定してペア単位の整列に切替Left UV/Right UVをペア内の基準点に合わせて設定- 出力を確認し、2 個ずつ整列が反復適用されていることをチェック
関連オペレータ 🔗
類似機能OP 🔍
- Transform SOP — 全プリミティブに対する一括 Translate / Rotate / Scale 変換
- Sort SOP — プリミティブ・ポイントの順序を並べ替える (Align の前処理として有用)
組み合わせ推奨OP 🔄
- Merge SOP — 整列対象となる複数プリミティブを 1 入力に束ねる前段
- Copy SOP — Align で整列したプリミティブをテンプレート点に複製
- Transform SOP — 整列後の全体オフセット・スケール調整
前処理・後処理SOP 🎯
- 前処理: Merge SOP、Sort SOP、Add SOP
- 後処理: Transform SOP、Copy SOP、Convert SOP
Info CHOP情報 📊
Align 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: 整列後にプリミティブが想定外の位置に飛ぶ
✅ Solution:
Left UVとRight UVが各プリミティブの正しいピボットを指しているか確認 (U/V は 0–1 範囲の正規化座標)Biasの値で「どちらを固定するか」が逆になっていないか確認 (0=Left 固定 / 1=Right 固定)Transform OrderやRotate Orderによる post-alignment 変換が意図せず効いていないか Transform Page を確認
❌ Problem: 向きが揃わず位置だけ整列される
✅ Solution:
Rotateオプションがオンになっているか確認 — オフだと位置整列のみで方向は変えない- プリミティブの UV 接線方向がそもそも揃っているか (NURBS / Bezier プリミティブで UV 方向が想定と違うと回転結果が崩れる)
- 前段に Sort SOP を入れてプリミティブ順序を整えてから Align に流す
❌ Problem: 補助入力 (2nd input) を接続しても基準として認識されない
✅ Solution:
- Align SOP の 2 つめの入力ピンに正しく接続されているか確認 (1st input に流し込んでいないか)
Right UV Endを空欄のままにしていないか確認 — 設定するとそこまでの区間に均等分布される- 基準入力側のプリミティブ数が 0 になっていないか確認 (空入力では整列基準が無く挙動が不定)
❌ Problem: Groups of N Primitives モードで端数プリミティブが残る
✅ Solution:
Nの値とGroupパターンで絞ったプリミティブ総数の整除関係を確認 (端数は無視される)- 前段に Merge SOP を置いて入力プリミティブ数を N の倍数に揃える
- サブグループ単位を変えたい場合は
AlignをAll Primitivesに戻して連鎖整列に切替
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Align SOP
- TouchDesigner公式ドキュメント – Transform SOP
- TouchDesigner公式ドキュメント – Sort SOP
- TouchDesigner公式ドキュメント – Pattern Matching

