
概要 📖 – クォータニオン属性付与と回転補間
Attribute CHOPは、入力チャンネルの回転三つ組にクォータニオン属性を付与し、後段で滑らかな回転補間を可能にする CHOPです。X / Y / Z 個別補間では発生する不自然なブレンディングを回避し、二つの回転状態間の最短経路(slerp)で補間する基盤となります。
主な用途 🎯
- 回転チャンネル三つ組(rx / ry / rz)への クォータニオン属性付与
- 球面線形補間(slerp)による滑らかな回転ブレンディング
- Interpolate CHOP や Composite CHOP との組み合わせによる最短経路回転補間
- 回転順序(Rotate Order)を明示した回転データの正規化
- 既存属性の上書き(Replace)/ 結合(Append)/ 削除(Remove)による属性管理
データフロー 🔄
入力: 回転チャンネル三つ組 (rx, ry, rz)
↓
Function(Pass / Replace / Append / Remove)+ Rotate Order 設定
↓
クォータニオン属性が付与されたチャンネル
↓
出力: 後段の補間 OP(Interpolate / Composite 等)で球面線形補間
Tips
初心者の方は、以下日本語書籍も手元にあると安心です。
リンク
リンク

まる。
実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Quaternion Page 📋
Function .slerp 🎛️
属性に対して実行する操作を決定するメニューパラメータ
| 項目 | 内部名 | 説明 |
|---|---|---|
| Pass Through | .pass |
属性を変更せずそのまま通す |
| Replace | .replace |
既存の属性を消去し、新しい属性で置き換える |
| Append | .append |
既存属性を保持しつつ新しい属性を結合(既に同名属性がある場合はエラー) |
| Remove | .remove |
Scope 対象の全チャンネルから属性を削除 |
Rotate Order .rord 🔄
回転三つ組の回転順序(オイラー角の適用順)
| 項目 | 内部名 | 説明 |
|---|---|---|
| Rx Ry Rz | .xyz |
X → Y → Z の順に回転を適用 |
| Rx Rz Ry | .xzy |
X → Z → Y の順に回転を適用 |
| Ry Rx Rz | .yxz |
Y → X → Z の順に回転を適用 |
| Ry Rz Rx | .yzx |
Y → Z → X の順に回転を適用 |
| Rz Rx Ry | .zxy |
Z → X → Y の順に回転を適用 |
| Rz Ry Rx | .zyx |
Z → Y → X の順に回転を適用 |
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: 二つの回転状態間の滑らかなブレンディング 🔄
入力 CHOP A / 入力 CHOP B → Attribute CHOP (Replace, xyz) → Interpolate CHOP → Geometry COMP
- 二つの回転状態(rx / ry / rz の三つ組)を別々の CHOP で用意
- それぞれの出力に Attribute CHOP を Function = Replace、Rotate Order = Rx Ry Rz で適用しクォータニオン属性を付与
- Interpolate CHOP で 2 入力をブレンドすると slerp による最短経路補間が自動で行われる
- 出力を Geometry COMP の rotate パラメータに接続して滑らかな姿勢遷移を実現
Example 2: 既存属性に新しい回転属性を結合する ➕
入力 CHOP (既存属性あり) → Attribute CHOP (Append, yxz) → 後段処理
- 既に他の属性が設定されたチャンネルを入力に取る
- Attribute CHOP の Function を Append に設定し、Rotate Order を yxz に変更
- 既存属性は保持されたまま新しい回転順序の属性が結合される(同名属性が既存ならエラー)
- 複合的な属性管理が必要なリギングや姿勢推定パイプラインで活用
Example 3: 回転順序の異なる外部データを正規化する 📐
External Serial CHOP (zyx 順) → Attribute CHOP (Replace, zyx) → 内部処理(xyz 前提)
- 外部センサーや別ソフトから来る回転データの順序が
zyxなど内部標準と異なる場合に使用 - Attribute CHOP の Rotate Order を実データの順序に合わせて指定
- クォータニオン属性として正規化されることで、後段は回転順序を意識せず slerp で扱える
- 異なる座標系・回転規約のデータを統一する正規化レイヤとして機能
関連オペレータ 🔗
類似機能OP 🔍
- Interpolate CHOP — クォータニオン属性を認識して slerp 補間を実行する後段 OP
- Object CHOP — オブジェクトの位置・回転チャンネルを取得(クォータニオン属性に対応)
組み合わせ推奨OP 🔄
- Interpolate CHOP — Attribute で属性付与した回転を slerp 補間する主用途
- Composite CHOP — クォータニオン属性を保持したまま複数 CHOP を合成
- Join CHOP — 複数 CHOP を時間方向に連結(属性も保持)
- Stretch CHOP — 属性付き CHOP の長さ変更(補間時に slerp 適用)
- Resample CHOP — 属性付きチャンネルのリサンプリング(slerp 補間で滑らかに)
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Attribute 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: Append 実行時に「属性が既に存在する」エラーが出る
✅ Solution:
- 対象チャンネルに既に同名のクォータニオン属性が付いている場合、Append は失敗する
- 意図的に上書きしたい場合は Function =
Replaceに変更 - 既存属性を一旦削除したい場合は前段に Function =
Removeの Attribute CHOP を挟む
❌ Problem: 回転補間がカクついて滑らかにならない
✅ Solution:
- 後段の補間 OP(Interpolate CHOP 等)がクォータニオン属性に対応しているか確認
- 入力チャンネルが rx / ry / rz の三つ組で揃っているか、Scope で正しく対象指定されているか確認
- Rotate Order が実際のデータの回転順序と一致しているかを確認(順序ミスマッチで補間が崩れる)
❌ Problem: Rotate Order を変えても出力が変わらないように見える
✅ Solution:
- 属性は内部メタデータのため、CHOP Viewer の数値表示には現れにくい
- 後段で実際に補間 / 合成される段階で初めて影響が可視化される(テスト用に Interpolate CHOP を挟んで確認)
- Geometry COMP の rotate に export してビューポートで姿勢の変化を確認するのが確実
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

