2012年1月27日金曜日

前回の記事の問題解決方法。

前回の記事で書いた問題が解決しましたのでその報告です。
前回の記事を読んで少しでも解決策を考えていただいた方、アドバイスをくれた方ありがとうございました。

では解説です。
まずどういったことがしたかったのかわかりづらかったようなので説明いたします。
■シチュエーションとして水面などからオブジェクトがでてオブジェクトの表面をパーティクルが沿って下に流れ落ちるという物を作りたかったのです。
(ムービーではオブジェクトの表面に沿っていませんが…)
■そして流れ落ちるパーティクルがどんどん減って行きたかったのです。
■また、データを軽くするため水面下にあるときはパーティクルを発生させたくありませんでした。

■念のためベースとなる仕組みの説明をします。
まず元となるシードのパーティクルを作ります。
オブジェクトの表面にパーティクルを配置し、アニメーションについて行くようにしています。
表面に発生させたパーティクルからスポーンを出しています。
スポーンとなるパーティクルが徐々に減るようにParticles/[s]の値をアニメーションさせています。
最後は重力でパーティクルが落ちるようにしています。
この状態だとまだパーティクルがZのゼロより下にあってもパーティクルが出てしまいます。

■パーティクルがZのゼロ以下にあるときはパーティクルを出したくなかったのでPoint3ノードThresholdノードを使いパーティクルがZより上に移動したときにPosition Bornノードがオンになるようにしてみました。
一見問題ないのですが、(テストシーンがわかりづらくてすみませんでした。)
本番のシーンではこのつなげ方だと、パーティクルが徐々に減るというよりぷつりと切れて出なくなる印象になってしまいました。

■そこで色々試したのですが、うまく行かず、とりあえず回避策としてシードから発生するパーティクルがZのゼロ以下にあるときは消すようにしていました。見た目上は問題ありません。
ただし、計算上は一度スポーンのパーティクルを発生させてからポジション判定をして消していたのでデータの無駄が多くなっています。
今回パーティクルを大量に出したかったのでだいぶデータのロスになります。

■そこで解決策です。
種となるseedグループが水面より下にいる場合にはseed_Bグループにデータを送ります。たったこれだけでした…w
ここで重要なのはseed_Bグループを元のパーティクルseedグループの子供にしてあげることです。
このseed_Bseedグループの並列の場所に作るとうまく行きませんでした。

出来てしまえばなんてこと無かったのですが、今回は簡単なはずだけど、出来そうでできない。
後ちょっとで出来そうなのにうまく行かないというもどかしさに陥りました。
まだまだちょっとした事でつまずいているので、早くこのレベルから脱出したいものです。






0 件のコメント:

コメントを投稿