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

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

Capture SOP のポイントウェイト割当機能を示す図

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

概要 📖 – 頂点を骨に紐付ける

Capture SOPは、入力ジオメトリのポイントを Capture Region (Bone) にウェイト割当してスケルタルスキニングを準備する SOPです。Hierarchy 配下の Bone 群を traverse して自動でウェイトを計算し、Deform SOP と連携してキャラクター変形パイプラインを構成します。

主な用途 🎯

  • キャラクターリグのスキニング下準備としてジオメトリのポイントを Bone (Capture Region) にウェイト割当
  • Hierarchy 配下の Bone 群を traverse して各 Capture Region から影響度を自動計算
  • NURBS サーフェスの CV ウェイトを Surface モードで安定して計算 (Points モードとの切替対応)
  • Override File (.ocapt) を読込んで自動計算結果に手動ウェイトを上書き
  • Save File による計算済ウェイトの書き出しでイテレーション中の再計算コストを削減

データフロー 🔄

入力 0: ベースジオメトリ (ポイント / CV) + 入力 1 (省略可): Capture Region 群

Weight from / Hierarchy 設定に従ってウェイト計算

Override File 適用 (任意)

出力: ウェイト属性が付与されたジオメトリ SOP

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Capture Page 📁

対象ポイント絞り込み関連パラメータ 🎯

Group .group 🎯
– 入力 0 (input0) の中でウェイト計算対象とするポイントグループを指定
– 空欄なら全ポイントが対象

Hierarchy .rootbone 🌳
– Capture Region を探索する起点となるオブジェクト階層 (COMP) のパス
– このパス配下を traverse して見つかった Capture Region 群でウェイト計算が行われる

Weight from .weightfrom 🎛️

ウェイト計算に使うポイント位置の取得方法

項目 内部名 説明
Surface .surface (デフォルト) サーフェス上の位置でウェイトを計算。NURBS サーフェスのように CV がサーフェスから離れている場合に有効で、CV の「最も影響を受けるサーフェス上の点」を求めてその位置で region 内かを判定
Points .cv ポイント (CV) そのものの位置で region 内かを判定してウェイト計算

キャプチャタイミング・出力関連パラメータ 🎬

Capture Frame .captframe 📅
– キャプチャ計算を行うフレーム番号
– TouchDesigner がこのフレームに到達するたびにジオメトリが再キャプチャされる
– アニメーションレンジ外 (例: -1) を指定するのが一般的

Point Coloring .color 🎨
– 各ポイントを Capture Region のウェイトに応じて着色 (point 属性を使用)
– ポイントは自身が属する Region の色を継承し、ウェイトが軽くなるほど暗く表示される
– どの Region にも捕捉されないポイントは 明るい赤 で表示される
– 切替可能なモード:

  • Default Source Color (coldefault) — ポイントのデフォルトソースカラーを使用
  • Color by Capture Region (colregion) — Capture Region の色でポイントを着色

Override File .captfile 📄
– キャプチャオーバーライドファイル (*.ocapt) のパス
– TouchDesigner のウェイト計算後にこのファイルが読み込まれ、記述された point/region/weight でカスタムウェイトに上書きされる
– 同じ point/region の組合せが複数行ある場合は最後の行が採用される


Override Page 📁

オーバーライドファイル保存関連パラメータ 💾

Save File .savefile 📁
– 全ポイントまたは選択ポイントのウェイトを書き出す作業ファイル (.ocapt) のパス
– このファイルをそのまま編集して Override File に渡すワークフローが標準

Increment Save File .autoincr 🔢
– 保存時に Save File 名を自動でインクリメントする
– オフにすると上書き確認なしに同名で上書きされるため注意

Save All Data to File .savecaptfile 💾
– 全ポイントのウェイトを Save File に書き出す Pulse パラメータ

Save Selected Points to File .savesel
– ビューポートで選択中のポイントのみを Save File に書き出す Pulse パラメータ
– この SOP をビューポートで編集中であることが必須


実践アイデア 💡

Example 1: キャラクタージオメトリへのスキニング下準備 🦴

入力 SOP → Capture SOP (Hierarchy = /obj/character_rig, Weight from = Surface) → Deform SOP → Geometry COMP

キャラクターのベースメッシュに対し、ボーン階層を Hierarchy で指定して Capture SOP でウェイト割当を行い、後段の Deform SOP でスキニング変形を適用するキャラクターアニメーションの基本フロー。

  1. ベースとなるキャラクタージオメトリ SOP を用意
  2. Capture Region SOP 群を含む Bone 階層 COMP を作成 (各 region に色を割当てておくとデバッグしやすい)
  3. Capture SOP の Hierarchy に Bone 階層 COMP のパスを指定
  4. Capture Frame をアニメーションレンジ外 (例: -1) に設定し、その時点で Bone を T ポーズに合わせる
  5. Point ColoringColor by Capture Region にしてビューポートでウェイト分布を確認
  6. 下流に Deform SOP を接続して Bone のアニメーションが反映されることを確認

