
概要 📖 – 光線を飛ばし衝突点を求める
Ray POPは、入力ポイントから光線を飛ばし、コリジョンジオメトリとの交差点を計算して各点を移動させる POPです。交差点の法線・距離・反射方向・内外判定などを属性として出力でき、GPU 上で高速に処理されます。
主な用途 🎯
- 入力ポイントから光線(レイ)を飛ばし衝突ジオメトリとの交点を計算
- 交点の法線・距離・反射方向など属性を出力ポイントに付与
- ポイントをコリジョン形状の表面へ投影・スナップ
- ポイントが閉じたメッシュの内側か外側かを判定
- ハードウェアレイトレーシングによる高速な交差判定
データフロー 🔄
入力: 始点となるポイント群 + コリジョンジオメトリ
↓
各点から指定方向へレイを発射し交差判定
↓
出力: 衝突点へ移動したポイント + 交差属性(法線・距離 等)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
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
格子状に並べたポイントを下向きの法線方向にレイを飛ばして地形メッシュへ落とし込み、起伏に沿ってオブジェクトをスナップ配置する基本フロー。コリジョン側に地形ジオメトリを入力します。
- Grid POP で格子状のポイント群を生成し、各点に下向きの法線属性を付与
- Ray POP の Ray Attribute を法線 N に設定し、第2入力に地形メッシュを接続
- 各ポイントが地形表面の交差点へ移動
- Copy POP で交差点にオブジェクトを複製し、起伏に沿った配置を完成
Example 2: 反射経路のライン描画 ✨
Point Generator POP → Ray POP (Number of Bounces, Connect Points) → Line POP
始点ポイントから光線を複数回反射させ、Connect Points で交点を折れ線として接続することで、ボックス内を跳ね回る光のような反射経路を可視化する例。
- 始点ポイントに発射方向の法線属性を付与
- Ray POP の Number of Bounces を増やして反射回数を設定
- Connect Points を有効化して交点をラインとして接続
- 反射しながら進む光線の軌跡が線として描画される
Example 3: 内外判定によるポイント抽出 🫧
Sphere POP → Ray POP (Inside) → Delete POP
ポイント群が閉じたメッシュの内側にあるか外側にあるかを Inside 属性で判定し、後段でその値を基準に内側だけ・外側だけのポイントを抽出するフロー。
- 判定対象のポイント群と、閉じたメッシュをコリジョンに用意
- Ray POP の Inside を有効化して内外判定属性を出力
- 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で未使用メモリを解放
参考資料 📚
その他 🔗
- TouchDesigner Wiki — POP 概要
- TouchDesigner Wiki — Category:POPs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

