
概要 📖 – ガイドカーブに沿わせたボーンの逆運動学
Inverse Curve CHOPは、ガイドカーブに沿わせて Bone COMP の連なりに逆運動学シミュレーションを行う CHOPです。Polygonal / Bezier / NURBS いずれかのカーブを Guide Components から構築し、Bone Start から Bone End までの区間に対して計算したトランスフォームを Map Exports で直接 Bone COMP に書き戻せます。
主な用途 🎯
- ガイドカーブに沿ってボーンチェーンを自動配置する逆運動学計算
- Bone COMP の連なりをカーブの形状に追従させるリギング制御
- Polygonal / Bezier / NURBS カーブによるなめらかなボーン軌道生成
- Up Vector パラメータによるボーンのねじれ(twist)コントロール
- Map Exports で計算結果を Bone COMP のトランスフォームへ直接書き出し
データフロー 🔄
入力: Guide Components(カーブ形状を定義する OP 群)
↓
Interpolation(Polygonal / Bezier / NURBS のカーブ種別決定)
↓
Bone Start / Bone End 区間に逆運動学を適用
↓
Up Vector による twist 制御
↓
出力: ボーンチェーンのトランスフォーム値(Map Exports で Bone COMP へ書き出し可)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Inverse Curve Page 📋
Guide Components .guide 🧩
カーブ形状を定義するガイドオブジェクトの集合:
- Guide Components パス: ガイドカーブを構成するオブジェクト群(通常は Geometry COMP / Null COMP の連なり)のパス指定
Bone Start .bonestart 🦴
ボーンチェーンの開始位置:
- Bone Start: ボーンチェーンの先頭となる Bone COMP のパス
Bone End .boneend 🦴
ボーンチェーンの終了位置:
- Bone End: ボーンチェーンの末尾となる Bone COMP のパス
Span .span 📐
ボーンが占めるカーブ上の区間:
- Span: ボーンチェーンが占めるカーブ上の区間(範囲指定)
Interpolation .interpolation 🌀
Guide Components を使ってどの種類のガイドカーブを生成するか
| 項目 | 内部名 | 説明 |
|---|---|---|
| Polygonal Curve | .polygon |
各ガイドコンポーネントを頂点とするポリゴンを生成 |
| Bezier Curve | .bezier |
各ガイドコンポーネントを制御点とする Bezier 曲線を生成 |
| NURBS Curve | .nurbs |
各ガイドコンポーネントを制御点とする NURBS 曲線を生成 |
Order .order 🔢
NURBS / Bezier 補間時のカーブ次数:
- Order: NURBS または Bezier 補間を使用する際のカーブ次数(高いほど滑らか)
Up Vector .upvector ⬆️
ボーンのねじれ(twist)を制御する up vector の各成分
| 項目 | 内部名 | 説明 |
|---|---|---|
| X | .upvectorx |
up vector の X 成分 |
| Y | .upvectory |
up vector の Y 成分 |
| Z | .upvectorz |
up vector の Z 成分 |
Map Exports .mapexports 📤
計算結果を Bone COMP へ直接書き出すかの切替:
- Map Exports: オン: 計算したトランスフォーム値をボーンチェーン各 Bone COMP のパラメータに直接エクスポート。オフ: チャンネル出力のみで、Bone COMP への適用は手動 Export
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: ガイドカーブに沿った触手アニメーション 🐙
Geometry COMP 群 → Inverse Curve CHOP (Interpolation: Bezier) → Bone COMP チェーン (Map Exports: On)
- Geometry COMP / Null COMP を 4〜6 個並べてカーブの制御点として配置
- Inverse Curve CHOP の Guide Components にそれらのパスを指定
- Bone Start / Bone End にチェーンの先頭・末尾の Bone COMP を指定
- Interpolation を Bezier、Map Exports をオンにして触手のような滑らかなボーン制御を得る
Example 2: ロープ・ホースの追従シミュレーション 🪢
アニメーション付き Null COMP 群 → Inverse Curve CHOP (Interpolation: NURBS, Order: 4) → Bone COMP
- アニメーション付きの Null COMP を Guide Components として並べる
- Inverse Curve CHOP の Interpolation を NURBS、Order を 4 に設定
- Up Vector で Y を 1 にしてロープのねじれを抑える
- Bone COMP のチェーンが NURBS カーブに沿って追従するロープ表現を得る
Example 3: 脊椎・尻尾のリギング 🦎
Spline Guide → Inverse Curve CHOP → Bone COMP (Spine chain) → SOP / Geometry
- キャラクターの脊椎を表す制御点を Geometry COMP として配置
- Inverse Curve CHOP の Bone Start / Bone End に脊椎ボーンチェーンの先頭・末尾を指定
- Span パラメータでカーブ上のボーン分布範囲を調整
- 尻尾や脊椎の自然な曲がりを 1 オペレータでリギング
関連オペレータ 🔗
類似機能OP 🔍
- Kinect CHOP — ボーン姿勢を直接センサーから取得する用途、IK 計算は内蔵せずトラッキング起点
組み合わせ推奨OP 🔄
- Bone COMP — Inverse Curve CHOP の出力対象、ボーンチェーン本体
- Geometry COMP — Guide Components として使うガイドオブジェクト
- Null COMP — Guide Components の軽量な制御点として頻用
- Filter CHOP — 出力トランスフォームを smooth してジッターを抑制
- Math CHOP — Up Vector やトランスフォームの値域変換・スケーリング
前処理・後処理CHOP 🎯
- 前処理: Filter CHOP、Lag CHOP、Math CHOP
- 後処理: Filter CHOP、Lag CHOP、Resample CHOP
Info CHOP情報 📊
Inverse Curve 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: Bone COMP がカーブに追従しない
✅ Solution:
- Bone Start / Bone End のパスがボーンチェーンの実在 Bone COMP を正しく指しているか確認
- Map Exports をオンにする(オフだと CHOP 出力のみで Bone COMP には適用されない)
- Guide Components のパスが空・誤指定でないか確認
❌ Problem: ボーンが激しくねじれてしまう
✅ Solution:
- Up Vector の X / Y / Z を見直してカーブと交差しない方向に設定(典型例: 水平カーブなら Y=1)
- 前段に Filter CHOP や Lag CHOP を入れて Guide Components の急激な動きを smooth
- Interpolation を Polygonal から Bezier / NURBS に切り替えて滑らかな接線を確保
❌ Problem: カーブの形状が想定と違う
✅ Solution:
- Interpolation を Polygonal / Bezier / NURBS で切り替えて意図に合うものを選ぶ
- Order パラメータ(NURBS / Bezier 時)を上げて高次のなめらかさを確保
- Guide Components の数と並び順を確認、足りない場合は制御点を追加
❌ Problem: Span を変えてもボーン配置が更新されない
✅ Solution:
- Bone Start / Bone End が同じ Bone COMP を指していないか確認
- ボーンチェーンが直系(親子関係)で連結されているかヒエラルキーを確認
- Map Exports をオンに切り替えて再クック、または Bone COMP のトランスフォームを手動で reset
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

