
概要 📖 – 格子点で頂点を変形
Lattice SOPは、格子点や任意点群の変位に従って入力ジオメトリを自由変形 (FFD) させる SOPです。初期状態の格子 (Rest) と変形後の格子 (Deformed) の差分をジオメトリに伝播させることで、メッシュ全体を粘土のように曲げたりねじったりするキャラクターアニメーションやプロップ変形の基礎ツールになります。
主な用途 🎯
- 格子 (Lattice) を曲げてメッシュを丸ごと自由変形 (FFD) — オブジェクト全体を粘土のように曲げ・ねじり・膨らませる
- Grid SOP を Rest / Deformed の 2 入力に与えて変形差分を伝播 — 初期格子と変形後格子の差分でジオメトリを追従変形
- Deform Type を Points に切替えて任意点群でメッシュを操作 — 不規則配置のコントロールポイント群で局所的に変形
- カーネル関数 (Wyvill / Elendt / Blinn / Links) で影響範囲の減衰特性を選択 — メタボール的な滑らかさで点の影響を分布
- Group パターンで変形対象ポイントを絞り込み — メッシュの一部分のみを格子変形対象に指定
データフロー 🔄
入力 0: 変形対象ジオメトリ + 入力 1: Rest 格子 + 入力 2: Deformed 格子
↓
Deform Type / Divisions / Kernel / Radius で対応関係計算
↓
各ポイントが格子変位に従い追従変形
↓
出力: 変形後ジオメトリ SOP
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Lattice Page 📁
対象ポイント絞り込み 🎯
Group .group 🎯
– Group (変形対象ポイント) — 入力 0 のうち変形対象とするポイントのサブセットを指定するパターン文字列
– 空欄の場合は入力全体が変形対象になる
– * や 0-15 等の Pattern Matching 記法が使える
変形タイプ .deformtype 🎛️
規則的な格子で変形させるか、任意点群で変形させるかの切替
| 項目 | 内部名 | 説明 |
|---|---|---|
| Lattice | .lattice |
規則的な格子 (Grid SOP の頂点配列) で変形。直方体状の格子を曲げ・ひねりして全体を変形させる古典的 FFD |
| Points | .points |
不規則な点群 (任意の SOP の点) を変形コントローラとして使用。点の影響範囲をメタボール的に分布させて局所変形 |
格子分割数 .divs 🔢
Divisions .divs 🔢
– Divisions (格子分割数) — Rest / Deformed として接続する格子グリッドの X / Y / Z 軸方向の分割数
– 内部成分: X (divsx) / Y (divsy) / Z (divsz)
– 入力 1 / 入力 2 に接続する Grid SOP 等の分割数と必ず一致させる必要がある
- X (divsx) — 横方向の分割数
- Y (divsy) — 縦方向の分割数
- Z (divsz) — 奥行方向の分割数
カーネル関数 .kernel 🎛️
Deform Type を Points にしたときの、各点が周囲のジオメトリに与える影響の減衰特性を選ぶメタカーネル
| 項目 | 内部名 | 説明 |
|---|---|---|
| Wyvill model | .wyvill |
Wyvill 関数 — 中心で最大、半径外で滑らかに 0 へ収束する標準的メタボール曲線 |
| Elendt model | .elendt |
Elendt 関数 — Wyvill より急峻な減衰で局所的な変形が出やすい |
| Blinn model | .blinn |
Blinn 関数 — 古典的なガウス状減衰で柔らかい変形に向く |
| Links model | .links |
Links 関数 — 隣接点同士の連結性を反映する減衰、複数点の重ね合わせがなめらかになる |
※ 注意: Kernel Function は Deform Type を Points にしたときのみ意味を持ちます。Lattice モードでは無視されます。詳細は公式の Metaball Model Types を参照してください。
影響半径 .radius 📏
Radius .radius 📏
– Radius (影響半径) — Deform Type が Points のときに、各コントロールポイントが周囲のジオメトリに与える影響範囲の大きさ
– 大きくすると変形が広範囲になだらかに広がり、小さくすると局所的なつまみ出しのような変形になる
– Lattice モードでは無視される
実践アイデア 💡
Example 1: 格子で全体を曲げ変形 🟦
Box SOP → Lattice SOP (入力 0) ← Grid SOP (Rest, 入力 1) ← Grid SOP (Deformed, 入力 2) → 出力
立方体メッシュを 2 つの Grid SOP (Rest と Deformed) で挟み込み、Deformed 側の格子点を Transform SOP や Point SOP で曲げると、入力 0 のジオメトリが格子の変位差分に従って追従変形します。古典的 FFD ワークフローの基本形。
- Box SOP 等のベースメッシュを用意して Lattice SOP の入力 0 に接続
- Grid SOP を 1 つ作り Rest 用として Lattice SOP の入力 1 に接続
- 同じ分割数で 2 つ目の Grid SOP を作り Deformed 用として入力 2 に接続
- Lattice SOP の
Deform TypeをLattice、Divisionsを Grid SOP の分割数と一致させる - Deformed 側の Grid SOP に Transform SOP を挿入して回転 / シア / 拡大すると、入力 0 のメッシュも同じく変形する
Example 2: 任意点群でつまみ出し変形 📌
Sphere SOP → Lattice SOP (Deform Type: Points) ← Point SOP (Rest) ← 同点群を移動した SOP (Deformed)
球メッシュに対し、不規則配置の数点だけをコントローラとして使い、Deform Type を Points に切替えて部分的なつまみ出し・凹み変形を作る例。Kernel Function と Radius で各点の影響範囲をメタボール的に滑らかに分布させます。
- Sphere SOP を入力 0 に接続
- Add SOP / Point SOP 等で不規則な数点の点群を作り Rest 用として入力 1 に接続
- 同じ点群を Transform SOP または Point SOP で局所的に移動した出力を Deformed として入力 2 に接続
- Lattice SOP の
Deform TypeをPointsに切替 Kernel FunctionをWyvill等から選び、Radiusを調整して影響範囲の広さを決める
Example 3: CHOPで格子をアニメ変形 🔄
Grid SOP (Rest) / Grid SOP + CHOP to SOP (Deformed) → Lattice SOP → Geometry COMP
Deformed 側の格子点を CHOP to SOP でドライブし、LFO / Noise CHOP 等の信号で格子全体を時間的に揺らすことで、入力ジオメトリにアニメ変形を加える構成。VJ ライブのプロップ変形や呼吸表現に向きます。
- Grid SOP 2 個を同じ分割数で用意し、Rest / Deformed として入力 1 / 入力 2 に接続
- Deformed 側 Grid SOP に CHOP to SOP を挿入し、LFO CHOP / Noise CHOP の出力を点位置に流す
- Lattice SOP の
Deform TypeをLattice、Divisionsを Grid SOP の分割数と揃える - 入力 0 に変形させたいベースメッシュを接続
- 出力を Geometry COMP に流してレンダリング、CHOP の振幅・周波数で変形の強さを制御
関連オペレータ 🔗
類似機能OP 🔍
- Magnet SOP — 別ジオメトリで点群を磁力的に引き寄せる変形。局所的なメッシュ膨張・凹みに使う
- Deform SOP — Capture SOP のウェイト属性と Bone 階層を使ったスケルタル変形。骨で動かしたいときの代替
- Twist SOP — 軸まわりのねじり・湾曲・テーパー等のパラメトリック変形
組み合わせ推奨OP 🔄
- Grid SOP — Rest / Deformed として入力 1 / 入力 2 に接続する標準的格子ソース
- Transform SOP — Deformed 側格子を回転・シア・拡大して FFD の変形量を決めるドライバ
- Point SOP — 格子点を個別に書換えて局所的な変形パターンを作る
- CHOP to SOP — CHOP 信号を格子点位置に流してアニメ変形を駆動
- Geometry COMP — Lattice SOP の変形後ジオメトリをレンダリングパイプラインへ流す
前処理・後処理SOP 🎯
- 前処理: Box SOP、Sphere SOP、Grid SOP
- 後処理: Convert SOP、Transform SOP、Null SOP
Info CHOP情報 📊
Lattice 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:
- 入力 1 (Rest) と入力 2 (Deformed) の両方に格子オブジェクトが接続されているか確認
Divisionsの X / Y / Z が Rest / Deformed の Grid SOP の分割数と一致しているか確認Groupに変形対象外のポイントしか含まれていないか (空欄にして全点対象でテスト)
❌ Problem: 格子分割数がズレてメッシュが破綻する
✅ Solution:
- Rest 側 Grid SOP と Deformed 側 Grid SOP の
Rows/Columns/ 厚み方向分割を完全に一致させる - Lattice SOP の
Divisionsパラメータも同じ値に合わせる - 格子全体が変形対象メッシュの bounding box を包んでいるか確認 (はみ出した点は外挿で予期しない位置に飛ぶ)
❌ Problem: Points モードで影響範囲がおかしい・尖った変形になる
✅ Solution:
Radiusを大きくしてコントロールポイント同士の影響範囲を重ねるKernel FunctionをWyvillやBlinnに切替えて滑らかな減衰特性にする- Rest / Deformed の点群が同じ順序・同じ点数で並んでいるか確認 (順序不一致で対応が崩れる)
❌ Problem: 変形後の法線が崩れる・シェーディングがおかしい
✅ Solution:
- 後段に Convert SOP や Point SOP を入れて法線を再計算する
- 変形量が大きすぎる場合はベースメッシュの分割を細かくしてからかけ直す
- 入力ジオメトリの段階で法線属性が存在するか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Lattice SOP
- TouchDesigner公式ドキュメント – Metaball SOP(Model Types 解説)
- TouchDesigner公式ドキュメント – Pattern Matching
- TouchDesigner公式ドキュメント – Grid SOP

