ジオメトリ クエリを使用する

 
 
 

[Geometry Queries]カテゴリのノードは、ジオメトリ オブジェクトの位置を検索したりテストするのに使用できます。位置は、ジオメトリのサーフェイスに「接合」されるので、新しい[GoalLocation]を設定するなど、異なるフレームで位置の値を再計算したりリセットしない限り、ジオメトリが変形したり分解しても同じ相対位置に固定されます。

位置を取得したら、その位置の他のデータを取得できます(「位置でデータを取得する」を参照)。また、ポイントの放出やゴールの設定など、それらの位置を別の目的で使用することもできます。

ジオメトリ クエリは、サブディビジョン レベルでは無視され、ポリゴン メッシュの未分割のサーフェイスで常に機能することに注意してください。

ランダム位置を生成する

[Get Geometry Sample]および[Generate Sample Set]ノードは、ジオメトリック オブジェクトにランダム位置を生成するのに使用できます。

Get Geometry Sample(ジオメトリ サンプルの取得)

[Get Geometry Sample]ノードは、データ セットの各メンバーについてジオメトリに 1 つのランダム位置を生成します。たとえば、パーティクルごとに[GoalLocation]を作成するのに使用できます。

Generate Sample Set(サンプル セットの生成)

[Generate Sample Set]ノードは、ジオメトリにランダム位置のセットを生成します。位置の数は、レートによってコントロールされます。このノードは、一般的にパーティクルを放出する位置を生成するのに使用されます。

サンプルのフィルタリング

[Get Geometry Sample]ノードおよび[Generate Sample Set]ノードのどちらを使用しても、結果をフィルタリングすることができます。その位置で使用可能な任意のブール、整数、またはスカラ属性を使用してフィルタリングできます。たとえば、クラスタのメンバシップに基づいてフィルタリングするには、対応するクラスタの[IsElement]属性を使用します。

既存の属性を使用してフィルタリングする必要があります。ツリーを評価することはできません。必要に応じて、読み込む属性を保存することができます。この場合、読み込んでいるジオメトリで別のツリーを使用することができます。[Invert]チェック ボックスを使用して、フィルタリングの条件を反転できます。

スカラおよび整数の場合は、ゼロ以外の属性があるサンプルが生成されます。ポイントおよびノードに保存された属性は、対応する三角形のポイントまたはノードの値に従って、位置で平均化されます(整数は平均化されてから丸められます)。ポリゴンまたは三角形の値が 0 と 1 の間の場合、その値は保持される位置の比率になります(フィルタリングせずに生成される数と比較されます)。

[Generate Sample Set]ノードでは、[Exact Rate]または[Proportional to Filtered Area]のいずれかを選択できます。[Exact Rate]を指定した場合は、[レート]値で指定されたサンプルの数が、フィルタリング条件が満たされた領域から生成されます。[Proportional to Filtered Area]を指定した場合、[レート]値で指定された場所の数が、サーフェイス全体またはすべてのポイントで生成されてから、フィルタリング条件によってカリングされます。

特定の位置を取得する

次のノードを使用すると、特定の条件に従って位置を取得できます。

  • [Get Closest Location(最も近い位置の取得)]は、ジジオメトリック オブジェクトのサーフェイス上の最も近い位置を戻します。

  • [Raycast(レイキャスト)]は、ジオメトリック オブジェクトの線の交点を戻します。線の方向と開始位置を指定します。

  • [Get Closest Points(最も近いポイントの取得)]は、ポリゴン メッシュ上の最も近い頂点の位置、またはカーブまたはサーフェイス上の最も近いノットを戻します。結果は、データ セットの各メンバーの位置の配列です。[Max Number Points]が 1 の場合も、結果はメンバーごとに 1 つのエレメントの配列のセットのままです。たとえば[GoalLocation]として設定する場合など、位置として使用する前に配列から位置をポッピングする必要があります。「ICE Tree で配列を操作する」を参照してください。

これらのノードは、高い処理コストがかかります。可能な場合は、切捨て距離を有効にして、可能な限り処理コストを削減する必要があります。

これらのノードによって戻された位置に属性は設定できません。たとえばパーティクルへの近接に基づいてメッシュのポイントに属性を設定する場合、メッシュのポイント位置を取得し、他の方法を試す代わりにパーティクルへの距離をテストする必要があります。

位置をルックアップする

他のデータに基づいて位置を戻すノードがいつくか用意されています。

  • [ID to Location]は、ポイントIDが指定された位置を戻します。ID 属性は、初期化されている必要があります(「ID とインデックスを操作する」を参照)。

  • [UV to Location]は、2D ベクトルが指定された、NURBS UV パラメータを指定する位置を戻します。このノードは、V 値が無視されるカーブおよびサーフェイスで機能します。NURBS UV パラメータではなくテクスチャ UV 座標で作業するには、「ICE でのテクスチャ マップ」を参照してください。

位置をテストする

位置をテストするのに使用できるいくつかのノードが用意されています。

  • [Is on Surface]は、位置が指定されたサーフェイスで有効かどうかをテストします。ジオメトリック オブジェクトが[Geometry]ポートに接続されている場合、[Undefined Location]の[Geometry Location]値はfalseを戻します。ジオメトリック オブジェクトが接続されていない場合、[Undefined Location]はtrueを戻し、他の位置はfalseを戻します。

  • [Valid Location]は、[Is on Surface]をベースにしたコンパウンドです。位置がシーンのジオメトリック オブジェクトで有効な場合は、trueを戻します。

  • [Point in Volume]は、位置がジオメトリック オブジェクトのボリュームの内側にあるか外側にあるかをテストします。位置を操作するときは、最初にその位置の[PointPosition]を取得する必要があります。

ジオメトリをグループ化する

[Group Geometry]ノードは、いくつかのジオメトリック オブジェクトを結合します。このノードは、コンパウンドを構築する場合に便利です。たとえば複数のサーフェイスから放出されるようにするために複数のインスタンス ポートを作成することができます。

シーン グループを操作するには、「シーン グループのデータを取得する」を参照してください。

PointNeighbors

[PointNeighbors]属性は、データ セットのポイントに接続されているポイントの位置の配列を戻します。これにより、これらの位置で任意の属性を取得できます。

ポイントの接続されたエッジ、ポリゴン、ノードなど、その他のコンポーネント タイプを取得することはできません。

クラスタを操作する

位置がクラスタ内にあるかどうかをテストするには、その位置のクラスタの[IsElement]属性を取得します。この結果に基づいて、値をフィルタリングしたり、他のアクションを実行することができます。

上図のサブツリーは、ジオメトリ上の最も近い位置がポリゴン クラスタにあるポイントの位置を戻します。[Get Closest Location]ノードへの入力はポイント コンテキストにあるため、ポイント データは[Filter]ノードの[Value]入力に接続できます。

法線を操作する

ICE ツリーは、シェーディングで使用された表示法線にアクセスすることはできません。[PointNormal]属性はスムージングされていない法線を表し、[NodeNormal]属性はスムージングされていない法線を表します。

Undefined Location(未定義の位置)

[Undefined Location]ノードは、未定義の位置を戻します。たとえば、条件に基づいた位置を設定している場合に、このノードを使用して条件を満たさないデータ セットのメンバーの値を「記入」してから、これらの位置を使用する前にツリーの他の場所で有効な位置かどうかをテストすることができます。

接続されていないタイプ位置のポートでは、[Undefined Location]の既定値が使用されます。