位置、速度、加速度を操作する

さまざまなパーティクル モーションを生成するには、位置(position)、速度(velocity)、加速度(acceleration)の各アトリビュートにベクトル値を代入します。これらのアトリビュートの操作例については、ランタイム エクスプレッションを記述するを参照してください。

運動物理学を明確に把握している場合を除いて、位置、速度、加速度の各アトリビュートを操作することは避けてください。

ランタイム エクスプレッションを使用してスムーズでランダムなモーションをパーティクルに与えるには、sphrand などの乱数関数を使用してパーティクル シェイプ(particle shape)の加速度アトリビュートに乱数を代入します。加速度の変化が急激な場合でも、常にスムーズなモーションが実現されます。

ランタイム エクスプレッションを使用して細かく揺れるランダムなモーションをパーティクルに与えるには、sphrand などの乱数関数を使用してパーティクル シェイプ(particle shape)の速度アトリビュートまたは位置アトリビュートに乱数を代入します。

乱数関数の使用方法の詳細については、乱数関数の基礎知識を参照 してください。

オブジェクトの位置、速度、加速度がエクスプレッションとダイナミック フィールドによって制御される場合は、エクスプレッションによる効果が最初に適用された後、ダイナミック フィールドのエフェクトが追加されます。

注: オブジェクトの位置、速度、加速度がエクスプレッションとダイナミック フィールドによって制御される場合は、オブジェクトの動きの結果にインフルエンスがあります。エクスプレッションがダイナミック フィールドより先に実行される場合は、そのエクスプレッションによって代入された値を使用してダイナミックが計算されます。エクスプレッションがダイナミック フィールドより後に実行される場合は、前のフレームから引き継がれたアトリビュート値、または入力されたランプによって生成されたアトリビュート値に基づいてエクスプレッションが計算されます。

エクスプレッションをダイナミック フィールドの前後どちらで実行するかを設定するには、パーティクル オブジェクトを選択し、アトリビュート エディタ(Attribute Editor)を表示し、ダイナミクス後のエクスプレッション(Expressions After Dynamics)をオンまたはオフに設定します。

既定の設定の重力(gravity)フィールドに制御されて下降するパーティクルを想定します。重力フィールドによって、各パーティクルには Y 軸方向に 9.8 単位 / 秒の下方加速度が適用されます。すなわち、重力フィールドの既定の加速度は <<0,-9.8,0>> です。

さらに、このパーティクル用に次のようなランタイム エクスプレッションを作成します。

velocity = velocity + <<1,0,0>>;

各フレームを再生すると、最初にエクスプレッションの文に基づいてパーティクルの速度が計算されます。パーティクルの速度は X 軸方向に 1 単位 / 秒の割合で増加します。次に、重力加速度が速度に加算され、その結果に基づいてパーティクルの位置が計算されます。

もちろん、この計算過程はユーザには見えません。計算が完了して初めて、パーティクルが計算結果の位置に表示されます。

アニメーションを再生すると、エクスプレッションによってフレームごとに、定数 <<1,0,0>> がパーティクルの速度に加算されます。このため、時間の経過に伴って、X 軸方向の移動速度が増加します (増加する速度は加速度と呼ばれます)。

加速度アトリビュートの作用は、位置アトリビュートまたは速度アトリビュートの作用とは、重要な点で異なります。各フレームの前に、加速度アトリビュートは <<0,0,0>> に初期化されます。オーバー サンプル レベルが 2 以上である場合は、各タイムステップの前に加速度が初期化されます。

重力の影響を受けないパーティクル オブジェクト(5 つのパーティクルを含む)について次のランタイム エクスプレッションを作成したと仮定します。

acceleration = acceleration + <<0,1,0>>;

このエクスプレッションでは、フレームごとに加速度の値に <<0,1,0>> が加算されるのではなく、各パーティクルの加速度は一定の <<0,1,0>> に留まります。これは各フレームの前に加速度が <<0,0,0>> に初期化されるからです。

既定の設定の重力フィールドをパーティクル オブジェクトに適用した場合は、パーティクルの加速度が <<0,1,0>> + <<0,-9.8,0>> = <<0,-8.8,0>> になります。すなわち、上のエクスプレッションによって設定される加速度は、重力による下方加速度を減少させます。

上のエクスプレッションを次のように変更します。

acceleration = acceleration + sphrand(3);

各フレームの前に加速度が <<0,0,0>> に初期化されるため、この文は次の文と同じ結果になります。

acceleration = sphrand(3);

各フレームを再生すると、最初にエクスプレッションの文に基づいてパーティクルの加速度が計算され、各パーティクルの加速度に sphrand (3)関数の戻り値が代入されます。

sphrand (3)関数はベクトルを提供します。このベクトルの、ランダムに選択されたコンポーネントは、原点を中心にした半径 3 の球状の領域内に存在します。パーティクルはそれぞれ、異なるベクトル値を受け取ります。

最後に、重力フィールドの加速度がエクスプレッションの加速度(sphrand 関数の戻り値)に加算され、各パーティクルが計算結果の位置に表示されます。

エクスプレッション内の sphrand 関数によってランダムな値が生成されるため、各パーティクルの加速度は、重力加速度の方向やマグニチュードとは少しずつ異なります。sphrand 関数は各パーティクルについてフレームごとに実行され、各パーティクルの加速度はフレームごとに異なる値になります。

この例では、加速度アトリビュートとフィールドを組み合わせて新しいカスタム エフェクトを生成する方法を紹介しました。

ヒント:

パーティクル シェイプ(Particle Shape)ノードのアトリビュートに対する全フィールドのエフェクトを無効にするには、各フィールドのダイナミクス ウェイト(Dynamics Weight)アトリビュートを 0 に設定します。