フレームおよび時間を操作する

 
 
 

時間データを取得する

[Get Data]カテゴリには、時間データを戻すノードがいくつかあります。

  • [Current Frame]は、ローカルのフレーム番号を戻します。ただし、[グローバル時間]がオンの場合はグローバル フレームを戻します。

  • [Current Time]は、ローカル時間を秒単位で戻します。ただし、[グローバル時間]がオンの場合はグローバル時間を戻します。

  • [Simulation Step]は、フレームの長さを秒単位で戻します。この結果は、PlayControl.Rate を取得し、計算を自分でする場合と同じになります。

シミュレーション中は、ローカル時間はシミュレーションがアクティブになっている時間と同じになります。シミュレーションがアクティブになっている最初のフレームは 0 で、初期状態に対応します。

グローバル フレームは、常に再生パネルの現在のフレームの値になります。

時系列

パーティクルの[時系列]属性は、秒単位で設定され、シミュレーション環境によってフレームごとに自動的に増えます。新しいポイントの時系列は、[Emitter]コンパウンドによってフレームの一部に自動的にランダマイズされます。

[Clone Point]ノードおよびそれが含まれるコンパウンド(発生コンパウンドなど)は、[時系列]属性をコピーします。新しくクローンされたポイントに別の時系列(存続時間)を設定する場合は、[On Creation]ポートまたは[Execute on Spawn]ポートを使用して設定する必要があります。

サブフレームのシミュレーション

シミュレーションは、フレーム単位で計算されます。ただし、フレームの時間は、パーティクルの放出や衝突を処理する場合は特に、長くなることがあります。多くの場合、1 つのフレームよりも小さくなるように時間をスライスすることを考慮する必要があります。

[SimulatedFrameFraction]は、ポイントが既にシミュレートされているフレームの一部を保存します。[Simulate Particles]ノードは、時間の長さが(1–SimulatedFrameFraction)*SimulationStep と同じパーティクルに影響を与えてから、属性を 1.0 に設定するので、パーティクルは残りのフレームの他の[Simulate Particles]ノードによって影響を受けません。[SimulatedFrameFraction]は、各フレームの先頭でゼロにリセットされます。

[Emitter]コンパウンドは[SimulatedFrameFraction]を自動的に初期化し、(1 – Age/SimulationStep)に設定するため、最初のフレームで、パーティクルがその時系列に比例する間隔でのみ移動します。このため、パーティクルは一度に放出せずに、フレームにわたって連続して放出しているように見えます。

[SimulatedFrameFraction]属性は、直接設定することができます。たとえば、[Basic Collide]ノードを使用して、ジオメトリで衝突のテストをしているとします。ポイントを衝突させる場合、[SimulatedFrameFraction]の古い値(ここでは「OldSFF」とします)をカスタム属性に保存できます。[SimulatedFrameFraction]を[Basic Collide]ノードから返される[Hit Frame Fraction]に設定し、衝突の瞬間までシミュレーションします。次に、残りのフレームで状態を変更したり他の作業を行う前に、[SimulatedFrameFraction]を[OldSFF + Hit Frame Fraction]を設定します。

[Get Remaining Frame Fraction]コンパウンドおよび[Get Remaining Seconds in Frame]コンパウンドは、サブフレームのシミュレーションを操作する場合にも便利です。