
概要 📖 – マウス位置・ボタン状態の出力制御
Mouse Out CHOPは、入力されたチャンネル値に基づいて TouchDesigner からデスクトップのマウス位置とボタン状態を強制的に駆動する CHOPです。tx・ty は 0〜1 の正規化座標で、デスクトップの左下から右上を表します。マルチモニター環境では tx == 1 が 2 台目モニターの右端に対応します。
主な用途 🎯
- TouchDesigner からデスクトップのマウスカーソル位置を制御
- 正規化座標(0〜1)によるマルチモニター対応のカーソル移動
- マウス左・右・中ボタンの押下状態をプログラムから出力
- 外部センサー入力をマウス操作に変換するインタラクティブ制御
- プレゼンテーション・キオスク端末での自動マウス操作
データフロー 🔄
入力: チャンネルデータ(正規化座標 tx, ty + ボタン状態)
↓
Position / Button チャンネル名マッピング
↓
OS マウスドライバ呼出
↓
出力: デスクトップ上のマウスカーソル位置・ボタン状態
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Control Page 📋
Position U .posu 🎯
マウスの U 座標(水平方向)を駆動する入力チャンネル名:
- Position U チャンネル名: 入力 CHOP から U 座標として参照するチャンネル名(デスクトップの左端 0 〜 右端 1 の正規化座標)
Position V .posv 🎯
マウスの V 座標(垂直方向)を駆動する入力チャンネル名:
- Position V チャンネル名: 入力 CHOP から V 座標として参照するチャンネル名(デスクトップの下端 0 〜 上端 1 の正規化座標)
Left Button .lbuttonname 🖱️
左ボタンの押下状態を駆動する入力チャンネル名:
- Left Button チャンネル名: 入力 CHOP から左ボタン状態として参照するチャンネル名(0 で離す、1 で押す)
Right Button .rbuttonname 🖱️
右ボタンの押下状態を駆動する入力チャンネル名:
- Right Button チャンネル名: 入力 CHOP から右ボタン状態として参照するチャンネル名(0 で離す、1 で押す)
Middle Button .mbuttonname 🖱️
中ボタンの押下状態を駆動する入力チャンネル名:
- Middle Button チャンネル名: 入力 CHOP から中ボタン状態として参照するチャンネル名(0 で離す、1 で押す)
Cook Every Frame .cookalways 🔄
毎フレーム強制的にクックさせる設定:
- Cook Every Frame: オンにすると CHOP を毎フレーム強制クックし、入力チャンネルの値変化を確実にマウス出力に反映
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 → Math CHOP (正規化) → Mouse Out CHOP
外部センサーで取得した手の位置を正規化座標(0〜1)に変換し、Mouse Out CHOP でデスクトップのマウスカーソルを駆動します。プレゼン用の非接触マウス制御を実現します。
- Kinect CHOP 等のセンサー入力で手の位置を取得
- Math CHOP の From Range / To Range で 0〜1 の正規化座標に変換
- Mouse Out CHOP の Position U / Position V に該当チャンネル名を設定
- Cook Every Frame をオンにして毎フレーム反映
Example 2: 周期的な自動クリックデモ 🖱️
LFO CHOP → Logic CHOP → Mouse Out CHOP (Left Button)
LFO CHOP の周期信号を Logic CHOP で 0/1 のトリガに変換し、Mouse Out CHOP の左ボタンチャンネルとして渡すと、一定周期で自動クリックを発火できます。展示やキオスク端末のデモ動作に有効です。
- LFO CHOP でサイン波を生成
- Logic CHOP で 0/1 のパルスに変換
- Mouse Out CHOP の Left Button にチャンネル名を設定し、定期的にクリック発火
関連オペレータ 🔗
類似機能OP 🔍
- Mouse In CHOP — 逆方向:マウス位置・ボタン状態を CHOP チャンネルとして取り込む
- Keyboard In CHOP — キーボード入力を CHOP チャンネルとして取得する入力側 OP
組み合わせ推奨OP 🔄
- Math CHOP — 前段で 0〜1 の正規化座標へ値域変換
- Logic CHOP — ボタン状態用の 0/1 トリガ生成
- LFO CHOP — 周期的なカーソル動作・自動クリック生成
- Constant CHOP — 固定座標へのカーソル移動・固定ボタン状態の保持
前処理・後処理CHOP 🎯
- 前処理: Math CHOP、Filter CHOP、Logic CHOP、Lag CHOP
- 後処理: Null CHOP、Trail CHOP
Info CHOP情報 📊
Mouse Out 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: マウスカーソルが動かない
✅ Solution:
- Position U / Position V に設定したチャンネル名が入力 CHOP に存在するか確認
- 入力値が 0〜1 の正規化座標範囲内か確認(範囲外だとデスクトップ外を指して見えなくなる)
Cook Every Frameをオンにして毎フレーム値を反映させる
❌ Problem: ボタンが押されたままになる・離れない
✅ Solution:
- Left/Right/Middle Button のチャンネル値が 0/1 の二値で送信されているか確認
- 前段に Logic CHOP を入れて閾値判定で確実に 0/1 に整形
- ネットワーク停止時にボタンが離れない場合は、終了時に明示的に 0 を送る
❌ Problem: マルチモニター環境で意図と違う位置にカーソルが行く
✅ Solution:
- tx == 1 が 2 台目モニター右端、tx == 0.5 が 1 台目モニター右端に対応する仕様を確認
- デスクトップの解像度・配置に応じて Math CHOP の To Range で目標座標を再調整
- 単一モニターのみを対象とする場合は OS のディスプレイ設定で他モニターを一時無効化
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

