![]() | 最初に使いましたが、もやっとした光の粒を表示するモードです。 きらきらと光の粒をばらまくといった使い方の他に、 すぐ思いつく応用としては 黄、赤、黒と粒子ごとに時間進化させながら グラデーションさせる、燃え上がる炎や爆発の表現があります。(後述) |
![]() | 昔はそうした表現は難しかったのですが、今はそうした表現も可能になっています。 この項目は、今から考えれば古いやり方ですが、炎と煙について2種類のパーティクルを設定して、寿命などを調整する方法を残しておきます。 (炎は速く消える等の工夫をして実現しています) |
![]() |
パーティクルシステムごとに別々にマテリアルも用意して、それぞれで違う色などを使うようにしています。 |
![]() | パーティクル2種類で、まぁまぁそれらしい爆炎を作ることができました。 色やタイミングなどを詰めれば、もう少し良いものが作れそうです。 ここでは、重力の効きを-0.1ほどにして、turbulence(乱流)を少し加えています。 |
![]() | Blend のテクスチャを使ってカラーカーブを作成します。ここでは色の変化とサイズの変化用に2つのテクスチャを使ってみます。 |
![]() | Coordinate(座標系)を Strand/Particle にすることで、粒子の発生からの時間を横軸と考えて着色が出来ます。Color にチェックをすることで、色を、Sizeをチェックすることでサイズを変えられます。 注意点として、サイズのほうを変化させるときは、RGBの3成分では無く値が1つ必要なので、色ではなくアルファ値が反映されます。 また、普通は0から1で値を編集しますが、パーティクルのサイズは0.01とか小さい値を使うことが多いので、サイズ調整に DVar (この値を掛け合わせた値が使用される)を駆使するのが便利です。 |
![]() | 炎と煙であれば、このようなカラー設定でしょうか。 |
![]() | ハローのマテリアルの色設定としては、白いとハローの中心部が白くなって全体的な色調が変わるので、黒を基準にしたほうがテクスチャを使っての色設定はしやすいようです。 |
![]() | テクスチャを利用して、このように色とサイズが変化するハロー表現ができました。 |
![]() | オブジェクトを作成します。今回床の上を移動させようと考えているので、めり込まないようにメッシュの位置を調整してあります。 |
![]() | RenderのモードをObjectにして、コピーするオブジェクトを設定します。 |
![]() | 粒子の代わりにオブジェクトが置かれます。 コピーされた方のオブジェクトが邪魔であれば、別レイヤーに退避することで隠すことができます。 (コピーは粒子のいる側のレイヤーに残ります) |
![]() | 向きのないHaloの時は良かったのですが、Object表示の時は粒子が回転をしてほしいです。 回転の計算をするために、Rotation にチェックを入れて設定をします。 粒子の速度に応じて回転させる(破片が飛び散るといった場合など)、といった設定もできますが、 今回、床との相互作用として回転をしてほしいので、Dynamicにチェックを入れて、Angular VelocityをNoneに設定します。 (Angular Velocityを他の設定にすると、転がりではない回転になってしまいます。) |
![]() | Render 設定側にも Rotation のチェックを入れて、回転を反映させるようにします。 ところで、摩擦が0だと転がらずに滑って行ってしまうので、床の Collision 設定も、摩擦(frictino)を 0 以外にしないといけません。 これで転がりが反映されます。 ところがよく見ると、粒子の本体はサイズ0として計算されているので、ボールが床に半分めり込んでしまっています。 (粒子のサイズを設定してあってもこうなります) |
![]() | 衝突判定などに、粒子サイズを反映させるには、Physics 設定の 「Size Deflect」にチェックを入れます。 |
![]() | これで床の上を転がりました。 当然ですが、オブジェクトの表示サイズと、粒子のサイズがちょうどあっているようにする必要があります。 |
![]() | スザンヌも(最初に床の上を滑らすためにずらしていた)原点の位置を戻してやって、 球の代わりに置けば床の上を転がります。 ただし、パーティクルシステムの粒子はあくまで粒子であって、お互いにぶつかったりオブジェクトの凸凹を考慮したりはしません。 そうしたより本格的な運動をさせるときには剛体シミュレーションを使うしかないでしょう。 |
![]() | 飛翔体の場合などは、飛んでいく向きにそろえて表示をしたい場合があるでしょう。 その場合は、Angular Velocity を Velocity に設定して Dynamic をチェックします。 |
![]() | この時は、オブジェクトのx軸方向が前になります。 |