
概要 📖 – 角度単位の変換と回転表現の相互変換
Angle CHOPは、入力された角度値を度・ラジアン・クォータニオン・2 ベクトルの間で相互変換する CHOPです。Input Units / Output Units の組合せでフォーマット変換を、Input Order / Output Order でオイラー角の適用順序を切り替えます。
主な用途 🎯
- 角度単位の相互変換(度・ラジアン)
- オイラー角からクォータニオンへの変換(ジンバルロック回避用途)
- クォータニオンからオイラー角への展開(パラメータ可視化用途)
- オイラー角と直交ベクトルペアの相互変換(ベクトル指向の回転表現)
- 回転順序(Rx Ry Rz など)の差し替えによる軸変換補正
データフロー 🔄
入力: 角度チャンネル
↓
Input Units 解釈(度/ラジアン/クォータニオン/2 ベクトル)
↓
Input Order(オイラー角の適用順序)
↓
内部表現で回転を保持
↓
Output Order(出力時の適用順序)
↓
Output Units 形式へ変換
↓
出力: 変換後の角度チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Angle Page 📐
Input Units .inunit 📥
入力チャンネルが表す角度フォーマットを指定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Degrees | .degrees |
入力を度(°)として解釈 |
| Radians | .radians |
入力をラジアンとして解釈(1 ラジアン = 約 57.29°、半円 = π ラジアン) |
| Quaternions | .quaternions |
入力を 4 チャンネル(x, y, z, w)のクォータニオンとして解釈 |
| Two Vectors | .twovectors |
入力を 6 チャンネル(第 1 ベクトルの x, y, z + 直交する第 2 ベクトルの x, y, z)として解釈 |
Input Order .inorder 🔁
入力がオイラー角のときに、回転をどの順序で適用したものとみなすか(クォータニオン・2 ベクトルとの相互変換時に使用)
| 項目 | 内部名 | 説明 |
|---|---|---|
| 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 の順序で回転を適用したオイラー角として解釈 |
Output Units .outunit 📤
出力チャンネルの角度フォーマットを指定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Degrees | .degrees |
出力を度(°)形式で書き出し |
| Radians | .radians |
出力をラジアン形式で書き出し |
| Quaternions | .quaternions |
出力を 4 チャンネル(x, y, z, w)のクォータニオンとして書き出し |
| Two Vectors | .twovectors |
出力を 6 チャンネル(直交する 2 ベクトル)として書き出し |
Output Order .outorder 🔃
出力がオイラー角のときに、回転をどの順序で適用するものとして書き出すか(クォータニオン・2 ベクトルからの逆変換時に使用)
| 項目 | 内部名 | 説明 |
|---|---|---|
| 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: 度からラジアンへの変換(数式入力用) 🔄
Constant CHOP (degrees) → Angle CHOP (Input: Degrees → Output: Radians) → Math CHOP / Expression
- Constant CHOP で角度を度単位で入力(例: 90)
- Angle CHOP の Input Units を「Degrees」、Output Units を「Radians」に設定
- 出力をラジアンが期待される計算(sin / cos の引数など)に渡す
- 三角関数を使うシェーダや式参照のために単位を整える
Example 2: オイラー角からクォータニオンへの変換(ジンバルロック回避) 🌀
入力 CHOP (rx, ry, rz) → Angle CHOP (Input: Degrees, Order: xyz → Output: Quaternions) → 補間処理
- rx / ry / rz の 3 チャンネルを持つ CHOP を入力
- Input Units を「Degrees」、Input Order を「Rx Ry Rz」に設定
- Output Units を「Quaternions」に切替(出力は 4 チャンネル x, y, z, w)
- クォータニオン空間で補間や合成を行うことでジンバルロックを回避できる
Example 3: 回転順序の差し替えによる軸変換補正 🧭
External rx, ry, rz → Angle CHOP (Input Order: zyx → Output Order: xyz) → Geometry COMP
- 他ソフト(DCC ツール等)から zyx 順のオイラー角を受け取る
- Angle CHOP の Input Order を「Rz Ry Rx」、Output Order を「Rx Ry Rz」に設定
- Input / Output Units はどちらも「Degrees」のままで順序のみ差し替え
- TouchDesigner の Geometry COMP が期待する xyz 順に正規化された rx, ry, rz が得られる
関連オペレータ 🔗
類似機能OP 🔍
- Math CHOP — 値の四則演算・Range 変換が中心、角度フォーマットの相互変換は不可
- Lookup CHOP — テーブル参照による値変換、角度のフォーマット変換とは別軸
組み合わせ推奨OP 🔄
- Constant CHOP — rx / ry / rz の固定オイラー角を入力源として供給
- Math CHOP — Angle 変換前後で Pre-Add / Multiply によりオフセット・スケール調整
- Geometry COMP — Angle CHOP の出力を rx / ry / rz パラメータへ Export して回転を駆動
- Lag CHOP — 角度変化の急激な遷移を時間方向にスムージング
- Filter CHOP — 回転チャンネルのノイズ除去・Boxcar 平滑化
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Angle 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: Quaternions / Two Vectors を選んでもチャンネル数が合わない
✅ Solution:
- Quaternions は入力・出力ともに 4 チャンネル(x, y, z, w)が必要、Two Vectors は 6 チャンネルが必要
- 前段で Merge CHOP や Rename CHOP を使ってチャンネル数を揃える
- Input Units を Degrees / Radians のままにしているとオイラー角扱いになるため、想定単位と一致しているか確認
❌ Problem: 他ソフトから受けたオイラー角の回転方向が想定と違う
✅ Solution:
- Input Order の選択(Rx Ry Rz / Rx Rz Ry / Ry Rx Rz / Ry Rz Rx / Rz Rx Ry / Rz Ry Rx)が送信側ツールの出力順序と一致しているか確認
- Output Order を TouchDesigner 側で扱いやすい順序(通常は Rx Ry Rz)に揃える
- 送信側が左手座標系の場合、Math CHOP で特定軸を反転(Negate)してから Angle CHOP に渡す
❌ Problem: Degrees ↔ Radians の変換結果が想定値と異なる
✅ Solution:
- Input Units と Output Units の組合せが意図通りか再確認(同じ Units 同士なら値は変わらない)
- 上流で Math CHOP の Multiply で π/180 や 180/π を掛けていないか確認(Angle CHOP と二重変換になる)
- 値が極端に小さい / 大きい場合、入力チャンネル数が Quaternions / Two Vectors の前提と食い違っていないか確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

