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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    0

    0

    50

    100

    100

    110

    150

    200

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

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

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

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

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

カレント タイム(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 では、ランタイム エクスプレッションの作成時に、エクスプレッションをダイナミクスの計算前と後のどちらで実行するか指定できます。

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