Kinect CHOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Kinect CHOP の骨格トラッキング機能を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – Kinect センサーによる骨格・トラッキングデータ取得

Kinect CHOPは、Kinect センサーから骨格・顔・インタラクションデータを取得しチャンネルとして出力する CHOPです。v1 / v2 ハードウェアの切替、スケルトン・顔・インタラクションのモード選択、ジョイントスムージングまでを 1 オペレータで完結します。

主な用途 🎯

  • Kinect センサーから骨格(スケルトン)のジョイント位置をチャンネルとして取得
  • v1 / v2 ハードウェアの切替によるセンサー対応(センサーごとの仕様差を吸収)
  • ボーンの相対回転・絶対回転・長さの取得(リギング・キャラクター制御の入力)
  • 顔トラッキング・インタラクション(grip / press)データの取得
  • ジョイント位置のスムージング(Jitter Radius / Max Deviation Radius によるノイズ除去)

データフロー 🔄

入力: Kinect センサー(v1 / v2)

Skeleton / Interactions 等のトラッキングモード選択

Smoothing 設定でジッター除去

出力: ジョイント位置・回転・状態のチャンネル群

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Kinect Page 📋

センサー基本設定 🎛️

Active .active
– オンにすると Kinect センサーからのデータ取得を開始
– オフでセンサー入力を停止(リソース節約用途)

Hardware Version .hwversion 🎛️

Kinect v1 と v2 のいずれを使用するかを選択するメニューパラメータ

項目 内部名 説明
Version 1 .version1 Kinect v1 ハードウェアを使用
Version 2 .version2 Kinect v2 ハードウェアを使用

Skeleton .skeleton 📁

骨格トラッキングのモード選択

項目 内部名 説明
Full .full 全身の骨格をトラッキング
Seated .seated 座位(上半身のみ)の骨格をトラッキング
Off .off 骨格トラッキングを行わない

プレイヤー・センサー設定 🎯

Sensor .sensor 🎛️
– 使用する Kinect センサーを選択
– Kinect v1 のみで利用可(v2 では選択不要)

Max Players .maxplayers 👥
– トラッキング対象とするプレイヤーの最大数
– 同時検出する人数の上限値を設定

Interactions .interactions
– インタラクション(grip / press)データの取得を有効化
p[1-2]/hand_l_* / p[1-2]/hand_r_* 形式のチャンネルが追加出力される
– 注: 深度解像度が 640×480 に固定され、Near Depth Mode が自動で設定される

ボーン関連出力 📈

Relative Bone Rotations .relbonerotations 🔄
– 各ボーンの相対回転(rx / ry / rz)チャンネルを出力
– 1 つ前のジョイントを基準とした回転値

Absolute Bone Rotations .absbonerotations 🔄
– 各ボーンの絶対回転(rx / ry / rz)チャンネルを出力
– 世界座標系を基準とした回転値

Bone Lengths .bonelengths 📏
– 各ボーンの長さをチャンネルとして出力
– キャラクターのリギング情報として活用

Unroll Bone Values .unrollbones 🔁
– 回転値を不連続点(wrap-around)が無い形で出力
– 0〜360 で巻き戻る代わりに 0 から無限に増加する形に展開
– 後段の Filter / Lag 等でブレンド・スムージングする際に必須

位置出力(座標系) 📐

World Space Positions .worldspace 🌍
– トラッキングポイントの世界座標系での位置を出力
– 各ポイントに tx / ty / tz の 3 チャンネルが追加

Color Space Positions .colorspace 🎨
– カラーカメラを基準とした画像空間座標で位置を出力
– 各ポイントに u / v / tz の 3 チャンネルが追加
– Kinect v2 のみで利用可

Depth Space Positions .depthspace 📏
– 深度カメラを基準とした画像空間座標で位置を出力
– 各ポイントに depthu / depthv / tz の 3 チャンネルが追加
– Kinect v1 / v2 ともに利用可

顔・状態・モード設定 ✨

Face Tracking .facetracking 😀
– 検出された顔のトラッキングチャンネルを出力
– 顔の位置・回転情報を取得

Status Channels .statuschans 🚦
– 追加のステータスチャンネルを出力
– ジョイントごとに tracked サフィックス付きチャンネルでトラッキング状態を報告
– センサー範囲外に出ていないかを示す clipped チャンネルも出力

Near Depth Mode .neardepthmode 🔍
– スケルトントラッキングの近距離モードを有効化
– 深度カメラがデフォルト 80cm から 40cm まで近づいた被写体を認識可能になる

Flip Skeleton U Direction .flipskelu 🔄
– スケルトンチャンネルの u 軸を反転
– カメラのミラー映像を使う場合に有効

Flip Face U Direction .flipfaceu 🔄
– 顔チャンネルの u 軸を反転
– カメラのミラー映像を使う場合に有効


Smoothing Page 🎚️

ジョイントスムージング設定 🎚️

Joint Smoothing .jointsmoothing
– Kinect 内蔵のジョイントトラッキングスムージングを有効化
– 下記のスムージングパラメータが有効になる

