パーティクルのダイナミクスを制御する方法にはいくつかあります。
各パーティクル オブジェクトには、エフェクトが始まる時間を設定する開始フレーム(Start Frame)アトリビュートがあります。たとえば、パーティクル オブジェクトに対する渦のエフェクトを任意のフレームまで遅らせることができます。
別の例として、床上の塵パーティクルの中を歩くキャラクタを作成するとします。塵は、重力、床の衝突オブジェクト、およびキャラクタの足の大気(航跡)フィールドに接続されています。ここで、フレーム 100 から足の大気フィールドの作用によって塵が舞い散るようにしたいとします。
塵の開始フレームを 100 に設定して、塵のダイナミック計算を必要になるまで遅らせることができます。これによりシーンの再生が高速化され、重力と衝突エフェクトによってパーティクルがわずかに跳ね返るのを防ぐことができます。
また、最初の 100 フレームまでに対してダイナミック(Is Dynamic)をオフに設定することによって、塵のダイナミック計算が実行されないようにすることもできます。ただし、開始フレームを 100 に設定すると、フレームをクリックしたりタイム スライダをスクラブするときに、最初の 100 フレームのランナップ計算を待たなくてもすむようにします。
パーティクル オブジェクトを作成したり、エミッタがパーティクル オブジェクトを放出するときには、開始フレームは既定で 1.0 に設定されます。この値は、現在設定されている時間単位における 1 フレームの存続期間です。
パーティクル オブジェクトの開始フレームを設定するには、パーティクル オブジェクトを選択し、次にアトリビュート エディタ(Attribute Editor)の時間アトリビュート(Time Attributes)セクションで開始フレームの値を入力します。
ダイナミック アニメーションでは、ユーザはオブジェクトに実行させたいアクションを指定するだけで、オブジェクトをどのようにアニメートするかはソフトウェアにまかせます。従来は、このアニメーション方法と他のアクションをシンクロするのは困難でした。たとえば、クレッシェンドする音にシンクロして、放出されたパーティクルの速度を上げていくのは困難でした。
Maya には、このような問題を解決する機能が備わっています。それぞれのパーティクル オブジェクトには、パーティクル エフェクトを遅くしたり早めたりするようにアニメートすることができる現在のタイム(Current Time)アトリビュートがあります。このアトリビュートは独立した時刻の値を含みます。基本的には、パーティクル オブジェクトのクロックを遅らせたり早めたりして、作用するダイナミクスを遅らせたり早めたりします。詳細については、現在のタイム(Current Time)アトリビュートについてを参照してください。
エミッタがパーティクルを上に向かって放出する、150 フレームから成るアニメーションがあるとします。以下の手順では、現在のタイムにキーを設定してパーティクルの速度を制御する方法を説明します。
アニメーションの最初(フレーム 0)では、放出されたパーティクルの現在のタイムがシーン時間とシンクロ化されます。どちらの値も 0 です。
フレーム 50 では、現在のタイムは、シーン時間の倍の 100 に設定されています。フレーム 0 からフレーム 50 までは、放出されたパーティクルのアクションの時間は、シーン時間の倍になります。したがって放出されたパーティクルは、現在のタイムを操作しない場合に比べて 2 倍のスピードで動きます。
フレーム 100 で、現在のタイムは 110 にキー設定されます。これにより、フレーム 50 から 100 まで、シーン時間に関連する放出パーティクルの時間の経過が遅くなります。放出されたパーティクルは、現在のタイムを操作しないときよりも遅いスピードで動きます。
フレーム 150 では、現在のタイムは 200 に設定されているので、放出されたパーティクルの時間の進み方が再び速くなります。パーティクルは再び速く移動します。
現在のタイム(Current Time)アトリビュートについて
アニメートされたパーティクル オブジェクトは、それぞれ独自のクロックに従って移動します。このクロックを、タイム スライダと同期して動くシーン クロックから独立させることができます。
各パーティクル オブジェクトには、そのクロック値を含んだ現在のタイム(Current Time)アトリビュートがあります。シーン クロックの時間変数とは異なり、キー、エクスプレッション、またはその他のアニメーション手法を使用して、現在のタイムアトリビュートの値を設定することができます。シーン クロックが一定の増分を持つタイム キーパーであるのに対し、パーティクル オブジェクトのクロックは、現在のタイムアトリビュートを使用して設定可能な可変の増分を持っています。この増分を変化させることにより、パーティクルのダイナミック エフェクトのスピードを増減できます。
パーティクル オブジェクトでアニメーションが起こるには、その現在のタイムにシーンの再生に従って変化する入力接続が必要です。既定では、シーンの既定の時間変数が現在のタイムへの入力を提供します。
非パーティクル シェイプのエクスプレッションを使用して現在のタイム(Current Time)に値を指定すると、この値はウィンドウ > 設定/プリファレンス > プリファレンス(Window > Settings/Preferences > Preferences)ウィンドウの設定(Settings)で指定された時間(Time)単位のタイプとみなされます。fps レート、たとえばフィルム(24 fps) (Film (24 fps))を選択した場合、現在のタイムの値はフレームとみなされます。
作業単位(Working Units)の時間値をフィルム(24 fps) (Film (24 fps))に設定したとします。これは、アニメーションでフレーム番号が時間値として使用されることを意味します。さらに、次のようなエクスプレッション ステートメントを使用するとします。
currentTime = 50;
この場合の 50 は、50 ミリ秒ではなく、フレーム 50 とみなされます。
現在のタイムを徐々に減らすことにより、いったん放出したパーティクルをエミッタが再び吸収するといったエフェクトを作成することができます。このエフェクトの結果を見るには、放出されたパーティクルのキャッシュ データ(Cache Data)をオンに設定してからアニメーションを再生する必要があります。
切断した現在のタイム(Current Time)への接続を再びシーン時間に接続したいときには、パーティクルのシェイプ ノード(トランスフォーム ノードではありません)を選択して、次にパーティクル > 時間に接続(Particles > Connect to Time)を選択します。
パーティクル ダイナミクスの後でエクスプレッションを実行する
ランタイム エクスプレッションは、ランタイム エクスプレッションの作成時に選択したオプションに応じて、各フレームでダイナミクスの前または後に実行されます。
Maya の旧バージョンでは、パーティクル シェイプのランタイム エクスプレッションを、そのダイナミクスが計算される前または後で実行するかを、ユーザが決定する必要がありました。Maya では、ランタイム エクスプレッションの作成時に、エクスプレッションをダイナミクスの計算前と後のどちらで実行するか指定できます。
たとえば、重力フィールドを使用してメタボール パーティクルをキャラクタ上に落下させ、次にメタボール オブジェクトの位置を示すランタイム エクスプレッションを記述し、そのパーティクルがキャラクタのサーフェスを貫通しないようにしたいとします。このエクスプレッションをダイナミクス前のランタイムとして作成した場合、重力フィールドは位置を制限するエクスプレッションの後で実行されるので、パーティクルがサーフェスを貫通する可能性があります。このような場合は、ダイナミクスの後でエクスプレッションが実行されるように設定して作成またはコピーし、ダイナミクスの残留エフェクトがエクスプレッションに干渉しないようにします。