
概要 📖 – スキニング用ボーングループの最適化
Bone Group SOPは、Capture 済みスキンメッシュのポイント別ボーン数とグループ別ボーン数を制限し、GPU スキニング向けに最適化された SOPです。Max Bones per Point で各ポイントに作用するボーン数を低重み側から切り捨て、Max Bones per Group でプリミティブグループあたりのボーン数上限を超えた場合に新しいグループへ自動分割します。
主な用途 🎯
- 1 ポイントあたりに作用するボーン数を制限して GPU スキニングに必要な上限 (例: 4 本) に揃える
- プリミティブグループあたりのボーン数を制限してハードウェア / シェーダ制約に合わせたサブグループへ自動分割
- Capture SOP で生成された Capture Weight 属性をトリムし、重みの低いボーンを無視して軽量化
- Deform SOP に渡す前段でスキンメッシュを最適化してリアルタイム描画コストを下げる
- キャラクターリギングのスキンメッシュをサブメッシュ群に分解し、ボーン数の多いキャラを描画可能な単位へ変換
データフロー 🔄
入力: Capture 済みスキンメッシュ (Capture SOP の出力)
↓
Bone Group SOP (Max Bones per Point / Max Bones per Group の制約適用)
↓
出力: ボーン数を制限し、必要に応じてサブグループに分割されたスキンメッシュ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Bone Group Page 🦴
ボーン数制限 🎛️
Max Bones per Point .bonesperpoint 🎯
– 1 ポイントあたりに作用させるボーンの最大数を指定する整数パラメータ
– この上限に到達するまで、重み (Capture Weight) の低いボーンから順に無視される
– GPU スキニング (シェーダで bone 行列を uniform 渡し) ではハードウェア制約から 4 程度に制限することが多い
Max Bones per Group .bonespergroup 📦
– プリミティブグループ 1 つあたりに含めるボーンの最大数を指定する整数パラメータ
– グループ内のボーン数がこの上限を超えると、新しいプリミティブグループが自動生成される
– シェーダ / GPU の uniform スロット数や同時参照可能なボーン行列数の制約に合わせて設定する
実践アイデア 💡
Example 1: GPU スキニング向けの 4-bones-per-point 制限 🎮
Skin Mesh → Capture SOP → Bone Group SOP (Max Bones per Point=4) → Deform SOP → Geometry COMP
Capture SOP で生成されたスキンメッシュの Capture Weight 属性を Bone Group SOP に通し、1 ポイントあたりのボーン数を 4 に制限してから Deform SOP に渡す典型的な GPU スキニングパイプライン。
- Capture SOP でスキンメッシュにボーンと重みを割り当てる
- Bone Group SOP を Capture SOP の下流に接続し、
Max Bones per Pointを4に設定 - Deform SOP に接続し、Bone 階層を参照させて変形を発生させる
- Geometry COMP に接続して最終レンダリング、フレームレートが改善することを確認
Example 2: ボーン数の多いキャラを描画可能なサブグループに分割 🪓
Capture SOP (50+ bones) → Bone Group SOP (Max Bones per Group=24) → Deform SOP → Render TOP
全身ボーン数が多いキャラクターを描画する際、シェーダの uniform 制約 (例: 24 ボーン上限) に合わせてプリミティブグループを自動分割し、グループごとに描画コールを発行できる形へ落とし込む例。
- Capture SOP で 50 ボーン以上のフルボディスキンを生成
- Bone Group SOP の
Max Bones per Groupを Deform SOP 側で扱える上限 (例:24) に設定 - 出力されたプリミティブグループごとに Deform SOP / Geometry COMP の描画パスを構築
- Render TOP で全身が正しく変形・描画されることを確認
関連オペレータ 🔗
類似機能OP 🔍
- TODO
組み合わせ推奨OP 🔄
- Capture SOP — Bone Group SOP の前段でスキンメッシュにボーンと Capture Weight を割り当てる
- Deform SOP — Bone Group SOP で制限されたボーン構成に基づきメッシュを変形させる
- Bone COMP — スキンメッシュに作用する骨格 (Bone 階層) を定義
前処理・後処理SOP 🎯
- 前処理: Capture SOP
- 後処理: Deform SOP、Transform SOP、Merge SOP
Info CHOP情報 📊
Bone Group 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: Bone Group SOP を通すと変形が崩れる / ウェイトが薄れて見える
✅ Solution:
Max Bones per Pointが小さすぎないか確認 (重み配分が偏っているポイントで主要ボーンが切り捨てられている可能性がある)- 上流の Capture SOP 側で Capture Weight の正規化が走っているか確認
Max Bones per Pointを一段階増やして変形の改善を比較
❌ Problem: プリミティブグループが想定外に多数生成される
✅ Solution:
Max Bones per Groupの値を上げて、1 グループあたりの許容ボーン数を増やす- そもそも Capture SOP で割り当てているボーン総数が多すぎないかを Bone 階層側で見直す
- 出力されたグループを Merge SOP や下流の描画パイプラインで適切に扱えているか確認
❌ Problem: GPU スキニングのパフォーマンスが期待通りに上がらない
✅ Solution:
Max Bones per Pointをハードウェア / シェーダの実上限 (例:4) に合わせるMax Bones per Groupをシェーダで利用可能なボーン uniform 数に合わせて設定- 下流の Deform SOP / レンダリング設定がグループ単位の描画コールを活かしているか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — SOP 概要
- TouchDesigner Wiki — Category:SOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Bone Group SOP
- TouchDesigner公式ドキュメント – Capture SOP
- TouchDesigner公式ドキュメント – Deform SOP

