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

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

Ray POP のレイ交差機能を示す図

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

概要 📖 – 光線を飛ばし衝突点を求める

Ray POPは、入力ポイントから光線を飛ばし、コリジョンジオメトリとの交差点を計算して各点を移動させる POPです。交差点の法線・距離・反射方向・内外判定などを属性として出力でき、GPU 上で高速に処理されます。

主な用途 🎯

  • 入力ポイントから光線(レイ)を飛ばし衝突ジオメトリとの交点を計算
  • 交点の法線・距離・反射方向など属性を出力ポイントに付与
  • ポイントをコリジョン形状の表面へ投影・スナップ
  • ポイントが閉じたメッシュの内側か外側かを判定
  • ハードウェアレイトレーシングによる高速な交差判定

データフロー 🔄

入力: 始点となるポイント群 + コリジョンジオメトリ

各点から指定方向へレイを発射し交差判定

出力: 衝突点へ移動したポイント + 交差属性(法線・距離 等)

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Ray Page 📁

レイの方向設定 .raydirection 🎯

各ポイントから飛ばす光線の向きと反射回数を決める設定

Ray Attribute .rayattrib 🧭
Ray Attribute (レイ方向属性) — 光線を飛ばす向きを指定する属性名を設定します。
– 通常は法線 N など、各ポイントが持つベクトル属性を使用します。

Negate Ray .negateray 🔄
Negate Ray (レイ方向の反転) — 光線の向きを逆方向に反転します。
– 属性を変更せず、表面の裏側へレイを飛ばしたい場合に使用します。

Number of Bounces .numbounces 🔁
Number of Bounces (反射回数) — 光線が反射する回数を指定します。
– 複数回反射させると、跳ね返りの経路を順に追跡します。

Connect Points .connectpoints 🔗
Connect Points (交点を線で接続) — 複数回反射させたとき、各入力ポイントの交点を折れ線(ライン)として接続します。

レイ長の制限 .raylength 📏

光線の到達距離を制限したり、線を途中で切り詰める設定

Limit Ray Length .limitraylength 📏
Limit Ray Length (レイ長の制限) — 光線の到達距離に上限を設けます。

  • Ray Distance Max Attrib (最大距離属性) — レイの最大到達距離を保持する属性を指定

Trim Ray .trimray ✂️
Trim Ray (レイ線の切り詰め) — 接続したレイの折れ線を途中で切り詰めるオプションです。

  • Trim Distance Attrib (切り詰め距離属性) — レイを切り詰める距離を保持する属性を指定

ハードウェアレイトレーシング .hwraytracing 🖥️

対応 GPU 上でハードウェアレイトレーシングを使い交差判定を高速化する設定

項目 内部名 説明
Off .off ハードウェアレイトレーシングを使わず CPU 側で交差判定を行う

衝突判定の挙動 .hitbehavior 💥

ハードウェアレイトレーシング時のコリジョンジオメトリの扱いと、どの衝突を採用するかの設定

Opaque Geometry .opaque 🧱
Opaque Geometry (不透明ジオメトリ) — ハードウェアレイトレーシング使用時、コリジョンジオメトリを不透明として扱うかどうかを設定します。
– 不透明にすると最も近い(または最初の)衝突のみを返します。

Any Hit .anyhit
Any Hit (任意の衝突を採用) — 最初に見つかった衝突を返します。最も近い・最も遠い衝突である保証はありません。

出力する交差属性 .hitattributes

交差点で生成・出力する属性(法線・距離・反射方向など)を有効化する設定

Hit Normal .hitnormal 🧭
Hit Normal (衝突点の法線) — 衝突した位置の法線属性を生成します。

Reflected Ray .doreflectedray ↩️
Reflected Ray (反射方向) — 反射した光線の向きを保持する属性を出力します。

  • Reflected Ray Name (反射方向の属性名) — 反射方向を出力する属性の名前を指定

Point Intersection Distance .dist 📐
Point Intersection Distance (交差距離) — 元のポイントとコリジョンジオメトリとの交差点の距離を属性として出力します。

  • Point Intersection Distance Name (交差距離の属性名) — 交差距離を出力する属性の名前を指定

Farthest Hit .farhit 🏁
Farthest Hit (最遠の衝突) — 最も遠い衝突位置を属性として出力します。

  • Farthest Hit Name (最遠の衝突の属性名) — 最遠の衝突位置を出力する属性の名前を指定

Number of Hits .numhits 🔢
Number of Hits (衝突回数) — レイ方向のすべてのプリミティブを貫通する際の衝突回数を出力します。

  • Number of Hits Name (衝突回数の属性名) — 衝突回数を出力する属性の名前を指定

Inside .inside 🫧
Inside (内外判定) — 閉じたポリゴン面(ボリューム)の外側から出たレイには 0、内側から出たレイには 1 を持つ属性を出力します。

  • Inside Name (内外判定の属性名) — 内外判定値を出力する属性の名前を指定 (閉じたメッシュの内側で 1、外側で 0)

Hit Primitive Index .hitprimindex 🔖
Hit Primitive Index (衝突プリミティブ番号) — 衝突した位置のプリミティブ番号を生成します。

Barycentric Coordinates .barycoords 📊
Barycentric Coordinates (重心座標) — 交差点の重心座標を属性として出力します。

  • Barycentric Coordinates Name (重心座標の属性名) — 重心座標を出力する属性の名前を指定

