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

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

Render Pick DAT の3Dシーンピック機能を示す図

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

概要 📖 – 3Dシーンのピック結果をテーブル取得

Render Pick DATは、Render TOP の3Dシーンに対し入力テーブルの座標から複数ピックを行い、ヒット結果をテーブル形式で出力する DATです。入力 DAT に座標と Custom Pick Camera(s) (カスタムカメラ) の列を並べることで、複数カメラからの同時ピックを 1 つのテーブルにまとめて取得できます。

主な用途 🎯

  • マウス・タッチ座標から3Dシーンのオブジェクトをピックし、結果をテーブル形式で受け取る
  • 複数同時ピックを入力 DAT 行ごとに一括処理 (multi-touch / multi-cursor 対応)
  • ピック点の位置・法線・カラー・UV・深度・Instance IDを一括取得
  • 複数カメラからのピックを1オペレータで切替・並列実行
  • コールバック DATでピックイベントごとに Python ロジックを発火

データフロー 🔄

入力: ピック座標を含む DAT (u/v + camera 列等) + Render TOP のシーン

ピック判定 (Pick Radius / Strategy / Pickable Flag)

出力: 位置・法線・カラー・UV・深度・Instance ID 等を含むテーブル DAT

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 🧹
StrategyHold Last Picked のときのみ有効
– オン: 空間で新規ピックを開始すると直前の値をクリア
– オフ: 空間ピック開始時も直前の値を保持

Response Time .responsetime ⏲️
– 値の更新タイミングを決定するパラメータ

Pick Radius .pickradius 🎯
– ピック中心にヒットがなかった場合に拡張する探索半径
– 半径内にジオメトリが見つかればそれをピック対象として返す

Pick Radial Step .pickradstep 📏
– 探索領域内のサンプリング密度 (中心から外へ向かう「スポーク」状)
– 大きくするとサンプリング数が減り処理が軽くなる

Pick Circular Step .pickcirstep
– 探索領域内のサンプリング密度 (同心円「リング」状)
– 大きくするとサンプリング数が減り処理が軽くなる

Render/RenderPass TOP .rendertop 🖼️
– ピック対象となる Render TOP または Render Pass TOP のパス
– デフォルトでは Render TOP に登録されている最初のカメラからピックされる
– 別カメラを指定する場合は Custom Pick Camera(s) を併用

Custom Pick Camera(s) .custompickcameras 🎥
– 任意の Camera COMP (カメラ) からピックするための指定欄
– 空欄時は Render TOP のカメラを使用
– 複数カメラから同時ピックする場合は、入力 DAT 側に camera 列を用意し各行で別カメラを指定する

Allow Multi-Camera Rendering .allowmulticamera 🎬
– 複数パスのレンダリングを同時実行する高速化機能 (マルチカメラ・レンダリング)
– 旧バージョン (088) の GLSL MAT との互換性問題が出るときのみオフ。通常はオン推奨

Use Pickable Flags .usepickableflags
– オン: Pickable Flag (ピック可否フラグ) がオンのオブジェクトのみピック対象
– Pickable Flag は全 Object コンポーネントに存在

Include Non-Pickable Objects .includenonpickable 🚫
– 非ピック対象オブジェクトを遮蔽 (オクルージョン) 判定に含めるかどうか
– オン: 非ピック対象の手前にあるオブジェクトでピック対象が隠れていれば選択されない

Merge Input DAT .mergeinputdat 🔗
– 入力 DAT の各行の内容を、出力テーブルの該当行に追記してマージ
– ピック結果と入力側の任意メタ (cursor_id 等) を 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 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 🔧

Language .language 📝

DAT が動作するスクリプト言語の決定方法

項目 内部名 説明
Input .input 入力 DAT のスクリプト言語を使用
Node .node この DAT 自身のスクリプト言語を使用

Edit/View Extension .extension 📄

外部エディタに公開するファイル拡張子の選択

項目 内部名 説明
dat .dat 汎用的なファイル拡張子 dat を使用
From Language .language DAT のスクリプト言語に応じた拡張子を自動選択
Custom Extension .custom Custom Extension で指定したカスタム拡張子を使用

Custom Extension .customext 🔤

Edit/View ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

Word Wrap .wordwrap 🔁

ノード表示でのワードラップ (折り返し) の有効化

項目 内部名 説明
Input .input 入力 DAT の Word Wrap 設定を継承
On .on Word Wrap を有効化 (ノード上の長い行を折り返し表示)
Off .off Word Wrap を無効化 (折り返さずそのまま表示)

実践アイデア 💡

Example 1: 全指タッチを一括ピック 👆

Multi Touch In DAT → Render Pick DAT (Merge Input DAT On) → DAT Execute DAT → 各タッチごとの処理

Multi Touch In DAT が出力するタッチ行 (各指の u/v 座標) をそのまま Render Pick DAT に入力すると、全指のピック結果を 1 テーブルでまとめて取得できます。

  1. Multi Touch In DAT を配置し、各タッチを行として出力する設定にする
  2. Render Pick DAT の入力に Multi Touch In DAT を接続
  3. Render/RenderPass TOP にピック対象シーンを指定
  4. Merge Input DAT をオンにして入力側の cursor_id 等のメタ列を出力テーブルに含める
  5. DAT Execute DATonTableChange を捕捉し、各行をループしてヒット情報を処理