Smoothing .smoothing 🎚️
– スムージングの強さ(0.0 〜 1.0)
– 値を上げるほど滑らかになるが、応答性が下がりレイテンシが増加
– 0 を渡すと生データがそのまま返る

Correction .correction 🎯
– 生データへの補正速度(0.0 〜 1.0)
– 低い値では補正が遅く滑らか、高い値では生データに素早く追従

Prediction .prediction 🔮
– 未来方向の予測フレーム数(0 以上)
– 0.5 を超えると速い動きでオーバーシュートが発生しやすい
– Max Deviation Radius を小さく設定するとオーバーシュートを抑えられる

Jitter Radius .jitterrad 📐
– ジッター除去の半径(メートル単位)
– この半径を超えるジッターは半径内にクランプされる

Max Deviation Radius .maxdevrad 📐
– フィルタ後の値が生データから逸脱できる最大半径(メートル単位)
– この半径を超える逸脱は生データの方向にクランプされる

Rotation Smoothing .rotationsmoothing 🔄
– 回転値に対するスムージングアルゴリズムを有効化
– ジョイントスムージング同様、強度を上げるとレイテンシが増加


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: 全身の骨格でキャラクターを駆動 🕺

Kinect CHOP (Skeleton: Full) → Filter CHOP → Constraint / Bone (CHOP Export) → 3D キャラクター
  1. Kinect CHOP の Hardware Version を v2、Skeleton を Full に設定
  2. Relative Bone Rotations と World Space Positions を有効化
  3. 後段に Filter CHOP を配置してジッターをスムージング
  4. 出力チャンネルを 3D キャラクターのボーン回転・位置パラメータへ Export

Example 2: 手の位置でビジュアルエフェクトを操作 ✋

Kinect CHOP (Interactions) → Math CHOP (Range) → CHOP to TOP / Particle System
  1. Interactions を有効化し p[1-2]/hand_l_* / hand_r_* チャンネルを取得
  2. Math CHOP の From Range / To Range で正規化座標を画面座標へマッピング
  3. CHOP to TOP で値をシェーダ uniform に渡し、パーティクルやエフェクトの中心に反映

Example 3: 顔位置で UI / カメラを追従 😀

Kinect CHOP (Face Tracking) → Lag CHOP → Camera COMP / UI Position
  1. Face Tracking を有効化し顔のトラッキングチャンネルを取得
  2. Lag CHOP で時間方向の遅延スムージングを掛けてカメラ酔いを防止
  3. 出力をカメラ COMP の translate / rotate や UI 要素の位置パラメータに Export

Example 4: プレイヤー範囲外検出によるアラート 🚦

Kinect CHOP (Status Channels) → Logic CHOP → Trigger CHOP → Alert
  1. Status Channels を有効化し clipped / tracked チャンネルを取得
  2. Logic CHOP で「clipped > 0」の条件を判定
  3. Trigger CHOP でアラート音や視覚通知を発火
  4. プレイヤーがセンサー範囲外に出た瞬間を検知

関連オペレータ 🔗

類似機能OP 🔍

  • Kinect Azure CHOP — Azure Kinect 用の後継 CHOP、最新ハードウェアに対応
  • Leap Motion CHOP — 手指の高精度トラッキングに特化(骨格ではなく手指中心)
  • OpenVR CHOP — VR ヘッドセット・コントローラのトラッキング情報取得

組み合わせ推奨OP 🔄

  • Filter CHOP — ジョイント値のジッター除去・スムージング
  • Lag CHOP — 回転値の遅延スムージング(unrolled 値と組み合わせ)
  • Math CHOP — 座標値の正規化・スケーリング
  • Logic CHOP — tracked / clipped 状態に基づく条件分岐
  • Trigger CHOP — ジェスチャー検出時のイベント発火
  • Trail CHOP — ジョイント軌跡の時間履歴を可視化

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Kinect CHOPは Info CHOP による詳細情報取得に対応しています。

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_sernum: Export接続の更新回数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間(ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: ジョイント値がジッター(小刻みなノイズ)で安定しない
✅ Solution:

  • Joint Smoothing をオンにして Smoothing / Correction を調整
  • Jitter Radius を小さく設定して半径内のジッターをクランプ
  • 後段に Filter CHOP を入れて時間方向のスムージング

❌ Problem: 回転値(rx / ry / rz)がブレンド時に飛ぶ
✅ Solution:

  • Unroll Bone Values をオンにして wrap-around を解消
  • Unroll した値を後段の Filter CHOP や Lag CHOP に渡してスムージング
  • Rotation Smoothing をオンにして Kinect 側の補正を有効化

❌ Problem: 近距離の被写体がトラッキングされない
✅ Solution:

  • Near Depth Mode をオンにして 40cm までの近距離認識を有効化
  • Skeleton モードを Seated に切り替えて上半身のみのトラッキングを試す
  • センサーから 80cm 以上離れた位置に被写体を配置(デフォルト挙動)

❌ Problem: Color Space Positions チャンネルが出力されない
✅ Solution:

  • Hardware Version が Kinect v2 に設定されているか確認(v1 では非対応)
  • 代わりに Depth Space Positions を使用(v1 / v2 両対応)
  • World Space Positions に切り替えて 3D 座標で取得

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました