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

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

Arm SOP のアーム形状生成機能を示す図

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

概要 📖 – 腕の骨格を作って繋ぐ

Arm SOPは、腕の骨長・関節位置・エンドアフェクタからアーム形状ジオメトリを生成し、ボーン階層 (Bone COMP) / Capture SOP による変形に供する SOPです。Capture Type を Ellipses にすればボーン階層 (Bone COMP) 連携、Capture Regions にすれば Capture SOP 連携を選択でき、End Affector オブジェクトで手先位置を駆動して IK ライクな制御が可能です。

主な用途 🎯

  • キャラクターリギング用の腕ジオメトリを 1 ノードで生成 (Clavicle / Humerous / Ulna / Hand)
  • ボーン階層 (Bone COMP) と組み合わせて Ellipses 変形するためのデフォーメーションジオメトリ提供
  • Capture SOP と組み合わせて Capture Regions 変形するためのキャプチャ領域ジオメトリ提供
  • End Affector オブジェクトに腕を追従させて IK ライクな手先制御を実現
  • Lengths / Transforms パラメータで骨長や関節断面を調整し、キャラクター体型を作り分け

データフロー 🔄

入力 (オプション): End Affector 用オブジェクト

Arm Page (Capture Type / Arm Axis / Lengths / Transforms / End Affector の設定)

出力: 5 関節区間 (Clavicle / Shoulder / Humerous / Elbow / Ulna / Wrist / Hand) を持つアーム SOP

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Arm Page 💪

Capture Type .capttype 🎛️

変形ジオメトリの種類を選択するメニューパラメータ

項目 内部名 説明
Ellipses .ellipses ボーン階層と組み合わせて使用する楕円ベースの変形ジオメトリ
Capture Regions .cregions Capture SOP と組み合わせて使用するキャプチャ領域ベースの変形ジオメトリ

Arm Axis .axis 🧭

モデルの配置軸を切り替えるメニューパラメータ

項目 内部名 説明
+ X .posx +X 軸に沿ってモデルを配置
– X .negx -X 軸に沿ってモデルを配置

アーム全体制御パラメータ ⚙️

Radius .bonerad
– 円形断面の半径スケールを制御するスカラーパラメータ
– 全関節 (Shoulder / Elbow / Wrist) の Transforms Z スケールに乗算される

Rotate Hand .rotatehand
– 手と手首関節を End Affector オブジェクトの向きに合わせて回転させるブレンドパラメータ
0: 前腕に対する相対回転 / 1: End Affector と同じ向き

Auto Elbow Twist .autoelbow 🔄
– 肘関節のデフォルトねじれを自然な位置に調整するトグル
– オンにすると人体の肘可動域に近いツイストが自動適用される

Elbow Twist .elbowtwist 🔁
– 肘関節の回転角度を手動指定するスカラーパラメータ (度)

Flip Elbow .flipelbow 🔃
– 肘の代替位置解を選択するトグル
– 2 通りある肘位置の解の片方が破綻したときに切り替える


Lengths Page 📏

骨の長さ 🦴

Clavicle .clavlength 📐
– 鎖骨 (肩甲帯) の長さ

Humerous .humlength 📐
– 上腕骨 (Humerus) の長さ

Ulna .ulnalength 📐
– 尺骨 (前腕) の長さ

Hand .handlength 📐
– 手の長さ

関節の長さ 🔗

Shoulder Joint .shoulder 🦴
– 肩関節の長さ (関節区間の軸方向サイズ)

Elbow Joint .elbow 🦴
– 肘関節の長さ (関節区間の軸方向サイズ)

Wrist Joint .wrist 🦴
– 手首関節の長さ (関節区間の軸方向サイズ)


Transforms Page 📐

Shoulder 円トランスフォーム 🟠

Shoulder 1〜5 .shoulder1t 1️⃣
– 肩関節の 1〜5 番目の円の X / Z 位置と全体スケールを指定する 3 要素ベクトル (5 個並んでいる)
– 各エントリ shoulder{N}t(X, Y(=Z位置として扱われる), Z(=スケール)) の 3 成分を持つ

Elbow 円トランスフォーム 🟡

Elbow 1〜5 .elbow1t 2️⃣
– 肘関節の 1〜5 番目の円の X / Z 位置と全体スケールを指定する 3 要素ベクトル (5 個並んでいる)
– 各エントリ elbow{N}t(X, Y(=Z位置として扱われる), Z(=スケール)) の 3 成分を持つ

Wrist 円トランスフォーム 🟢

Wrist 1〜5 .wrist1t 3️⃣
– 手首関節の 1〜5 番目の円の X / Z 位置と全体スケールを指定する 3 要素ベクトル (5 個並んでいる)
– 各エントリ wrist{N}t(X, Y(=Z位置として扱われる), Z(=スケール)) の 3 成分を持つ


End Affector Page 🎯

End Affector オブジェクトと変換 🖐️

Affector Object .affector 🎯
– 手先位置を駆動する End Affector オブジェクトのパス
– 未指定の場合は下記 Translate / Rotate / Scale で制御されるデフォルト Box が使用される

