
概要 📖 – 骨の連鎖を逆運動学で解く
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 の回転チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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 の回転チャンネル
- 肩・肘・手首の Bone オブジェクトをボーン階層 (Bone COMP) で構築
- End Affector 用に Null オブジェクトを配置し手先目標位置として使用
- Inverse Kin CHOP の Solver Type を「Inverse Kinematics」に設定
- Root Bone に肩、End Bone に手首、End Affector に Null を指定
- Null を動かすと肩・肘の回転角度が自動的に解かれ手首が Null 位置に追従する
Example 2: 尻尾アニメーション(Follow Curve でカーブに沿わせる) 🦎
Bone Chain (Tail) → Inverse Kin CHOP (Solver: Follow Curve) ← Curve Object → 各 Bone の回転
- 尻尾の各セグメントを Bone オブジェクトとして連結
- 尻尾の形状を定義する SOP カーブを別途用意
- Inverse Kin CHOP の Solver Type を「Follow Curve」に設定
- Curve Object に該当カーブオブジェクトを指定し Root Bone と End Bone でチェーン範囲を定義
- カーブを変形させると尻尾全体がそのカーブに沿って整列する
Example 3: Rest 姿勢の可視化(チェーン初期確認用) 🧍
Bone Chain → Inverse Kin CHOP (Solver: Show Rest Position) → 各 Bone の Rest 角度表示
- Solver Type を「Show Rest Position」に設定
- Root Bone と End Bone でチェーン範囲を指定
- 各 Bone がチェーン内の Rest 角度で定義された初期姿勢で表示される
- 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、無効時は0export_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 側でリサンプルしてポイント数を増やす
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

