オブジェクトのコンストラクションスタックは複数の異なる領域に分割されており、オペレータの評価はユーザが実行しているタスクに応じたさまざまな方法で行われます。従来からある領域は、モデリング、アニメーション、シェイプモデリング、2 次シェイプモデリングです。ただし、シミュレート ICE ツリーで作業している場合は、さらに 2 つのコンストラクション領域(シミュレーションとポストシミュレーション)が追加されます。
シミュレーションとポストシミュレーションの各領域は ICE シミュレーションでのみ使用され、シミュレート ICE ツリーノード(オペレータ)を作成すると自動的に表示されます。現時点では、パーティクルとデフォーメーションのみにシミュレートされた[ICETree]ノードを作成できます。
シミュレーション領域とポストシミュレーション領域の詳細については、「ICE ツリーとコンストラクション スタック」を参照してください。
「シミュレートされた」とは、現在のフレームの結果が、その後のコンストラクション領域の結果ではなく、前のフレームの結果によって決まる、という意味です。この点で、シミュレーションはオブジェクトに対する他のタイプの修正と区別されます。たとえば、球でプッシュデフォーメーションを使用した場合、各フレームで[Push]オペレータはデフォーメーション前の球を取得し、プッシュを適用します。1フレーム前に進めると、[Push]オペレータは再度デフォーメーション前の球を取得し、同じプッシュを適用します。
プッシュデフォーメーションを時間の経過に応じて修正する唯一の方法は、そのパラメータをアニメートすることです。ただし、[Push]オペレータがシミュレーション領域にある場合は、前のフレームでプッシュされた球のポイントの結果が各フレームで取得され、さらにこれらの結果が押し出されます。シミュレートされたプッシュを再生すると、アニメーションを定義しなくても、球が徐々に膨らむのがわかります。デフォーム前の球に戻る唯一の方法は、最初のフレームに戻ることです。
シミュレーションがアクティブである場合、シミュレーション領域の下にある領域は再評価されません。つまり、アニメーション領域にオペレータが存在する場合、それらのオペレータはシミュレーションがアクティブになっても再評価されません。シミュレーションではなくアニメーションオペレータを使用するように戻す場合は、スタックからシミュレーションマーカーを選択して削除し、シミュレーション領域をなくします。
[Simulate Particles]ノードと[Simulate Rigid Bodies]ノード
ICEでは、[Simulate Particles]ノードと[Simulate Rigid Bodies]ノードを使用してパーティクルをシミュレートできます。それぞれの説明を次に示します。
[Simulate Particles]ノードは、各フレームで各パーティクルの位置と速度を更新する「標準的な」パーティクルノードで、 次の処理を実行します。
シミュレート済みフレームフラクションを1に設定します。ポイントですでにシミュレートされているフレームの一部は、[SimulatedFrameFraction]属性によって定義されます。この値を1に設定することで、同じツリーまたは同じオブジェクトの他のツリーにある他のシミュレートノード([Simulate Rigid Bodies]ノードなど)によってポイントが再シミュレートされるのを回避することができます。
このノードを使用するエミッタコンパウンドは[SimulatedFrameFraction]を(1 – Age/SimulationStep)に自動的に設定するため、最初のフレームで、パーティクルがその時系列に比例する間隔でのみ移動します。このため、パーティクルは一度に放出せずに、フレームにわたって連続して放出しているように見えます。
放出での[Simulate Particles]ノードの使用については、「基本的なパーティクル放出の作成」を参照してください。
[Simulate Rigid Bodies]ノードは、パーティクルをシミュレートするという点で[Simulate Particles]ノードに似ていますが、このノードを使用すると、パーティクルをPhysXリジッドボディにすることもできます。リジッドボディとは、衝突時にも変形しないオブジェクトのことです。このノードは、リジッドボディ属性(弾性、摩擦、シェイプ、サイズ、スケールなど)に基づいて、前のフレームのパーティクルの位置、速度、向き、角速度を更新します。
このノードを使用することで、パーティクルはそのシェイプに基づいてお互いに衝突でき、また障害物として設定されている他のオブジェクトとも衝突できます。また、[Simulate Rigid Bodies]ノードが含まれるオブジェクトのポイント間に、それぞれのICEツリーでスプリングとダンパーを作成することもできます。
[Simulate Particles]ノードとは異なり、[Simulate Rigid Bodies]ノードには[SimulateFrameFraction]属性がありません。これは、PhysXダイナミクスエンジンが、衝突の検出に関してフレーム全体だけを使用し、フレームフラクションに対しては動作しないためです。
[ICETree]ノードに接続するシミュレートノードは、1つだけにする必要があります。つまり、[Simulate Rigid Bodies]が[ICETree]ノードに接続されている場合は、[Simulate Particles]ノードも同時に接続する必要はありません。
[Simulate Rigid Bodies]ノードに加えて[Simulate Particles]ノードを接続する必要があるのは、リジッドボディとして動作するパーティクルと「通常の」パーティクルとして動作するパーティクルが混在し、ある時点で各タイプのシミュレーションを切り替える場合だけです(状態システムまたは[If]ノードを使用して切り替える条件を設定する場合など)。
[Simulate Rigid Bodies]ノードの詳細については、「ICE リジッドボディ」を参照してください。