パーティクル ダイナミクスの実行時間を制御する

パーティクルのダイナミクスを制御する方法にはいくつかあります。

パーティクル オブジェクトの開始フレームの変更

各パーティクル オブジェクトには、エフェクトが始まる時間を設定する開始フレーム(Start Frame)アトリビュートがあります。たとえば、パーティクル オブジェクトに対する渦のエフェクトを任意のフレームまで遅らせることができます。

別の例として、床上の塵パーティクルの中を歩くキャラクタを作成するとします。塵は、重力、床の衝突オブジェクト、およびキャラクタの足の大気(航跡)フィールドに接続されています。ここで、フレーム 100 から足の大気フィールドの作用によって塵が舞い散るようにしたいとします。

塵の開始フレーム(Start Frame)を 100 に設定して、塵のダイナミック計算を必要になるまで遅らせることができます。これによりシーンの再生が高速化され、重力と衝突エフェクトによってパーティクルがわずかに跳ね返るのを防ぐことができます。

また、最初の 100 フレームまでに対してダイナミック(Is Dynamic)をオフに設定することによって、塵のダイナミック計算が実行されないようにすることもできます。ただし、開始フレーム(Start Frame)を 100 に設定すると、フレームをクリックしたりタイム スライダをスクラブするときに、最初の 100 フレームのランナップ計算を待たなくてもすむようにします。

パーティクル オブジェクトを作成したり、エミッタがパーティクル オブジェクトを放出するときには、開始フレーム(Start Frame)は既定で 1.0 に設定されます。この値は、現在設定されている時間単位における 1 フレームの存続期間です。

パーティクル オブジェクトの開始フレーム(Start Frame)を設定するには、パーティクル オブジェクトを選択し、次にアトリビュート エディタ(Attribute Editor)時間アトリビュート(Time Attributes)セクションで開始フレームの値を入力します。

重要: 時間単位の設定を変更する場合は、開始フレーム(Start Frame)を正しい初期値に設定して、開始時間が再計算されるようにする必要があります。

放出されたパーティクル オブジェクトは、その開始フレーム(Start Frame)の値以上のフレームで放出されたパーティクルしか受け入れません。たとえば、フレーム番号 -5 でパーティクルを放出するためには、放出されたパーティクル オブジェクトの開始フレーム(Start Frame)を -5 以下に設定する必要があります。

パーティクル ダイナミクスのタイミングの制御

ダイナミック アニメーションでは、ユーザはオブジェクトに実行させたいアクションを指定するだけで、オブジェクトをどのようにアニメートするかはソフトウェアにまかせます。従来は、このアニメーション方法と他のアクションをシンクロするのは困難でした。たとえば、クレッシェンドする音にシンクロして、放出されたパーティクルの速度を上げていくのは困難でした。

Maya には、このような問題を解決する機能が備わっています。それぞれのパーティクル オブジェクトには、パーティクル エフェクトを遅くしたり早めたりするようにアニメートすることができる現在のタイム(Current Time)アトリビュートがあります。このアトリビュートは独立した時刻の値を含みます。基本的には、パーティクル オブジェクトのクロックを遅らせたり早めたりして、作用するダイナミクスを遅らせたり早めたりします。

エミッタがパーティクルを上に向かって放出する、150 フレームから成るアニメーションがあるとします。以下の手順では、現在のタイム(Current Time)にキーを設定してパーティクルの速度を制御する方法を説明します。

  1. 放出されたパーティクル オブジェクト(エミッタではありません)を選択します。
  2. チャネル ボックス(Channel Box)で、現在のタイム(Current Time)アトリビュートをクリックします。次に右クリックして接続の解除(Break Connections)を選択します。
  3. 次に示すフレームで現在のタイム(Current Time)にキーを設定します。
    フレーム 現在のタイム(Current Time)

    0

    0

    50

    100

    100

    110

    150

    200

    アニメーションの最初(フレーム 0)では、放出されたパーティクルの現在のタイム(Current Time)がシーン時間とシンクロ化されます。どちらの値も 0 です。

    フレーム 50 では、現在のタイム(Current Time)は、シーン時間の倍の 100 に設定されています。フレーム 0 からフレーム 50 までは、放出されたパーティクルのアクションの時間は、シーン時間の倍になります。したがって放出されたパーティクルは、現在のタイム(Current Time)を操作しない場合に比べて 2 倍のスピードで動きます。

    フレーム 100 で、現在のタイム(Current Time)は 110 にキー設定されます。これにより、フレーム 50 から 100 まで、シーン時間に関連する放出パーティクルの時間の経過が遅くなります。放出されたパーティクルは、現在のタイム(Current Time)を操作しないときよりも遅いスピードで動きます。

    フレーム 150 では、現在のタイム(Current Time)は 200 に設定されているので、放出されたパーティクルの時間の進み方が再び速くなります。パーティクルは再び速く移動します。

    ヒント:

    ダイナミック エフェクトのスピードを簡単に増減するには、現在のタイム(Current Time)の値を設定した後でグラフ エディタ(Graph Editor)を使用して現在のタイムのアニメーション カーブを調整します。『アニメーション』マニュアルを参照してください。