Example 2: 複数カメラで同時ピック 🎥

Table DAT (u/v + camera 列) → Render Pick DAT (Custom Pick Camera(s)) → ピック結果テーブル

入力 DAT に u / v 列と camera 列を並べることで、行ごとに異なる Camera COMP からピックを並列実行できます。VR の左右眼や、サブカメラからの参照ピックに有効です。

  1. Camera COMP を 2 個以上配置 (例: cam_main / cam_sub)
  2. Table DAT で u/v/camera の 3 列を持つテーブルを用意し、行ごとに参照カメラを指定
  3. Render Pick DAT の Custom Pick Camera(s) に対象カメラ群を指定
  4. Allow Multi-Camera Rendering をオンにして並列実行を有効化
  5. 出力テーブルから各行の tx / ty / tz を読み、視点ごとの3D座標を比較

Example 3: ピック対象をID判別 🔢

Mouse In CHOP → CHOP to DAT → Render Pick DAT (Fetch Instance ID + Activate Callbacks) → Callback DAT

Geometry COMP のインスタンシングを使ったシーンで、Fetch Instance ID をオンにすると出力テーブルの instance 列にピック対象のインスタンス番号が入ります。コールバック DAT と組み合わせれば、インスタンスごとの個別アクションを実装できます。

  1. Mouse In CHOP でマウス u/v を取得し、CHOP to DAT で行に変換
  2. Render Pick DAT の入力に CHOP to DAT を接続
  3. Fetch Instance ID をオンにする
  4. Activate Callbacks をオンにし、Callbacks DATonPick イベントを実装
  5. コールバック内で instance 列の値を分岐に使い、インスタンスごとの処理を実行

Example 4: ピック点に3D追従 🎯

Table DAT (u/v) → Render Pick DAT (Strategy: Always + Fetch Position: World) → Script CHOP → Geometry COMP (translate)

StrategyAlwaysFetch PositionIn World Space にすると、毎フレーム継続的にピック点の3D座標が取得できます。テーブルから値を CHOP に流し、Geometry COMP の translate に接続すれば、3Dカーソルが面上に張り付きます。

  1. Table DAT に追従させたい u/v を 1 行で用意 (マウス座標を毎フレーム書込み)
  2. Render Pick DAT で Strategy = Always / Fetch Position = In World Space に設定
  3. 出力テーブルの tx / ty / tz 列を DAT to CHOP で CHOP 化
  4. 得られたチャンネルをカーソル用 Geometry COMP の translate にエクスポート

関連オペレータ 🔗

類似機能OP 🔍

  • Render Pick CHOP — 同じピック機構を CHOP として 1 ピック分の値で受け取る版
  • Render Select TOP — Render TOP の補助出力 (位置・法線・深度等の AOV) を画像として取り出す

組み合わせ推奨OP 🔄

  • Render TOP — ピック対象となる3Dシーンを描画する出力元 (必須の組合せ)
  • Camera COMPCustom Pick Camera(s) で参照する視点を提供
  • Geometry COMP — Pickable Flag の対象。インスタンシング使用時は Instance ID の取得元
  • DAT Execute DAT — ピック結果テーブルの変化を契機に Python ロジックを発火
  • Mouse In CHOP — マウス座標を CHOP として取得し、CHOP to DAT で入力テーブル化

前処理・後処理DAT 🎯


Info DAT情報 📊

Render Pick DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。

DAT 固有情報 📋

  • num_rows: DAT の行数
  • num_cols: DAT の列数
  • type: DAT の型 (table / text)
  • is_table: テーブル形式の場合 1、テキスト形式の場合 0

汎用オペレータ情報 🔄

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

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

よくある問題と解決策 🔧

❌ Problem: ピックしても出力テーブルが更新されない
✅ Solution:

  • Render/RenderPass TOP に正しいレンダリング元を指定しているか確認
  • StrategyHold First Picked の場合は最初のヒット以降更新されない仕様のため、用途に応じ AlwaysWhile Select に切替
  • 入力 DAT が cook しているか、u/v 列が正規化座標 (0–1) になっているかを確認

❌ Problem: ピックしたいオブジェクトが選択されない
✅ Solution:

  • 対象 Object コンポーネントの Pickable Flag がオンになっているか確認
  • Use Pickable Flags をオンにしている場合、Pickable 以外のジオメトリは全て無視される
  • 他オブジェクトに遮蔽されている可能性がある場合は Include Non-Pickable Objects を見直す
  • 細いジオメトリは Pick Radius を広げると拾える

❌ Problem: 複数カメラからの並列ピックが期待通り動かない
✅ Solution:

  • Custom Pick Camera(s) に対象 Camera COMP 群が全て登録されているか確認
  • 入力 DAT に camera 列を用意し、各行で参照カメラ名を指定する
  • Allow Multi-Camera Rendering をオンにしているか確認 (旧 GLSL MAT 由来の不具合時のみオフ)

❌ Problem: 出力テーブルの値がガタついて使いにくい
✅ Solution:

  • 後段で DAT to CHOPFilter CHOP で値を平滑化
  • Response Time を調整して更新タイミングを緩める
  • Pick Radial Step / Pick Circular Step を増やしサンプリング点を間引き、負荷とノイズを下げる

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました