_581x100.png CGsyomei_583x102.gif 訪問者 無料カウンター ページビュー 無料カウンター

2014年02月14日

2014エフェクトセミナー サンプルシーン解説 レベルD

今回はエフェクトセミナーをするに当たって基本的な破壊エフェクトの予習を基本から見ていこうと思います。レベルDのサンプルシーンでは最もベーシックで重要な、SCオペレーターを使ったセッティングを説明していきます。以前のエントリーでもSCについては少し触れているのでこちらも参考にしてください。 http://sky-high-nest.sblo.jp/article/53117385.html

FXSeminar2014LevelD_0001.jpg

サンプルファイルはこちらからダウンロードしてください。

https://dl.dropboxusercontent.com/u/5968011/FXSeminar2014/DestructionSystemLevelDAll_v0001.max
まずSCとは何かですが、これはTPで主に使われている物理演算用ノードのことです。SCはShape Collisionの略でTP内のパーティクルシェイプ同士の当たり判定を計算します。なのでシェイプをもっていないパーティクルは当たり判定から除外されてしまいます。



SCで物理演算をする時にはパーティクルシェイプの状態がどうなのかを設定する必要があります。大きく分けて言えば、「地面のように動かない物、もしくは巨大なタンカーみたいに移動しているけど小さい物の影響を受けない物か?」と「小石や木片のように動く物か?」です。これはグループのパラメーターロールアウトのShape Collision Dynamics内で設定できます。当たり判定があっても動かない物に対してはNeutron、動く物はActiveに設定します。Frozenは最初はNeutronの状態で、コリジョンが始まってある程度のインパクトが加わるとActiveになるというものです。Neutronの状態ではMAX中でつけたトランスフォームのアニメーションやノイズモディファイア等での頂点アニメーションもTP内で反映することが出来ます。

その他の重要なパラメーターにも少し触れておきます。Elasticityは弾性の意味です。低い値ほどすぐに反発が収まり大きい値ほどより跳ねる結果になります。Dymanic Frictionは衝突があった瞬間の摩擦力です。値が高いほど動きがすぐに収まります。Static Frictionはシェイプ同士が接触しあっている状態での(オブジェクト上を滑っているような状態等)摩擦力です。Voxel Gridはパーティクルシェイプのコリジョンに使用するVoxelの解像度を決定します。SCはパーティクルシェイプをVoxelでラップしてそのVoxel同士の衝突判定を計算しています。なのでより大きい値はより高詳細な結果に、少ない値はよりラフな結果になります。ちなみに0の場合は完全なバウンディングボックス状態になりますが計算はかなり早くなります。Edge Sampleはエッジ上にコリジョンポイントをどれだけ設定するかというものです。セグメントの無い長いエッジはどうしてもめり込みやすいのでこの値を上げると衝突の精度が上がります。

FXSeminar2014LevelD_0002.jpg

それではシーンの解説をしていきます。中心に積み上がったブロックがありそれを崩すというシンプルな設定です。SCを使った破壊エフェクトで重要なのはSCによる物理演算がかからない状態のグループから物理演算が有効なアクティブなグループにいかに変更するかということです。このシーン内では、ブロックがPartsPreグループからPartsActiveグループに移動することによって当たり判定が発生するようになります。

FXSeminar2014LevelD_0004.jpg

パーティクルグループツリービュー内のグループの構成を見てみると、PartsPreが独立していて、SC以下に幾つかのグループがありPartsActiveはさらにForceグループの下に入っています。TPでは親グループは下位にあるグループに影響を与えるので、この場合はSCグループ以下全てにSCの影響が、Forceグループ以下に全てForceに割り当てた重力等の影響がかかるということになります。PartsPreは独立しているのでSCも重力も影響を受けないことになります。

FXSeminar2014LevelD_0005.jpg

それではダイナミクスツリーの構造を解説していきます。

まずMasterDynamicsの下にDestructionAllというセッティング全体のルートになるダイナミクスツリーを作成しています。これは今後重要になるのでまずはこのルートのグループを作る癖をつけましょう。いきなりMasterDynamics直下にいくつもダイナミクスツリーを作っていくのは避けます。

FXSeminar2014LevelD_0006.jpg

