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

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

Inverse Kin CHOP の逆運動学解決を示す図

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

概要 📖 – 骨の連鎖を逆運動学で解く

Inverse Kin CHOPは、Bone オブジェクトのチェーンに対して逆運動学(IK)の解を計算し、End Affector の位置に末端 Bone を到達させるための関節角度を自動算出する CHOPです。キャラクタの腕や脚、尻尾といった関節構造のアニメーションで、目標位置を指定するだけで関節の曲げ角度を自動的に求めたいときに使います。

主な用途 🎯

  • Bone オブジェクト チェーンに対する逆運動学(Inverse Kinematics)解の計算と適用
  • End Affector の位置に末端 Bone を到達させるための関節角度を自動算出
  • キャラクタの腕・脚・尻尾などの関節アニメーション制御
  • Rest 角度・Capture 角度の可視化(チェーンの初期姿勢確認用ヘルパー)
  • カーブに沿った Bone チェーンの整列(尻尾・背骨アニメーション)

データフロー 🔄

Bone チェーン構造(Root Bone → 中間 Bone → End Bone)

Solver Type 選択
(None / Rest / Capture / Inverse / Constraint / Curve)

End Affector / Twist Affector / Curve Object 参照

IK 解算出(Twist・Damping 適用)

出力: 各 Bone の回転チャンネル

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Kinematics Page 🦴

Solver Type .solvertype 🧮

Bone オブジェクトとその祖先・子の動作を決定する解法の選択メニュー

項目 内部名 説明
None .none Bone オブジェクトに動作の解を適用しない
Show Rest Position .rest チェーン内の Rest 角度で定義された初期姿勢を表示するヘルパー解法
Show Capture Position .capture Capture 角度パラメータの回転値を表示(Capture システムの capture points 操作で設定された値)
Inverse Kinematics .inverse 末端 Bone が End Affector の原点に到達するように IK を解く(Rest 角度に基づくチェーン形状)
IK with Constraints .constraint 拘束条件付きの IK 解法
Follow Curve .curve Bone をオブジェクト内の最初のカーブに沿って整列(尻尾・背骨のアニメーションに有用)

Root Bone .boneroot 🌱

Bone チェーンの起点となる Bone:

  • Root Bone パス: Bone チェーンの起点として指定する Bone オブジェクトのパス

End Bone .boneend 🎯

Bone チェーンの末端 Bone:

  • End Bone パス: Bone チェーンの末端として指定する Bone オブジェクトのパス(Root から End までの全中間 Bone がチェーンに含まれる)

End Affector .endaffector 📍

末端 Bone が到達すべき目標位置オブジェクト:

  • End Affector パス: 末端 Bone が到達すべき目標位置を提供するオブジェクトのパス

Twist Affector .twistaffector 🌀

チェーンのねじれ基準オブジェクト:

  • Twist Affector パス: チェーンのねじれ基準として参照するオブジェクトのパス(Twist 値はその上に追加適用される)

IK Twist .iktwist 🔄

IK 解で許容されるねじれ量:

  • IK Twist 値: IK 解算出時にチェーン全体に適用されるねじれの大きさ

IK Dampening .ikdampen 💧

角度許容範囲端でのダンピング量:

  • IK Dampening 値: 角度の許容範囲の端付近でチェーンの動きを減衰させる値(ジッター抑制やオーバーシュート防止に有効)

Curve Object .curve 📐

Follow Curve モード時の追従カーブ:

  • Curve Object パス: curve(Follow Curve)Solver Type 時に Bone チェーンが追従するカーブオブジェクトのパス

Common Page 🔧

Time Slice .timeslice ⏱️

Time Slice モードの強制設定:

  • オン: チャンネルを「タイムスライス」モードに強制
  • タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間

Scope .scope 🎯

影響を受けるチャンネルの絞り込み:

  • Scope 文字列: 影響を受けるチャンネルを指定する文字列
  • パターンマッチング: *[1-10] 等のパターンが使用可能

Sample Rate Match .srselect

複数の入力 CHOP のサンプルレートが異なる場合の処理方法

項目 内部名 説明
Resample At First Input’s Rate .first 最初の入力のレートで他をリサンプル
Resample At Maximum Rate .max 最高サンプルレートでリサンプル
Resample At Minimum Rate .min 最低サンプルレートでリサンプル
Error If Rates Differ .err レート不一致でエラー

Export Method .exportmethod 📤

CHOP チャンネルをパラメータに接続する方法

項目 内部名 説明
DAT Table by Index .datindex DAT テーブルのインデックスでチャンネルとパラメータを対応付け
DAT Table by Name .datname DAT テーブルの行名でチャンネルとパラメータを対応付け
Channel Name is Path:Parameter .autoname チャンネル名を `path:parameter` 形式で記述し直接対応付け

Export Root .autoexportroot 🌳

