
レイの交差判定、…レイキャストって言うんですかね?をBifrostでやってみました。
[3D] 三角形と線分の交差判定 [Qiita]
https://qiita.com/edo_m18/items/2bd885b13bd74803a368
Tomas Mollerの交差判定【基礎編】 [試行錯誤]
https://shikousakugo.wordpress.com/2012/06/27/ray-intersection-2/
参考にしたのは↑こちらの記事です。ありがとうございます…!
(もし問題とかあればコメントとかで指摘していただけると…)
やり方的には上の記事をそのままBifrostに落とし込んでいるだけなので、
細かい所は省きますが、ざっくりと自分がやった手順をまとめようかと思います。
まず上の記事で紹介されている判定は、一つの三角形ポリゴン単位の判定なので、
対象のメッシュに三角形以外のポリゴンが入っていると上手くいかなさそうです。
普通にMayaのモデリングメニューの「メッシュ」→「三角形化」で、
三角形化してしまっても良いのですが、
後から編集したい時に困るのでBifrost上で三角形化のコンパウンドを作成しました。
http://tn-log.xyz/dl/bifrost/raycast/convert_triangle_polygon.txt
コンパウンドは↑こちらです(コピペして使ってください)

ちなみに、交差判定に使う為にとりあえず三角形化できれば良いかという感じで作ったので、
Mayaの内部の三角形化の結果とは全く関係ない形で三角形化されるので注意してください。
(多角形なほど結果が違って微妙かと)

また交差判定側の仕組み次第ではありますが、
複数のメッシュを対象にする時は、一つのメッシュにマージした方がやりやすそうだったので、
図のように「merge_geometry」ノードでマージしています。

続いてレイの交差判定の処理ですが、三角形化とはbifrostグラフ別にした方が良いです。
(上の図はノードエディタです)
というのもの、レイの基準となる発生点と向きは基本的に動かした物だと思いますが、
入力対象にアニメーションが入っていた場合、再生した際にそのbifrostグラフ全体に処理が走ってしまう為です。
(図の場合だとpCone1を動かす分には、bifrostGraph1の三角形化の方は再生時に処理は走らない感じですね)
http://tn-log.xyz/dl/bifrost/raycast/raycast.txt
レイキャストのコンパウンドは↑こちらです (コピペして使ってください)
こちらのコンパウンドを使って下図のように繋ぎます。
(上のノードエディタで言う所のbifrostGraph2ノードの中身です)

内容的には基本的に初めに紹介した記事の処理を三角形ポリゴン分まわして、一番近い判定結果を返しているだけですね。
outputに位置情報を出しているので、ノードエディタで適当なオブジェクトの移動に繋げば判定の位置が分かるかと思います。

後は好みでレイを可視化する為にstrandsを使っても良いかと思います。

上図の「ray_strands」コンパウンドは↓こちらです (コピペして使ってください)
http://tn-log.xyz/dl/bifrost/raycast/ray_strands.txt
(普通のstrands設定ですが参考程度に)
レイキャストは以上です。
ちなみに既存のノードの近しい処理で「get_closest_locations」ノードがありますが、こちらは最も近い箇所の値を取得する感じなので、特定の方向の値を取得したい場合は今回のレイキャストが良いかなぁと思います。