ICE フレームワークについて

 
 
 

ICE ツリーの構造

次の図は、単一のパーティクル システムの典型的な ICE ツリーを示しています。

A

データは左から右へ、ノードの出力ポートから次のノードの入力ポートへと「ダウンストリームで」流れます。

各接続はデータ セットを表します。一部のデータ セットにはメンバが 1 つしかありません。たとえば、ポリゴン メッシュの[NbPoints]などです。他のデータ セットには複数のメンバがあります。たとえば、[PointPosition]では、ジオメトリック オブジェクトの各ポイントに 3D ベクトルがあります。

接続のコンテキストに応じて、データはコンポーネントごと、オブジェクトごと、またはノードバインドになります。コンポーネント データが異なる場合は、データ セットの各メンバは個別に処理されます。ただし、1 つの値でコンポーネント データを処理すると、同じ値がすべてのコンポーネントに使用されます。

B

ノードが評価されるようにするには、ノードをルートの[ICETree]ノードに接続する必要があります。ルートの[ICETree]ノードは、オブジェクトのコンストラクション スタックに表示されます。ノード名は変更できます。

C

実行フローは、ルート ノードおよび他の[Execute]ノードの入力ポートに沿って、上から下まで連続的に続きます。

D

[Emit]ノードの[Execute on Emit]ポートに接続されたノードは、現在のフレームに生成される新しいポイントにのみ適用されます。各フレームのすべてのパーティクルに適用されるわけではありません。

E

ルート ノードに接続されているノードは、すべてのフレームで実行されます。エレメントごとに設定されるデータをコントロールするには、上流のブランチで[If]ノードと[Filter]ノードを使用します。シミュレーションのフレームワークでは全パーティクルのフォースが各フレームの最後で 0 にリセットされるため、フレームごとにフォースを再適用する必要があります。

F

[Simulate Particles]ノードは、次の処理を実行します。

  • 質量とフォースに基づいてポイント加速度を計算します。

  • 加速度に基づいてポイント速度を更新します。

  • 速度に基づいてポイント位置を更新します。

[Simulate Rigid Bodies]ノードは[Simulate Particles]に似ていますが、前者ではポイントの衝突と積み重なりも可能です。前述した処理に加えて、向き、角速度、シェイプ、サイズ、スケール、弾性、静摩擦、動摩擦などの属性も考慮されます。

[Simulate Rigid Bodies]ノードではなく、[Simulate Particles]ノードでも、シミュレートされたフレーム フラクションが 1 に設定されます。これによって、同じツリーまたは同じオブジェクトの他のツリーにある他の[Simulate Particles]ノードによってポイントが再シミュレートされるのを回避することができます。

ツリーにシミュレーション ノードを含める必要はありません。必要に応じて、ポイント位置を直接設定することができます。

ICE ツリーとコンストラクション スタック

ルートの[ICETree]ノードは、オブジェクトのコンストラクション スタックに表示されます。同じオブジェクトに複数の ICE ツリーを作成することができ、それぞれのツリー名は変更できます。ICE ツリーはスタック内での位置に応じて他のオペレータとともに評価され、ドラッグ アンド ドロップによって移動できます。

シミュレートされた ICE ツリーを作成すると、[シミュレーション]領域と[シミュレーション後]領域の 2 つの新しいコンストラクション領域が作成されます。ICE ツリーは[シミュレーション]領域に追加されます。シミュレートされた ICE ツリーとシミュレートされていない ICE ツリーの唯一の違いは、スタック内での位置です。シミュレートされたツリーをシミュレートされていないツリーに変更するには、対象のツリーを別の領域([モデリング]領域など)に移動します。また、シミュレートされていないツリーをシミュレートされたツリーに変更するには、対象のツリーを[シミュレーション]領域に移動します。

[シミュレーション]領域

[シミュレーション]領域とその他の領域の違いは、[シミュレーション]領域がインクリメンタル(増分的)である点です。つまり、下位のコンストラクション領域の結果ではなく前のフレームに基づいて計算が行われます。

これは、ICE ツリーだけではなく、[シミュレーション]領域のすべてのオペレータについて同様です。たとえば、[シミュレーション]領域で非 ICE のツイスト デフォーメーションを小さな角度値で適用してシーンを再生すると、オブジェクトは次第にツイストの度合いを増しますが、キーフレームや他のアニメーションが直接定義されることはありません。

シミュレーション環境がアクティブでない場合、[シミュレーション]領域のオペレータはスキップされます。コンストラクション スタックが評価されると、[アニメーション]領域の最上位にあるオペレータの結果が直接[シミュレーション後]領域と[2 次シェイプ モデリング]領域に渡されます。

