
概要 📖 – Oculus HMD / コントローラ入力の取得
Oculus Rift CHOPは、Oculus Rift HMD およびコントローラのトラッキングデータ(姿勢・加速度・ボタン状態・投影行列)を CHOP チャンネルとして取得する CHOPです。HMD / 左右コントローラ / 左右目投影行列の 5 モードを 1 オペレータで切り替え、VR シーン構築に必要なトラッキング情報をまとめて取得します。
主な用途 🎯
- Oculus HMD の姿勢(オリエンテーション・加速度・角速度)の取得
- 左右 Oculus コントローラの入力(ボタン・トラッキング)の取得
- 左右目の投影行列(Projection Matrix)の取得による VR レンダリング連携
- HMD のトラッキング空間のリセンタリング(Re-Center)
- VR シーンのカメラ姿勢・コントローラ状態を CHOP チャンネルとして他オペレータへ供給
データフロー 🔄
入力: Oculus Runtime(HMD / コントローラのセンサー)
↓
Active 有効化
↓
Output モード選択(HMD / Controller / Projection Matrix)
↓
チャンネル選択(Orientation / Acceleration / Velocity / Device Info / Controller Buttons)
↓
出力: CHOP チャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Setup Page 🎛️
Active .active 🔌
Oculus Rift CHOP の有効化スイッチ:
- Active: オンの時、CHOP がクックされるたびにデータを更新する。オフの場合は最後の値を保持してデータ更新を停止
Output .output 📤
出力モードの切り替え。HMD・左右コントローラ・左右目の投影行列の 5 モードから選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| HMD | .hmd |
HMD のオリエンテーション・加速度・角速度・デバイス情報を出力 |
| Left Controller | .leftcontroller |
左 Oculus コントローラの入力(ボタン・トラッキング)を出力 |
| Right Controller | .rightcontroller |
右 Oculus コントローラの入力(ボタン・トラッキング)を出力 |
| Left Projection Matrix | .leftmatrix |
左目用の投影行列(Projection Matrix)の各成分を出力 |
| Right Projection Matrix | .rightmatrix |
右目用の投影行列(Projection Matrix)の各成分を出力 |
出力チャンネル選択 📡
Orientation .orientation 🧭
– オンの時、出力チャンネルにセンサーのオリエンテーション(姿勢)情報を含める
– HMD やコントローラの向きを取得する際に有効化
Re-Center .recenter 🎯
– HMD の現在のトラッキング位置を基準として、HMD およびコントローラのトラッキング空間の xyz 位置成分と y 方向のオリエンテーション成分をリセット
– プレイヤーの初期位置を毎セッション同じ向きに揃えたいときに使用
Acceleration .acceleration 💨
– オンの時、出力チャンネルに加速度(acceleration)情報を含める
– 慣性ベースの演出やジェスチャー検出に活用
Velocity .velocity 🏃
– オンの時、出力チャンネルに速度(velocity)情報を含める
– 移動方向・速さに応じた演出を組む際に使用
Device Info .deviceinfo ℹ️
– オンの時、出力チャンネルにデバイス情報(接続状態・トラッキング状態など)を含める
– 接続切れやセンサーロスト時のフェイルセーフ判定に活用
Controller Buttons .controllerbuttons 🎮
– オンの時、出力チャンネルにコントローラのボタン状態を含める
– Output が leftcontroller または rightcontroller の時に有効
Near .near 📐
投影行列のニアクリッピング面までの距離:
- Near 距離: Output が
leftmatrix/rightmatrixの時、投影行列のニアクリッピング面までの距離を指定(単位はシーンスケール)
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: HMD の姿勢で 3D カメラを駆動 🥽
Oculus Rift CHOP (Output=HMD, Orientation=on) → Math CHOP (Range 変換) → Camera COMP の rotate パラメータ
- Oculus Rift CHOP を作成し Active をオン
- Output を
HMDに設定、Orientation をオン - 出力チャンネル(rx / ry / rz)を Math CHOP で必要なら度数 / ラジアンに変換
- Camera COMP の rotate パラメータに Export し、HMD の向きでシーン視点が変化
Example 2: 左右コントローラのボタンでイベント発火 🎮
Oculus Rift CHOP (Output=Left Controller, Controller Buttons=on) → Logic CHOP → Trigger CHOP
- Oculus Rift CHOP を 2 つ作成し、片方の Output を
Left Controller、もう片方をRight Controllerに設定 - Controller Buttons をオンにしてボタン状態を出力
- Logic CHOP で「ボタンが押された瞬間」を判定(立ち上がりエッジ)
- Trigger CHOP でエフェクト発火・シーン遷移などのイベントを起動
Example 3: 左右目の投影行列を VR レンダリングへ供給 👀
Oculus Rift CHOP (Output=Left/Right Projection Matrix) → CHOP to DAT → Camera COMP の custom projection
- Oculus Rift CHOP を 2 つ作成し、Output を
Left Projection MatrixとRight Projection Matrixに設定 - Near パラメータでニアクリッピング距離をシーンスケールに合わせて指定
- 出力された行列成分を CHOP to DAT で 4×4 行列として整形
- Camera COMP のカスタム投影行列に渡し、HMD の視野角と整合した両眼レンダリングを実現
Example 4: 起動時にトラッキング空間を Re-Center で初期化 🔄
Project Start → Pulse on Re-Center → Oculus Rift CHOP がトラッキング空間を再原点化
- Oculus Rift CHOP の Re-Center パラメータをパルス可能なボタンとして用意
- プロジェクト起動時または明示的なリセット操作で Re-Center をパルス
- HMD の現在位置を新たな原点 (xyz=0) とし、y 軸の向きも基準化
- セッション毎に同じ初期姿勢から VR 体験を開始できる
関連オペレータ 🔗
類似機能OP 🔍
- OpenVR CHOP — OpenVR ランタイム経由で HTC Vive / Valve Index 等のヘッドセットを扱う汎用 VR 入力 CHOP
- Leap Motion CHOP — Leap Motion デバイスから手指トラッキングを取得する CHOP(VR ハンドトラッキング併用に最適)
- Kinect CHOP — Kinect から身体スケルトンを取得する CHOP(HMD 不要の全身トラッキング用)
組み合わせ推奨OP 🔄
- Math CHOP — Oculus Rift の出力値を Range 変換・スケーリングしてシーン用途に整形
- Filter CHOP — HMD のジッタを抑える時間方向スムージング
- Logic CHOP — コントローラボタンの立ち上がりエッジを検出してイベント化
- Trigger CHOP — ボタン押下や閾値超えでエフェクト発火
- Camera COMP — HMD の姿勢チャンネルを Export してシーンカメラを駆動
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Oculus Rift 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: HMD やコントローラのチャンネルが出力されない
✅ Solution:
- Active がオンになっているかを確認(オフのままだとクックしてもデータ更新されない)
- Oculus Runtime が起動しており、ヘッドセットが PC に正しく接続されているか確認
- Output のモードが取得対象と一致しているか確認(HMD 用と Controller 用で出力チャンネルが異なる)
❌ Problem: プレイヤーの初期向きがずれている / トラッキング空間が傾いている
✅ Solution:
- Re-Center パラメータをパルスして HMD の現在位置を原点として再キャリブレーション
- VR 体験開始の合図(スタートボタン等)に Re-Center のパルスを紐付ける運用にする
- 床基準のセットアップが必要な場合は Oculus 側のガーディアン設定も併せて確認
❌ Problem: コントローラのボタン入力が取れない
✅ Solution:
- Output が
leftcontrollerまたはrightcontrollerに設定されているか確認 - Controller Buttons がオンになっているか確認(オフだとボタン状態チャンネルが出力されない)
- コントローラの電源・電池残量・ペアリング状態を Oculus 側で確認
❌ Problem: HMD の姿勢値が高周波でジッタる
✅ Solution:
- 後段に Filter CHOP を入れて時間方向にスムージング
- VR の視点フィードバックで強く Filter すると遅延感が出るためカットオフは控えめに
- Lag CHOP でラグ付き追従にして自然な動きに整える
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

