« 頂点上にパーティクルを発生させる。 その2。 | トップページ | 頂点上にパーティクルを発生させる。 その4。 »

2012年6月 7日 (木)

頂点上にパーティクルを発生させる。 その3。

また少し改造してみました。


前回までのは、パーティクルの cone がベースメッシュに埋まっていたんですよね。 というのは、パーティクルShape の cone は、センターの位置がコーンの底面ではなくブツの中心であるため、そのセンター位置で頂点上に配置されてしまうため、cone の底面付近が埋まってしまうという状態になっていました。


まあ、今回 cone を使っているのはただの実験用ダミーとしてなわけですが、実際に使うときは当然、ベースメッシュの頂点位置にガチガチに固定されてしまうのではなく、任意にオフセットできた方が便利だと思います。 なのでその方法を考えました。  とか言って、全然大したアレではないですよ。 メモですメモ。

Offsetparticlesalongnormal_2

ビューポートを見ると、コーンが法線方向に浮いているのがわかると思います。 それぞれの頂点位置における法線方向にオフセットしたからです。



追加されたのはコメントで囲ってある部分です。それ以外は、前回と全く同じツリーです。




でオフセット量を決めています。XYZ ですが、今回は Y だけオフセットしてます。 X と Z にもゼロ以外の値を入れれば同じようにオフセットされるはずです。はず。


ベクタですので、オフセット量だけでなくオフセットする方向も司っているのですが、そのままだとグローバル座標での方向になりますので、ベースメッシュの SRT に追従するよう、ベクタを回転させてやらねばなりません。どんだけ回転するかは、パーティクルを法線方向に向かせるツリーを組んだ時点で得られているため、それを再利用してます。 これで は正しい方向を向きました。


あとは元のパーティクルのポジションに、新しく得られたオフセットベクタを足してやればいいだけです。たぶん。 なので で元のパーティクルポジションを取得し、 の Add ノードで の結果に加算します。


その結果を、 でパーティクルにセットし直してあげて終了。




合ってますかね? この説明で合ってますかね?  どうかツッコミお願いします。 
 

そもそも、前回まで組んだツリーはそのままで良いのだということを前提に進めてしまっています。 どんな落とし穴があるのかもわからないまま。 

まあいいや、俺は勝手に勉強になってます。 全力でメモ。覚えているうちにメモ。ホヤホヤのうちにメモ。そのモチベーションがあるうちにメモ。どうせすぐ萎えて終わるんだからやる気のある時だけメモ。





最初、上手く行かなかったんです。
というのは、Init Particle Data でパーティクルの初期状態(向きも含む)を決めてあげる時に、いっぺんにオフセットもやろうとしていた感じなんですよ。今思えばですけどね。
それでああでもないこうでもないとやって、上手く行かなくて。

で、ふとよくある ICE のデータのセット方法のパターンが思いついて。 当たり前なんですが、一度セットし、それをゲットして、加工した後に戻してあげるという。 カスタムアトリビュートに格納し、それを Get Data してゴニョゴニョした後に Set Data とか、よくやるじゃないですか。

ってことで、画像の黄色印の部分ですが、AddPoint 内の最初の OnCreation にブチ込んだツリーで初期状態を決め、その初期状態をゲットしてきて、オフセットをかましたのちにセットし直してあげる、という考え方でやってみたら上手く行ったように見えます。


この辺の発想に至るかどうかあたりが、今の俺のレベルでは、重要な分かれ道になる気がします。 いっぺんにやろうとせず、一度セットして、その後ゲットし、加工した後にもう一度セットし直して終了。  ううむ、体に染み付くといいのですが。。。。






.

|

« 頂点上にパーティクルを発生させる。 その2。 | トップページ | 頂点上にパーティクルを発生させる。 その4。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 頂点上にパーティクルを発生させる。 その3。:

« 頂点上にパーティクルを発生させる。 その2。 | トップページ | 頂点上にパーティクルを発生させる。 その4。 »