
概要 📖 – ペンタブレットのペン入力取得
Tablet CHOPは、ペンタブレットから座標・筆圧・傾き・ボタン入力をチャンネルとして取り込む CHOPです。1 本目と 2 本目のペンそれぞれに専用ページがあり、ドローイングや筆圧連動の制御信号として活用できます。
主な用途 🎯
- ペンタブレットの座標・筆圧・傾きをリアルタイムで取得
- ドローイング・ペイントアプリケーションの入力ソース
- 筆圧連動のブラシサイズ・透明度制御
- ペンの傾きを使った 3D 視点操作・ジェスチャー入力
- ペンのボタン入力をトリガーとしたイベント発火
データフロー 🔄
入力: ペンタブレット ハードウェア(Wintab API 経由)
↓
ペン位置・筆圧・傾き・回転・ボタン状態の取得
↓
出力: チャンネル化されたペン入力データ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
1st Pen Page 🖊️
1 本目ペンのチャンネル名設定 ✏️
1 本目のペンから取得する各情報のチャンネル名を設定するパラメータ群
X Coordinate .xcoord 📍
– ペンの X 方向の座標を出力するチャンネル名
– デフォルトのチャンネル名は tx
Y Coordinate .ycoord 📍
– ペンの Y 方向の座標を出力するチャンネル名
– デフォルトのチャンネル名は ty
Pressure .pressure 💪
– ペンが報告する筆圧値を出力するチャンネル名
– ブラシサイズや透明度に直接マッピングする用途で多用
X Tilt .xtilt ↔️
– ペンの X 方向の傾きを出力するチャンネル名
– 傾き対応タブレットでのみ有効
Y Tilt .ytilt ↕️
– ペンの Y 方向の傾きを出力するチャンネル名
– 傾き対応タブレットでのみ有効
Finger Wheel .tanpressure 🎡
– フィンガーローラーホイールがある場合に出力するチャンネル名
– 対応ハードウェアのみ
Thumb Wheel .zcoord 🎡
– サムローラーホイールがある場合に出力するチャンネル名
– 対応ハードウェアのみ
Rotation .rotation 🔄
– ペンが報告する回転値を出力するチャンネル名
– アートペン等の回転センサ付きペンでのみ有効
Button 1 .button1 🔘
– ペンのボタン 1 の状態を出力するチャンネル名
– 押下時 1 / 非押下時 0
Button 2 .button2 🔘
– ペンのボタン 2 の状態を出力するチャンネル名
– 押下時 1 / 非押下時 0
Button 3 .button3 🔘
– ペンのボタン 3 の状態を出力するチャンネル名
– 押下時 1 / 非押下時 0
Button 4 .button4 🔘
– ペンのボタン 4 の状態を出力するチャンネル名
– 押下時 1 / 非押下時 0
Button 5 .button5 🔘
– ペンのボタン 5 の状態を出力するチャンネル名
– 押下時 1 / 非押下時 0
2nd Pen Page 🖌️
2 本目ペンのチャンネル名設定 ✒️
2 本目ペンのチャンネル名設定(1 本目と同構成):
- 1 本目ペンと同じ構成: X/Y Coordinate、Pressure、X/Y Tilt、Finger/Thumb Wheel、Rotation、Button 1〜5 の 13 項目を 2 本目ペン用に設定
Channel Page 📡
Active .active 🟢
Tablet CHOP のクック動作とペンイベント取得タイミングを決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Off | .off |
クックを停止し、ペンの値も更新しない |
| On | .on |
毎フレーム クックし、ペン入力を常時取得 |
| While Playing | .play |
タイムラインが順方向に再生中のときのみペンイベントを取得 |
Sample Rate .rate 🎚️
出力チャンネルのサンプルレート:
- Sample Rate: 1 秒あたりのサンプル数。タイムラインの cook 頻度に合わせて設定するのが一般的
Extend Left .left ⬅️
チャンネルの開始よりも前を参照したときの値を決める拡張条件メニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
チャンネルの現在値を保持 |
| Slope | .slope |
チャンネル開始前の勾配を延長 |
| Cycle | .cycle |
チャンネルを繰り返しサイクル |
| Mirror | .mirror |
サイクルごとに反転しながら繰り返す |
| Default Value | .default |
Default Value パラメータで指定した定数を返す |
Extend Right .right ➡️
チャンネルの終了よりも後を参照したときの値を決める拡張条件メニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Hold | .hold |
チャンネルの現在値を保持 |
| Slope | .slope |
チャンネル終了後の勾配を延長 |
| Cycle | .cycle |
チャンネルを繰り返しサイクル |
| Mirror | .mirror |
サイクルごとに反転しながら繰り返す |
| Default Value | .default |
Default Value パラメータで指定した定数を返す |
Default Value .defval 🔢
Default Value 拡張条件で使用される定数:
- Default Value: Extend Left / Extend Right を
Default Valueにしたとき、範囲外参照で返される定数
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: 筆圧連動のブラシサイズ制御 🖌️
Tablet CHOP (Pressure) → Math CHOP (Range mapping) → Brush Size パラメータ
- Tablet CHOP でペンタブから筆圧チャンネルを取得
- Math CHOP で From Range [0, 1] To Range [1, 50] にマッピング
- 出力をブラシオブジェクトのサイズパラメータに Export
- ペンを強く押すほどブラシが太く描画される
Example 2: ペン座標で描画位置を制御 📍
Tablet CHOP (X/Y Coordinate) → CHOP to TOP → 描画用 TOP
- Tablet CHOP で X / Y 座標を取得
- CHOP to TOP で座標を TOP の UV 位置に変換
- 描画用 TOP の描画位置パラメータに渡す
- ペンの動きに追従してリアルタイムで線を描画
Example 3: ペンの傾きで 3D ビュー操作 🎮
Tablet CHOP (X Tilt / Y Tilt) → Math CHOP → Camera COMP Rotation
- Tablet CHOP の X Tilt / Y Tilt チャンネルを取得
- Math CHOP で傾き値を回転角度にスケーリング
- Camera COMP の Rotation パラメータに Export
- ペンを傾けることでカメラ視点が連動して回転
Example 4: ボタン入力でツール切替 🔘
Tablet CHOP (Button 1-5) → Logic CHOP → Switch TOP
- Tablet CHOP の Button 1〜5 チャンネルを取得
- Logic CHOP で押下中のボタンを判定
- Switch TOP でツール(ブラシ・消しゴム・スポイト等)を切替
- ペンのサイドボタンでツールをワンタッチ切替
関連オペレータ 🔗
類似機能OP 🔍
- Mouse In CHOP — マウス座標・ボタン入力を取得(筆圧・傾きは無し)
- Keyboard In CHOP — キーボード入力をチャンネル化
- Joystick CHOP — ゲームコントローラの軸・ボタン入力を取得
組み合わせ推奨OP 🔄
- Math CHOP — 筆圧・座標を任意の値域にマッピング
- Filter CHOP — ペン入力のジッターをスムージング
- Logic CHOP — ボタン押下状態を論理判定
- Trigger CHOP — ボタン押下イベントでエンベロープ起動
- Trail CHOP — ペン座標の時間履歴を可視化
前処理・後処理CHOP 🎯
- 前処理: Mouse In CHOP、Keyboard In CHOP、Joystick CHOP
- 後処理: Filter CHOP、Math CHOP、Logic CHOP、Trigger CHOP、Lag CHOP
Info CHOP情報 📊
Tablet 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:
- Wintab 互換ドライバがインストールされているか確認(Wacom 等は公式サイトから DL)
- OS のタブレット設定でペンタブが有効化されているか確認
- TouchDesigner を再起動してデバイス検出をやり直す
❌ Problem: 筆圧や傾きが取得できない
✅ Solution:
- 対応しているタブレットハードウェアか確認(廉価機種では筆圧・傾き非対応)
- ドライバのバージョンが古いと一部チャンネルが 0 のまま固まる場合がある、最新版に更新
- 前段でFilter CHOPを使って値の変動を可視化し、ハードウェア側の出力可否を切り分け
❌ Problem: ペン座標がジッターする
✅ Solution:
- 後段に Filter CHOP を入れてジッターを smooth
- Sample Rate を上げてサンプル数を増やし時間方向の解像度を確保
- Math CHOP で値域を正規化したうえで Filter にかけるとアルゴリズムが安定
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