既定では、シミュレーションの初期状態は、シミュレーション環境がアクティブな最初のフレームの[シミュレーション]領域の下にある領域の結果です。シミュレーションがアクティブである間は、下位の領域は再評価されません。

シミュレーションの最初のフレームは初期状態であるため、[シミュレーション]領域でパーティクルを放出すると、次のフレームで表示されます。

初期状態を手動で設定した場合は、その状態が保存され、シミュレーションの開始時に[アニメーション]領域の最上位にあるオペレータの代わりに使用されます。

間違って[シミュレーション]領域を作成してしまった場合に下位の領域を再評価するには、コンストラクション オペレータ スタックから[Simulation Region Marker]を選択して削除します。[Simulation Region Marker]と[Post Simulation Region Marker]は、一方が削除されると他方も削除されますが、これらの領域内のオペレータは影響を受けず、後から必要な領域に移動することができます。

シミュレーション環境の詳細については「ICE シミュレーション環境」を、初期状態の詳細については「ICE パーティクルシミュレーションの初期状態の作成」を参照してください。

[シミュレーション後]領域

[シミュレーション後]領域は、シミュレーションに適用するあらゆるオペレータに使用できますが、[シミュレーション]領域のようにインクリメンタルな適用を行わない場合や、[2 次シェイプ モデリング]領域のようにシェイプの定義に使用しない場合は除きます。たとえば、[シミュレーション後]領域を使用してパーティクル エフェクトにラティスを適用することができます。

[シミュレーション後]領域は、シミュレーション環境がアクティブでない場合も、常に評価されます。

[シミュレーション]領域外のパーティクル

[シミュレーション]領域以外にあるパーティクルを放出できます。たとえば、[モデリング]領域にある数多くのパーティクルを放出し、その後必要に応じてコンストラクション ヒストリをフリーズすることができます。

他の領域はシミュレートされないため、パーティクルは前のフレームに存在していた領域には追加されず、代わりにスタック内の前のオペレータの結果に追加されます。

[シミュレーション]領域外でも、他のタイプのジオメトリと同様、パーティクルを選択したり移動できます。ただし、[シミュレーション]領域の下位にあるオペレータは、シミュレーション環境がアクティブである間は再評価されません。シミュレーション環境の最初のフレーム(既定の初期状態)に移動し、[MoveComponent]や他のオペレータのエフェクトを確認する必要があります。

ICE 属性

属性は、ICE の中核となる要素です。属性はシーン エレメントに関連付けられたデータであり、 ポイント、エッジ、ポリゴン、ノード(ポリゴン ノードやテクスチャ サンプルとも呼ばれます)などのオブジェクトやコンポーネントに保存できます。ほぼすべての ICE ツリーで、属性の取得と設定が関与します。

[PointPosition]、[PointNormal]、[Weights]、[EdgeLength]、[PolygonArea]などの一部の定義済み属性は、シーン内のエレメントに固有のものです。[PointPosition]や[Weights]などの一部の固有の属性は、ICE ツリーで変更できます。[PointPosition]、[EdgeLength]、[PolygonArea]など、その他の固有の属性は直接変更できません(ただし、[PointPosition]などの他の属性が変更されると、その影響を受けます)。

固有の属性に加えて、[PointVelocity]、[Force]、[Mass]、[Size]などの他の定義済み属性もあります。これらの属性は動的なもの、つまり設定されるまでは存在しない属性です。一部のノードとコンパウンドでは一定の属性が自動的に設定されますが、それ以外の属性を設定するかどうかはユーザ次第です。たとえば、[Add Point]ノードでは[ID]属性が設定され、[Add Point]ノードを含むさまざまな[Emit]コンパウンドでも[Age]などの属性が設定されますが、[取得]>[プリミティブ]メニューからポイント クラウドを取得した場合は、これらの属性は設定されません。[ID]を除き、すべての動的属性を設定できます。

一部のノードとコンパウンドでは、特定の属性を名前で識別します。たとえば、[Simulate Particles]ノードは、[Force]、[Mass]、および[PointVelocity]を使用して[PointPosition]を更新します。

定義済みの属性に加えて、ツリーにカスタムの動的属性を設定し、そのデータを自由に使用することもできます。実際、[AgeLimit]や[StateID]など、用意されているコンパウンドの一部の属性は定義済みのものではなく、そのコンパウンドで特定の用途に使用されているカスタム属性です。

詳細については、「ICE ツリーでデータを取得し設定する」を参照してください。