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

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

Render Pick CHOP の3Dピック機能を示す図

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

概要 📖 – 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 等のチャンネル

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 🧹
– 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 にしてピックを発火させます。

  1. Render TOP のシーンを構築し Render Pick CHOP の Render/Render Pass TOP に指定
  2. Panel CHOP の u/v をそれぞれ Render Pick CHOP の U / V にエクスポート
  3. Panel CHOP の lselect を Select にエクスポート
  4. 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カーソルが面上に張り付きます。

  1. Strategy を Always、Fetch Position を In World Space に設定
  2. 出力チャンネル tx/ty/tz を Cursor 用 Geometry COMP の translate にエクスポート
  3. 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 に渡すと、ピックした面の法線方向に常に光を向けるライティング演出が可能です。

  1. Fetch Normal を In World Space に設定
  2. nx/ny/nz を Math CHOP で角度に変換
  3. 結果を 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 と組み合わせれば、インスタンスごとの個別アクションを記述できます。

  1. Fetch Instance ID をオンにする
  2. Activate Callbacks をオンにし Callbacks DAT で onPick イベントを実装
  3. 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、無効時は0
  • export_sernum: Export接続の更新回数

汎用オペレータ情報 🔄

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

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

よくある問題と解決策 🔧

❌ Problem: ピックしても値が更新されない
✅ Solution:

  • Picking by が Parameters のとき Select パラメータが 1 になっているか確認
  • Strategy が Hold First Picked の場合は最初のヒット以降更新されない仕様のため、用途に応じ AlwaysWhile 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 を増やしサンプリング点を間引いて負荷とノイズを下げる

参考資料 📚

その他 🔗

公式リソース 📖

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