Channel Name is Path:Parameter モード時のパス基点:

  • Export Root パス: autoname モードでチャンネル名のパス部分を相対化する基点 OP のパス

Export Table .exporttable 📋

DAT Table エクスポート方式での参照 DAT:

  • Export Table DAT: datindex / datname モード時に参照する DAT のパス

Rename from .commonrenamefrom 🔤

リネーム対象チャンネルのパターン:

  • Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列

Rename to .commonrenameto 🔁

リネーム後の置換パターン:

  • Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)

実践アイデア 💡

Example 1: 腕の IK 制御(手先目標位置で関節を自動屈曲) 💪

Bone Chain (Shoulder → Elbow → Wrist) → Inverse Kin CHOP (Solver: Inverse) ← End Affector (Null) → 各 Bone の回転チャンネル
  1. 肩・肘・手首の Bone オブジェクトをボーン階層 (Bone COMP) で構築
  2. End Affector 用に Null オブジェクトを配置し手先目標位置として使用
  3. Inverse Kin CHOP の Solver Type を「Inverse Kinematics」に設定
  4. Root Bone に肩、End Bone に手首、End Affector に Null を指定
  5. Null を動かすと肩・肘の回転角度が自動的に解かれ手首が Null 位置に追従する

Example 2: 尻尾アニメーション(Follow Curve でカーブに沿わせる) 🦎

Bone Chain (Tail) → Inverse Kin CHOP (Solver: Follow Curve) ← Curve Object → 各 Bone の回転
  1. 尻尾の各セグメントを Bone オブジェクトとして連結
  2. 尻尾の形状を定義する SOP カーブを別途用意
  3. Inverse Kin CHOP の Solver Type を「Follow Curve」に設定
  4. Curve Object に該当カーブオブジェクトを指定し Root Bone と End Bone でチェーン範囲を定義
  5. カーブを変形させると尻尾全体がそのカーブに沿って整列する

Example 3: Rest 姿勢の可視化(チェーン初期確認用) 🧍

Bone Chain → Inverse Kin CHOP (Solver: Show Rest Position) → 各 Bone の Rest 角度表示
  1. Solver Type を「Show Rest Position」に設定
  2. Root Bone と End Bone でチェーン範囲を指定
  3. 各 Bone がチェーン内の Rest 角度で定義された初期姿勢で表示される
  4. IK 設定前のチェーン構造の確認やトラブルシュートに使用

関連オペレータ 🔗

類似機能OP 🔍

  • Kinect CHOP — センサーから直接関節角度を取得(Inverse Kin は目標位置から角度を逆算)
  • Body Track CHOP — ボディトラッキングで関節データを取得(Inverse Kin は IK 演算で求める)

組み合わせ推奨OP 🔄

  • Math CHOP — 出力された関節角度のスケーリングやオフセット適用
  • Filter CHOP — IK 解の急変を時間方向に滑らかに補間しジッター抑制
  • Lag CHOP — End Affector の動きに対する関節追従に遅延と慣性を付加
  • LFO CHOP — End Affector の周期運動信号源として使用しキャラクタを自動アニメ
  • Constant CHOP — テスト用の固定目標位置や Twist 値の供給

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Inverse Kin CHOPは Info CHOP による詳細情報取得に対応しています。

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_sernum: Export接続の更新回数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間(ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: End Affector を動かしてもチェーンが追従しない
✅ Solution:

  • Solver Type が「Inverse Kinematics」または「IK with Constraints」に設定されているか確認
  • Root Bone と End Bone のパスが正しく Bone オブジェクトを指しているか確認
  • End Affector に指定したオブジェクトが存在し有効なパスになっているか Info CHOP で確認

❌ Problem: IK 解が極端な姿勢でジッター(震え)が発生する
✅ Solution:

  • IK Dampening の値を上げて角度許容範囲端での動きを減衰させる
  • Rest 角度を「Show Rest Position」で確認し非現実的な初期姿勢になっていないか点検
  • 後段に Filter CHOP を入れて時間方向にスムージング

❌ Problem: チェーンがねじれない/意図しない方向にねじれる
✅ Solution:

  • Twist Affector が指定されているか、指定オブジェクトの位置が適切か確認
  • IK Twist の値を調整しチェーン全体のねじれ量を制御
  • Twist Affector を使わず手動制御したい場合は IK Twist のみを使う

❌ Problem: Follow Curve モードでチェーンがカーブに沿わない
✅ Solution:

  • Curve Object に指定したオブジェクトの最初のカーブが有効な形状を持っているか SOP Viewer で確認
  • Root Bone と End Bone の範囲がカーブの長さに対して妥当か確認
  • カーブのポイント数が少なすぎる場合は SOP 側でリサンプルしてポイント数を増やす

参考資料 📚

その他 🔗

公式リソース 📖

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