さてDestructionAll以下にはまずActivatorNodeとActivatorPrtPosという2つのNodeヘルパーがあります。これは後述するアクティベーション用の球オブジェクトとアクティベーション用パーティクルの発生位置を設定するものです。



次にBornComponentダイナミクスツリーです。componentは「構成要素」という意味です。BornPartsA、BornPartsBでPartsPreグループのブロックオブジェクトを、BornGroundで地面を、BornColliderで衝突用のオブジェクトを発生させています。

FXSeminar2014LevelD_0007.jpg


次にGoToActiveダイナミクスツリーです。この中でPartsPreグループをPartsActiveに送り込むのですが、実際によく使う3種類の設定が混在しています。

ActivateByInmeshではInMeshノードを使ってActivatorオブジェクトの内部に入ったPartsPreグループのパーティクルがPartsActiveグループさせています。InMeshはパーティクルのPositionの情報が必要になるので忘れずにコネクトしてください。グループをアクティベートするのと同時にSpinを少し加えてActivatorオブジェクトからのVelocityも加えています。TPではVelocityは「スピードを持った方向性」なので、VelocityからDirectionとSpeedの値を両方取ることが出来ます。Speedの量を調整したい場合は途中にFloatヘルパーを挟んで調整します。

FXSeminar2014LevelD_0009.jpg

ActivateByPrt内では、ActivatorPrtというアクティベーション用パーティクルを発生させてこれに近づいたPartsPreグループをアクティベートします。BornActivatorPrtダイナミクスセット内のBornActivatorPrt(PositionBorn)でActivatorPrtを発生させます。放射状に爆発しているような動きになるようにSpeedやDirectionを調整します。発生位置はActivatorPrtPosノードからPositionを引っ張って来ています。

FXSeminar2014LevelD_0010.jpg

その次のActivateダイナミクスセットでアクティベートするのですが、ここではPsearchというInitiatorノードを使っています。これは何かというと、同じグループもしくは違うグループのパーティクルをチェックして「自分から一番近いパーティクルは?」「指定した範囲内で見つかったパーティクルの数は?」などの情報を取得できるノードで、TPを扱う際に非常に重要になってくるので是非使いこなしてください。ここでは100ユニットのRadiusの範囲内でPartsPreパーティクルから一番近いActivatorPrtパーティクルを見つけ、そのActivatorPrtパーティクルがGroupPartsActiveノードをOnにしています。パーティクルそのものをOnインプットに繋げてもOn,Offのブールの代わりになるというのは結構重要です。そしてActivatorPrtパーティクルからParticle Dataヘルパーを使ってVelocity情報を取り出しPartsPreパーティクルにも同じ速度とDirectionを与えてあげつつSpinも加えて自然な動きをつけてあげます。

FXSeminar2014LevelD_0011.jpg

さて次はActivateByColliderダイナミクスセットです。ここではColliderパーティクルのシェイプの大きさに合わせて当たる直前にアクティベートさせています。ここでもPsearchを使ってアクティベートしていますが、Colliderパーティクルの中心からPartsPreパーティクルまでの距離を測るにはLineツールを使うのが一番簡単です。Lineツールで両方のパーティクル間にラインを引くと、左下に距離が表示されているのが分かります。これでパーティクル間の距離が分かります。今回はPsearchのRadiusはColliderパーティクルのシェイプより少し大きめにしてコリジョンが始まる少し前からアクティベートされるようにしています。こうすることでColliderパーティクルとPartsPreパーティクルのシェイプ同士がめり込みにくくなります。



次にForceダイナミクスセットです。ここで重力の設定をしています。基本的にはForceノードを使ってStrengthを設定、DirectionはPoint3ヘルパーを使ってZの値に−1を入れることで下方向にForceの力がかかるように設定します。

次にSCダイナミクスセットです。ここでは基本的に設定するのはパラメーターロールアウト内のグループの設定です。GroupをSCに設定するとパーティクルグループツリー内のSC以下のグループに物理演算処理がかかります。これでパーティクルシェイプ同士の衝突が出来るようになります。

以上がシーンのセッティングの説明になります。
posted by けゑ at 12:40| Comment(0) | TrackBack(0) | Thinking Particles
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/87186963

この記事へのトラックバック