Translate .t ↔️
– End Affector の平行移動 (X / Y / Z)
– 詳細は Transform SOP の Transforms 解説を参照

Rotate .r 🔄
– End Affector の回転 (X / Y / Z 軸)
– 詳細は Transform SOP の Transforms 解説を参照

Scale .s 📏
– End Affector のスケール (X / Y / Z)
– 詳細は Transform SOP の Transforms 解説を参照


実践アイデア 💡

Example 1: ボーン階層で基本リグ 🦾

Arm SOP (Capture Type=Ellipses) → Bone COMP → Geometry COMP → Render TOP

Arm SOP のデフォルト設定で楕円ベースのアームジオメトリを生成し、ボーン階層 (Bone COMP) に接続してリグ階層上で変形させる最小構成。キャラクターアームの試作起点として使えます。

  1. Arm SOP を配置し Capture TypeEllipses に設定
  2. Bone COMP でボーン構造を組み、肩・肘・手首の階層を作る
  3. Lengths Page の Clavicle / Humerous / Ulna / Hand でキャラ体型に合わせて骨長を調整
  4. Geometry COMP に接続し Render TOP で変形が正しく追従していることを確認

Example 2: Capture SOPでスキニング 🎨

Arm SOP (Capture Type=Capture Regions) → Capture SOP → Deform SOP → Geometry COMP

Capture Regions モードでアームジオメトリを生成し、Capture SOP に渡してスキンメッシュに対するキャプチャ領域として利用する例。Skeleton ベースよりも自由度の高いウェイト付けが可能になります。

  1. Arm SOP の Capture TypeCapture Regions に切替
  2. 別の入力メッシュ (キャラクターの腕モデル) を Capture SOP の第 1 入力に、Arm SOP の出力を Capture SOP の第 2 入力に接続
  3. Deform SOP で Bone 階層に従った変形を適用
  4. Geometry COMP に接続して最終レンダリングを確認

Example 3: End Affector オブジェクトでハンド IK 駆動 ✋

Target Geometry → Arm SOP (Affector Object=Target, Rotate Hand=1) → Bone COMP → Geometry COMP

外部の Geometry COMP をターゲットオブジェクトとして Arm SOP の End Affector に指定し、ターゲットを移動するだけで腕全体が追従する IK ライクな手先制御を構築する例。

  1. ターゲット用の小さな Geometry COMP (例: 立方体) を配置し、シーン内で動かせる位置に置く
  2. Arm SOP の Affector Object パラメータにターゲットの COMP パスを指定
  3. Rotate Hand1 に設定し、手の向きがターゲットの向きに追従するようにする
  4. ターゲット COMP のスケールが (1, 1, 1) のままになっていることを確認 (スケールがかかっていると Rotate Hand が破綻)
  5. ターゲットを動かして腕全体と手首が追従することを確認

関連オペレータ 🔗

類似機能OP 🔍

  • TODO

組み合わせ推奨OP 🔄

  • Capture SOP — Capture Regions モード時に Arm SOP の出力をキャプチャ領域として受ける
  • Deform SOP — Bone 階層に応じてキャプチャ済みメッシュを実際に変形させる
  • Bone COMP — アーム関節の Bone 階層を組み立てる
  • Geometry COMP — Arm SOP の出力をレンダリングパイプラインに投入

前処理・後処理SOP 🎯


Info CHOP情報 📊

Arm 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:

  • Capture TypeEllipses になっているか確認 (ボーン階層は Ellipses モードを前提とする)
  • Bone 階層の親子関係が肩 → 上腕 → 前腕 → 手首の順で正しく組まれているか確認
  • Lengths Page の各骨長が 0 になっていないか確認 (長さ 0 では関節区間が潰れる)

❌ Problem: Rotate Hand を上げても手が思った向きに回らない
✅ Solution:

  • End Affector オブジェクトの Scale(1, 1, 1) のままになっているか確認 (スケールが入ると Rotate Hand が破綻する)
  • Rotate Hand = 0 なら前腕基準、1 なら End Affector 基準の向きになるので、中間値で補間されているかを意識する
  • End Affector オブジェクトの向き (Rotate パラメータ) が手のあるべき向きと一致しているか確認

❌ Problem: 肘の曲がる方向が逆 / ねじれて見える
✅ Solution:

  • Flip Elbow をオンにして代替の肘解に切り替える
  • Auto Elbow Twist をオンにして自然な肘可動を有効化、または Elbow Twist で手動角度を指定
  • Arm Axis+X / -X のどちらでモデリングされているかと一致しているか確認

❌ Problem: Capture SOP に接続しても変形が反映されない
✅ Solution:

  • Capture TypeCapture Regions に切り替えてから Capture SOP に渡す
  • Capture SOP の入力順序が正しいか確認 (第 1 入力にスキンメッシュ、第 2 入力に Arm SOP のキャプチャ領域)
  • 下流に Deform SOP を置いて Bone 階層を参照させ、実際の変形を発生させる

参考資料 📚

その他 🔗

公式リソース 📖

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