さまざまなパーティクル モーションを生成するには、位置(position)、速度(velocity)、アクセラレーション(acceleration)の各アトリビュートにベクトル値を代入します。これらアトリビュートの操作例については、 ランタイム エクスプレッションを記述するを参照してください。
運動物理学を明確に把握している場合を除いて、位置、速度、アクセラレーションの各アトリビュートを操作することは避けてください。
ランタイム エクスプレッションを使用してスムースでランダムなモーションをパーティクルに与えるには、sphrand などの乱数関数を使用してパーティクル シェイプのアクセラレーション アトリビュートに乱数を代入します。アクセラレーションの変化が急激な場合でも、常にスムースなモーションが実現されます。
ランタイム エクスプレッションを使用して細かく揺れるランダムなモーションをパーティクルに与えるには、sphrand などの乱数関数を使用してパーティクル シェイプの速度アトリビュートまたは位置アトリビュートに乱数を代入します。
乱数関数の使用方法の詳細については、 乱数関数の基礎知識を参照してください。
オブジェクトの位置、速度、アクセラレーションがエクスプレッションとダイナミック フィールドによって制御される場合は、エクスプレッションによる効果が最初に適用された後、ダイナミック フィールドのエフェクトが追加されます。
エクスプレッションをダイナミック フィールドの前後どちらで実行するかを設定するには、パーティクル オブジェクトを選択し、アトリビュート エディタを表示し、ダイナミクス後のエクスプレッション(Expression 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 関数は各パーティクルについてフレームごとに実行され、各パーティクルのアクセラレーションはフレームごとに異なる値になります。
この例では、アクセラレーション アトリビュートとフィールドを組み合わせて新しいカスタム エフェクトを生成する方法を紹介しました。