位置の微調整 .positionadjust 🛠️

交差位置のスケーリングと、表面からのオフセットを調整する設定

Scale .scale 🔍
Scale (交差スケール) — 交差位置のスケーリング係数です。

Lift .lift ⬆️
Lift (浮き上がり量) — コリジョンジオメトリの法線方向に沿って、ポイントを表面から少し浮かせるオフセット量です。

サンプリングする属性範囲 .attrscope 🎚️

コリジョンジオメトリ側からサンプリングして取り込む属性の範囲を指定する設定

Hit Point Attr Scope .hitpointattrscope 📍
Hit Point Attr Scope (取得するポイント属性) — コリジョンジオメトリ上でサンプリングするポイント属性を指定します。* ですべての属性が対象になります。

Hit Primitive Attr Scope .hitprimattrscope 🔷
Hit Primitive Attr Scope (取得するプリミティブ属性) — コリジョンジオメトリ上でサンプリングするプリミティブ属性を指定します。* ですべての属性が対象になります。

Hit Vertex Attr Scope .hitvertattrscope 🔻
Hit Vertex Attr Scope (取得する頂点属性) — コリジョンジオメトリ上でサンプリングする頂点属性を指定します。* ですべての属性が対象になります。


実践アイデア 💡

Example 1: 地面へのスナップ配置 🎯

Grid POP → Transform POP → Ray POP (Ray Attribute: N) → Copy POP

格子状に並べたポイントを下向きの法線方向にレイを飛ばして地形メッシュへ落とし込み、起伏に沿ってオブジェクトをスナップ配置する基本フロー。コリジョン側に地形ジオメトリを入力します。

  1. Grid POP で格子状のポイント群を生成し、各点に下向きの法線属性を付与
  2. Ray POP の Ray Attribute を法線 N に設定し、第2入力に地形メッシュを接続
  3. 各ポイントが地形表面の交差点へ移動
  4. Copy POP で交差点にオブジェクトを複製し、起伏に沿った配置を完成

Example 2: 反射経路のライン描画 ✨

Point Generator POP → Ray POP (Number of Bounces, Connect Points) → Line POP

始点ポイントから光線を複数回反射させ、Connect Points で交点を折れ線として接続することで、ボックス内を跳ね回る光のような反射経路を可視化する例。

  1. 始点ポイントに発射方向の法線属性を付与
  2. Ray POP の Number of Bounces を増やして反射回数を設定
  3. Connect Points を有効化して交点をラインとして接続
  4. 反射しながら進む光線の軌跡が線として描画される

Example 3: 内外判定によるポイント抽出 🫧

Sphere POP → Ray POP (Inside) → Delete POP

ポイント群が閉じたメッシュの内側にあるか外側にあるかを Inside 属性で判定し、後段でその値を基準に内側だけ・外側だけのポイントを抽出するフロー。

  1. 判定対象のポイント群と、閉じたメッシュをコリジョンに用意
  2. Ray POP の Inside を有効化して内外判定属性を出力
  3. Delete POP で Inside 値を条件にポイントを絞り込み

関連オペレータ 🔗

類似機能OP 🔍

  • Proximity POP — レイ交差ではなく最近傍点の距離で空間関係を求める
  • Neighbor POP — 近傍ポイント情報を取得し点同士の関係を解析

組み合わせ推奨OP 🔄

  • Sphere POP — コリジョン形状として球メッシュを供給
  • Box POP — コリジョン形状としてボックスメッシュを供給
  • Copy POP — 交差点にオブジェクトを複製配置
  • Force Radial POP — 交差結果を踏まえてパーティクルに力を加える

前処理・後処理POP 🎯


Info情報 📊

Ray POP は Info CHOP による詳細情報取得に対応しています。

POP固有情報 ✨

  • num_verts: POP に含まれる頂点 (vertex) 数
  • num_points: POP に含まれるポイント数
  • num_prims: POP に含まれるプリミティブ数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • cook_abs_frame: 最後にクックされた絶対フレーム番号 (アプリケーション起動からの累積)
  • cook_start_time: 最後のクック開始時刻 (ミリ秒)
  • cook_end_time: 最後のクック終了時刻 (ミリ秒)
  • cooked_this_frame: 現フレームでクックされたか (0 / 1)
  • warnings: 警告数
  • errors: エラー数

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

よくある問題と解決策 🔧

❌ Problem: 交差点が検出されず点が移動しない
✅ Solution:

  • Ray Attribute に有効なベクトル属性 (法線 N 等) が設定されているか確認
  • 第2入力にコリジョンジオメトリが正しく接続されているか確認
  • レイの向きが表面の反対側を向いている場合は Negate Ray で反転

❌ Problem: ポイントが表面にめり込む / 浮きすぎる
✅ Solution:

  • Lift の値を調整して表面からのオフセットを最適化
  • Scale で交差位置のスケーリング係数を見直す
  • 前段で Normal POP を使い法線を正しく整える

❌ Problem: 処理が重い / GPU メモリを消費しすぎる
✅ Solution:

  • 対応 GPU では Hardware Ray Tracing を有効化して高速化
  • 不要な交差属性の出力を無効化して計算量を削減
  • Common ページの Free Extra GPU Memory で未使用メモリを解放

参考資料 📚

その他 🔗

公式リソース 📖

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