
概要 📖 – 3Dシーンのピック位置サンプリング
Render Pick CHOPは、Render TOP の3Dシーンに対しスクリーン座標からピックを行い、ヒット点の位置・法線・カラー・UV等を返す CHOPです。Strategy(追従モード)と Pick Radius を組み合わせ、3D オブジェクトへのインタラクションを1オペレータで実現します。
主な用途 🎯
- Render TOP / Render Pass TOP のシーンに対するスクリーン座標からの3Dピック
- ピック位置の3D座標・法線・テクスチャUV・点カラーの取得
- ピックされたオブジェクトのパス・Instance ID の取得
- Pickable Flag を用いたインタラクティブオブジェクトの選別
- コールバック DAT 経由のピックイベント駆動制御
データフロー 🔄
入力: Render/Render Pass TOP のシーン + U/V または Panel のピック座標
↓
ピック判定(Pick Radius / Strategy / Pickable Flag)
↓
出力: 位置・法線・カラー・UV・深度・Instance ID 等のチャンネル
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Render Pick Page 📋
Strategy .strategy 🎛️
ピック結果の更新タイミングを決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| While Select | .select |
Select が有効な間だけピック値を更新 |
| Hold First Picked | .holdfirst |
最初にジオメトリがピックされたときの値を保持し続ける |
| Hold Last Picked | .holdlast |
最後にジオメトリがピックされた値を保持。空間をピックしても直前の値が残る |
| Always | .always |
常時ピック判定を行い、空間ヒット時は値をゼロクリア |
ピック挙動関連パラメータ 📈
Clear Previous Pick on New Pick .clearprev 🧹
– Strategy が Hold Last Picked のときのみ有効
– オン: 空間で新規ピックを開始すると直前の値をクリア
– オフ: 空間ピック開始時も直前の値を保持
Response Time .responsetime ⏲️
– 値の更新タイミングを決定するパラメータ
Pick Radius .pickradius 🎯
– ピック中心にヒットがなかった場合に拡張する探索半径
– 半径内にジオメトリが見つかればそれをピック対象として返す
Pick Radial Step .pickradstep 📏
– 探索領域内のサンプリング密度(中心から外へ向かう「スポーク」状)
– 大きくするとサンプリング数が減り処理が軽くなる
Pick Circular Step .pickcirstep ⭕
– 探索領域内のサンプリング密度(同心円「リング」状)
– 大きくするとサンプリング数が減り処理が軽くなる
Render/Render Pass TOP .rendertop 🖼️
– サンプリング対象となる Render TOP または Render Pass TOP のパス
– ここで指定された TOP のシーンに対してピック判定を実行
Use Pickable Flags .usepickableflags ✅
– オン: Pickable Flag がオンのオブジェクトのみピック対象
– Pickable Flag は全 Object コンポーネントに存在
Include Non-Pickable Objects .includenonpickable 🚫
– 非ピック対象オブジェクトを遮蔽判定に含めるかどうか
– オン: 非ピック対象の手前にあるオブジェクトでピック対象が隠れていれば選択されない
Picking by .pickingby 🖱️
ピック位置の入力ソースを決定するメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Parameters | .parameters |
下記の U / V / Select パラメータでピック位置と判定を制御 |
ピック入力パラメータ 📍
Panel .panel 🪟
– Picking by が Panel モード時に使用する Panel コンポーネントのパス
Panel Value .panelvalue 📊
– Panel モード時、ピックをトリガする Panel Value の指定
U .picku ↔️
– Parameters モードでのピック u 座標 (0–1 のスクリーン正規化座標)
V .pickv ↕️
– Parameters モードでのピック v 座標 (0–1 のスクリーン正規化座標)
Select .select ✅
– Parameters モードでピック判定をアクティブにするフラグ (= 1 で有効)
コールバック 🔔
Activate Callbacks .activatecallbacks ✅
– ピックイベントごとに Callback DAT を実行するかどうか
Callbacks DAT .callbacks 📜
– ピックイベント受信時に呼ばれるコールバックを記述した DAT のパス
Options Page ⚙️
Fetch Position .position 📐
ピック点の3D座標を取得するか、その座標系を選択するメニュー (チャンネル: tx, ty, tz)
| 項目 | 内部名 | 説明 |
|---|---|---|
| No | .no |
位置値を出力しない |
| In World Space | .worldspace |
ワールド座標系での3D位置を出力 |
| In Camera Space | .cameraspace |
カメラ座標系での3D位置を出力 |
Fetch Normal .normal 🧭
ピック点の法線ベクトルを取得するか、その座標系を選択するメニュー (チャンネル: nx, ny, nz)
| 項目 | 内部名 | 説明 |
|---|---|---|
| No | .no |
法線値を出力しない |
| In World Space | .worldspace |
ワールド座標系での法線を出力 |
| In Camera Space | .cameraspace |
カメラ座標系での法線を出力 |
その他の出力チャンネル 📦
Reference Object .referenceobj 🎯
– 位置や法線を「特定 Object 基準(Relative to Object)」で取得する際の参照 Object
Fetch Point Color .color 🎨
– ピック点の頂点カラーを取得 (チャンネル: cr, cg, cb, ca)
Fetch Texture UV .uv 🗺️
– ピック点のテクスチャ UV 座標を取得 (チャンネル: mapu, mapv, mapw)
Fetch Object Path .path 🛤️
– ピックされた Object のパスを取得
– 取得には Info DAT の Node Path に Render Pick CHOP を指定する必要あり
Fetch Depth .depth 🌊
– ピック点の深度値を取得 (チャンネル: depth)
– 値は Depth Buffer の Near/Far 平面間の非線形比率
Fetch Instance ID .instanceid 🔢
– インスタンス ID を取得 (チャンネル: instance)
– インスタンシングが無効なときは常に 0
Custom Attribs 🧩
Custom Attrib 1 / 2 / 3 / 4 .customattrib1..4 🏷️
– Object から取得したいカスタムアトリビュート名を指定(最大 4 個)
Custom Attrib 1 / 2 / 3 / 4 Type .customattrib1..4type 📋
– 各カスタムアトリビュートの型を選択するメニュー
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: マウスで3Dオブジェクトをクリック選択 🖱️
Panel CHOP (mouse u/v + click) → Render Pick CHOP (Picking by Parameters) → CHOP Execute DAT → Selection Logic
Panel CHOP から取得した正規化マウス座標を Render Pick CHOP の U/V に接続し、クリック時に Select を 1 にしてピックを発火させます。
- Render TOP のシーンを構築し Render Pick CHOP の Render/Render Pass TOP に指定
- Panel CHOP の
u/vをそれぞれ Render Pick CHOP の U / V にエクスポート - Panel CHOP の
lselectを Select にエクスポート - Fetch Object Path をオンにして Info DAT 経由でクリックされた Object のパスを取得
Example 2: ピック位置に3D カーソルを追従させる 🎯
Render Pick CHOP (Fetch Position World Space) → Null CHOP → Geometry COMP (translate)
Strategy を Always、Fetch Position を In World Space にすると、毎フレーム継続的にピック点の3D座標が取得できるため、その値を Geometry COMP の translate に接続するだけで3Dカーソルが面上に張り付きます。
- Strategy を Always、Fetch Position を In World Space に設定
- 出力チャンネル
tx/ty/tzを Cursor 用 Geometry COMP の translate にエクスポート - Pick Radius を少し広げて細いジオメトリも取りこぼさないよう調整
Example 3: ピック法線方向にライトを向ける 💡
Render Pick CHOP (Fetch Normal World Space) → Math CHOP → Light COMP (rotate)
Fetch Normal を In World Space にし、得られる nx/ny/nz から回転角を計算して Light COMP の rotate に渡すと、ピックした面の法線方向に常に光を向けるライティング演出が可能です。
- Fetch Normal を In World Space に設定
nx/ny/nzを Math CHOP で角度に変換- 結果を Light COMP の rotate にエクスポート
Example 4: インスタンスごとのクリック判定 🔢
Render Pick CHOP (Fetch Instance ID + Activate Callbacks) → Callback DAT → Per-Instance Logic
Geometry COMP のインスタンシングを使ったシーンで、Fetch Instance ID をオンにすると instance チャンネルからピック対象のインスタンス番号が取れます。Callback DAT と組み合わせれば、インスタンスごとの個別アクションを記述できます。
- Fetch Instance ID をオンにする
- Activate Callbacks をオンにし Callbacks DAT で onPick イベントを実装
instance値を分岐に使い、インスタンスごとの処理を実行
関連オペレータ 🔗
類似機能OP 🔍
- Mouse In CHOP — スクリーン座標やクリック状態を CHOP として取得
- Panel CHOP — Panel コンポーネントの u/v/select 等を CHOP として参照
組み合わせ推奨OP 🔄
- Math CHOP — ピック値の正規化・スケーリング・角度変換
- Filter CHOP — ピック値の振動を平滑化
- Logic CHOP — Select のオン/オフをトリガとした条件分岐
- Trail CHOP — ピック軌跡の時間履歴を可視化
- Render TOP — ピック対象となる3Dシーンを描画する出力元
前処理・後処理CHOP 🎯
Info CHOP情報 📊
Render Pick 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:
Picking byが Parameters のときSelectパラメータが 1 になっているか確認- Strategy が
Hold First Pickedの場合は最初のヒット以降更新されない仕様のため、用途に応じAlwaysかWhile Selectに切替 Render/Render Pass TOPに正しいレンダリング元を指定しているか確認
❌ Problem: ピックしたいオブジェクトが選択されない
✅ Solution:
- 対象 Object コンポーネントの
Pickable Flagがオンになっているか確認 Use Pickable Flagsをオンにしている場合、Pickable 以外のジオメトリは全て無視される- 他オブジェクトに遮蔽されている可能性がある場合は
Include Non-Pickable Objectsを見直す - 細いジオメトリは
Pick Radiusを広げると拾える
❌ Problem: ピックされたオブジェクトのパスが空のまま
✅ Solution:
Fetch Object Pathをオンにしただけでは CHOP には現れず、別途 Info DAT の Node Path に Render Pick CHOP を指定する必要がある- Info DAT 側でパス文字列が拾えているか確認
❌ Problem: 値がガタついて使いにくい
✅ Solution:
- 後段に Filter CHOP を入れて平滑化
Response Timeを調整して更新タイミングを緩めるPick Radial Step/Pick Circular Stepを増やしサンプリング点を間引いて負荷とノイズを下げる
参考資料 📚
その他 🔗
- TouchDesigner Wiki — CHOP 概要
- TouchDesigner Wiki — Category:CHOPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

