ICENodeDefオブジェクト

 
 
 

ICENodes オブジェクトは、ICENodeDef オブジェクトを使用して設定されます。ICENodeDef オブジェクトは、API に入出力ポートの定義(ICENodeDef::AddInputPortICENodeDef::AddOutputPort)、グループ(ICENodeDef::AddPortGroup)を提供し、スレッド モデル(ICENodeDef::PutThreadingModelICENodeDef::GetThreadingModel)を指定します。

各カスタム ICENode は、少なくとも 1 つの出力ポートを持ちますが、入力ポートはゼロの場合もあります。 各ポートは、読み書きする必要のある特定のデータ用に設定する必要があります。 ICENodePorts をグループで定義する必要があります。これには無制限のポート数を含めることができます。 通常、同じ論理グループにポートを再グループ化しますが、グループごとに 1 つのポートを定義してもかまいません。 同じグループに入力ポートと出力ポートを混在させることはできません。

ポートのタイプ

入力ポートと出力ポートは、以下の 3 つのカテゴリのタイプ セットで定義された強力なタイプ分類システムを使用します。

  • データ タイプ

    ポートでサポートされるデータのタイプ。 使用可能なデータ タイプのリストについては、「siICENodeDataType」を参照してください。

  • 構造タイプ

    Evaluate コールバックに渡したときに、データを保存する方法。 使用可能な構造タイプのリストについては、「siICENodeStructureType」を参照してください。

  • コンテキスト タイプ

    データが評価される対象のエレメントを指定します。 使用可能なコンテキスト タイプのリストについては、「siICENodeContextType」を参照してください。

ポートのタイプは 3 つの値のセットで指定されます。1 つの値が各カテゴリを表します。次に、その例を示します。

// single array of vector3 elements evaluated for each mesh vertex
siICENodeDataVector3 + siICENodePortStructureSingle + siICENodeEvaluationContextComponent0D:

// single array of booleans evaluated per object
siICENodePortDataBool + siICENodePortStructureSingle + siICENodeContextSingleton:

// 2D array of long values evaluated per mesh polygons
siICENodePortDataLong + siICENodePortStructureArray + siICENodeEvaluationContextComponent2D:

カスタム(ユーザ定義)データタイプ

ユーザ定義タイプを作成して、カスタム ノード ポートを定義する他のデータ タイプと同じように使用できます。 通常、カスタム タイプは ICE でユーザ定義データ(バイナリ データなど)をグラフ内に継承させるために使用されます。 カスタム タイプは、ICENodeDef オブジェクトを使用して定義でき、グローバル識別子(文字列名)、基本データ タイプ(siICENodeDataCustomType)およびポート接続ハンドル カラーで識別されます。

ポートのポリモーフィズム

通常、同じカテゴリのポート タイプを組み合わせて、ポートのポリモーフィズムを行うことができます。 ポリモーフリズムとは、ICENode ポートの複数タイプをサポートする機能を指します。 これが役に立つのは、入力データが汎用的に使用される汎用ノードを定義する必要がある場合です(詳細については、ポリモーフィズム処理のセクションを参照)。 AddInputPort メソッドおよび AddOutputPort メソッドでビット単位の OR オペレータを使用して、ポートに複数のタイプを割り当てることができます。

ポート コンストレイント マップ

コンストレイント マップは、複数の入力ポートと出力ポートが同じデータ タイプ、構造タイプ、またはコンテキスト タイプを使用するように強制します。 たとえば、 マッピングが入力ポート A と入力ポート B の コンテキストを siICENodeContextSingleton に強制することに使用できます。 状況によっては、出力ポートの場合と同様、入力ポートどうしの間で制限を課すことができます。 マッピングをセットアップするには、ポートのタイプまたは構造を整数と関連付けます。一致する必要のあるポートに同じ整数を使用するか、制限が不要な場合は ULONG_MAX を使用します。 AddInputPort および AddOutputPort でポートを定義するときにポート コンストレイントが指定されます。

一意の識別子(ID)

ポートとグループは一意の識別子で定義する必要があります。 ICENodeDef では、重複する ID が使用されるとエラーが発生します。 確実に一意の識別子を使用するための簡単な方法は、列挙を使用することです。 一意の ID を使用すると、ICENode ポートまたはグループが削除されたり、新規に追加された場合に、完全な下位互換性が確保されます。 特定の ICENode の前のバージョンで保存された古いシーンのロードに影響を与えることなく、ポートの追加や削除を実行できます。

重要:

下位互換性を維持するため、列挙 ID を変更することはできません。 ID が一度使用されると、その ID は、ICENode が有効な間は変更できません。またその ID を別のポートやグループで再利用することはできません。 新しいポートが必要な場合は、列挙の最後にのみ新しい ID を追加できます。