[3ds max: PFlowBox3] Geometryオペレータ – Closest Point By Surface

もう触る機会もないだろうと思っていたMaxに触れる機会に恵まれています。
そんで早速box3を触ることになったのであれこれやっているのですが、その際ちょっと戸惑ったのでメモ。

パーティクルのポジションから、任意のジオメトリ上の最近点が取得したいと思い、Geometryオペレータを使用しました。
Geometryオペレータはその名の通りジオメトリにまつわるオペレータです。
最近点の位置、法線、頂点カラーなどの取得、ジオメトリのボリューム内にパーティクルが入ったかどうかの判定、フェイスの面積をとったり、コリジョン(するであろう?)ポイントを取ったりなどなど、、とにかくジオメトリにまつわるあれこれが取得出来るオペレータのようです。

で、先にも述べたとおり、今回はジオメトリ上の最近点を取得を目的として使ってみます。

結果はこう↓
stick_to_closest_geo_box3_result

ネットワークはこう↓
stick_to_closest_geo_box3_network

こう見ると簡単に見えるネットワークなんですが、全く動かなくて大分苦戦しました。
これで注意すべき点は、2つのGeometryオペレータを使わないといけないところです。

1つ目のGeometryオペレータではClosest Point By Surfaceを行い、Pairと呼ばれる型で値が出力されています。
この場合はVector+Intの4つの値が1つの型として出力されているのですが、とりあえずVectorが入ってるならもう最近点入ってるだろ、と思って適当にコンバートしてPositionに挿していました。

これが間違いでした。

どうやっても結果がおかしいので詳しく調べてみると、原点付近で三角形に分布していました。
ジオメトリを動かすと反応して動く。おそらくClosest Point By Surfaceでは、最近面のIDとそのUV座標を返しているのだろうと考えました。

と、こんな言い方をすると自力で発見したみたいですが、その間にネットなども結構探し回って調べていて、そこできっかけとなるネットワークを1つ発見していたのを付け加えておきます。
ファイルUPしてくれた方ありがとう!

で、その出力されたPairの値をどうにかすべく、もう1個Geometryオペレータを作ってぽちぽち調べていたら、Point Positionというなんともドンピシャな名前のやつがPairを要求していたので、とりあえず挿してみたところビンゴ。事なきを得ました。いやまだ継続中ですが、一応、、

というわけで、Box3でPair型が出てくるところはどういう値を格納しているのかを意識する必要があるということで要注意です。
まぁ値を気にするのはどの型でも一緒なんですけどね。ただPairというよくわからない名前も手伝って、とりあえず~と作業をしてしまうと全く思った通りの結果にたどり着けないので、慣れるまでは値をDisplay Dataオペレータなどを使用しながら逐一確認して行くのが、なんだかんだ一番効率の良い方法なのかもしれません。

ところでこれを調べている時に知ったのですが、Box3では別のパーティクルの情報を読んで来たりすることも可能な様です。
もしかしたらそっちはそっちで面白いことが出来るんじゃないかという期待が持てました。

そちらも機会があればご紹介したいと思います。

あ、もう1つ重要なことを忘れていました。
GeometryオペレータやObjectオペレータに挿すオブジェクトは、Select Objectオペレータを使用して選択してやります。
さらっと使ったまま全く触れてなかったので一応。

今度こそ(・・)ノシ

コメントを残す

メールアドレスが公開されることはありません。