Example 2: Override File でのカスタムウェイト上書き 📝

Capture SOP (Save File → .ocapt 編集) → Capture SOP (Override File 設定) → Deform SOP

Capture SOP の自動ウェイト計算では肘・膝など関節の境界が綺麗に出ないケースがあります。Save File でウェイトを書き出し、テキストエディタで該当ポイントのウェイトを手動調整した .ocapt を Override File に戻すことで、自動計算 + 手動補正のハイブリッドなウェイト編集が可能になります。

  1. Capture SOP で自動ウェイト計算を実行
  2. Save File に書き出しパスを設定し Save All Data to File を pulse して .ocapt を出力
  3. 出力された .ocapt をテキストエディタで開き、調整したい point/region 行のウェイト値を編集
  4. Override File に編集後の .ocapt のパスを設定
  5. 再キャプチャ後、Deform SOP の変形で関節境界が改善していることを確認

Example 3: 選択ポイントのみウェイトを書き出して局所イテレーション ♻️

Capture SOP (ビューポートで対象ポイント選択) → Save Selected Points to File → 編集後 .ocapt を Override File へ

顔や手など局所だけウェイトを再調整したい場合に、ビューポートで対象ポイントを選択してから Save Selected Points to File で部分書き出しを行い、その差分のみを Override File として運用するイテレーションワークフロー。全ポイント書き出しに比べて編集ファイルが小さく、差分管理しやすくなります。

  1. Capture SOP をビューポートで編集対象として開く
  2. ウェイトを再調整したいポイントだけをビューポートで選択
  3. Save File にパスを設定し Save Selected Points to File を pulse
  4. 書き出された .ocapt を編集し対象ポイントのウェイト値を更新
  5. Override File に編集後 .ocapt を設定して再キャプチャ

関連オペレータ 🔗

類似機能OP 🔍

  • Capture Region SOP — Capture SOP が参照する個々の Region (Bone 形状) を定義する SOP

組み合わせ推奨OP 🔄

  • Deform SOP — Capture SOP が付与したウェイトを使って実際にスキニング変形を適用
  • Capture Region SOP — Capture SOP の Hierarchy 配下に配置して Region (Bone) を定義
  • Bone Group SOP — Bone (Capture Region) 群をグループとして整理する
  • Geometry COMP — Capture SOP + Deform SOP の出力をレンダリングパイプラインへ

前処理・後処理SOP 🎯


Info CHOP情報 📊

Capture 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: 全ポイントが明るい赤で表示される (どの Region にも捕捉されていない)
✅ Solution:

  • Hierarchy パラメータが Bone 階層 COMP の正しいパスを指しているか確認
  • Hierarchy 配下に Capture Region SOP が実在し、Region の Inner/Outer Weight 範囲がジオメトリを覆う大きさになっているか確認
  • Capture Frame の時点で Bone が想定位置にあるかタイムラインを当該フレームに送って目視確認

❌ Problem: NURBS サーフェスでウェイトが想定と大きくズレる
✅ Solution:

  • Weight fromPoints から Surface に切替えて再計算 (NURBS は CV が surface から離れがちなため)
  • Capture Region の Inner/Outer Weight 半径が NURBS の曲率変化に対して大きすぎないか確認
  • サーフェスの U/V 解像度が低すぎる場合は Refine SOP 等で CV を増やしてから再キャプチャ

❌ Problem: .toe を再読み込みするとウェイトが崩れる
✅ Solution:

  • Capture Frame で Bone が T ポーズなど正規姿勢になるよう全 Capture Region に keyframe を打つ
  • Capture Frame をアニメーションレンジ外 (例: -1) にし、本番アニメーションと衝突しない値に設定
  • Bone 階層の親子関係や Constraint が再読み込み時に意図どおり評価されているかタイムライン上で検証

❌ Problem: Override File を設定したのにカスタムウェイトが反映されない
✅ Solution:

  • Override File のパスが解決できているか (相対パス記述の場合は基点 COMP を確認)
  • .ocapt の各行が point /path/to/region prim weight の形式に従っているか、point/region/prim の番号が現在のジオメトリ・階層と整合しているか確認
  • Override File は自動計算後に適用されるため、Region 自体が当該 point に到達していない場合 weight 0 行の意味は変わらない点に注意 (まず自動計算で捕捉できる Hierarchy 設定にしてから上書き)

参考資料 📚

その他 🔗

公式リソース 📖

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