現在のタイム(Current Time)アトリビュートについて

アニメートされたパーティクル オブジェクトは、それぞれ独自のクロックに従って移動します。このクロックを、タイム スライダと同期して動くシーン クロックから独立させることができます。

各パーティクル オブジェクトには、そのクロック値を含んだ現在のタイム(Current Time)アトリビュートがあります。シーン クロックの時間変数とは異なり、キー、エクスプレッション、またはその他のアニメーション手法を使用して、現在のタイム(Current Time)アトリビュートの値を設定することができます。シーン クロックが一定の増分を持つタイム キーパーであるのに対し、パーティクル オブジェクトのクロックは、現在のタイム(Current Time)アトリビュートを使用して設定可能な可変の増分を持っています。この増分を変化させることにより、パーティクルのダイナミック エフェクトのスピードを増減できます。

パーティクル オブジェクトでアニメーションが起こるには、その現在のタイム(Current Time)にシーンの再生に従って変化する入力接続が必要です。既定では、シーンの既定の時間変数が現在のタイム(Current Time)への入力を提供します。

非パーティクル シェイプのエクスプレッションを使用して現在のタイム(Current Time)に値を指定すると、この値はウィンドウ(Windows) > 設定/プリファレンス(Settings/Preferences) > プリファレンス(Preferences)ウィンドウの設定(Settings)カテゴリで指定された時間(Time)単位のタイプとみなされます。fps レート、たとえばフィルム(24 fps) (Film (24 fps))を選択した場合、現在のタイム(Current Time)の値はフレームとみなされます。

作業単位(Working Units)の時間値をフィルム(24 fps) (Film (24 fps))に設定したとします。これは、アニメーションでフレーム番号が時間値として使用されることを意味します。さらに、次のようなエクスプレッション ステートメントを使用するとします。

currentTime = 50;

この場合の 50 は、50 ミリ秒ではなく、フレーム 50 とみなされます。

現在のタイム(Current Time)を徐々に減らすことにより、いったん放出したパーティクルをエミッタが再び吸収するといったエフェクトを作成することができます。このエフェクトの結果を見るには、放出されたパーティクルのキャッシュ データ(Cache Data)をオンに設定してからアニメーションを再生する必要があります。

ヒント:

切断した現在のタイム(Current Time)への接続を再びシーン時間に接続したいときには、パーティクルのシェイプ ノード(トランスフォーム ノードではありません)を選択して、次にnParticles > 時間に接続(Connect To Time)を選択します。

パーティクル ダイナミクスの後でエクスプレッションを実行する

ランタイム エクスプレッションは、ランタイム エクスプレッションの作成時に選択したオプションに応じて、各フレームでダイナミクスの前または後に実行されます。

Maya の旧バージョンでは、パーティクル シェイプのランタイム エクスプレッションを、そのダイナミクスが計算される前または後で実行するかを、ユーザが決定する必要がありました。Maya では、ランタイム エクスプレッションの作成時に、エクスプレッションをダイナミクスの計算前と後のどちらで実行するか指定できます。

たとえば、重力フィールドを使用してメタボール パーティクルをキャラクタ上に落下させ、次にメタボール オブジェクトの位置を示すランタイム エクスプレッションを記述し、そのパーティクルがキャラクタのサーフェスを貫通しないようにしたいとします。このエクスプレッションをダイナミクス前のランタイムとして作成した場合、重力フィールドは位置を制限するエクスプレッションの後で実行されるので、パーティクルがサーフェスを貫通する可能性があります。このような場合は、ダイナミクスの後でエクスプレッションが実行されるように設定して作成またはコピーし、ダイナミクスの残留エフェクトがエクスプレッションに干渉しないようにします。