On this page |
概要 ¶
インスタンス化することで、レンダリング時に 必要な数だけの ソースオブジェクトをコピーすることができます。 これは、膨大な数のオブジェクトの“実際の”コピーを作成するよりも非常に高速で、メモリ使用量も少なく済みます。
インスタンス化によって、ジオメトリオブジェクトのポイントの位置に基づいて、レンダリング時にシーン内に膨大な数のライトを簡単に作成することができます。
基本セットアップ ¶
-
ポイント上にインスタンス化させたい“テンプレート”ライトを作成します。
-
Instanceサブネットワークを作成します。
Instanceオブジェクトのパラメータで:
-
Instance Object パラメータにライトのパスを設定します(ネットワークエディタからLightノードをそのパラメータ上にドラッグします)。
-
Point Instancing を“Full point instancing”に設定します。
-
-
Instanceサブネットワーク内で、ライトをインスタンス化させたいポイントを生成します。
このサブネット内にポイントを置きたくないのであれば、Instanceオブジェクト内にObject Mergeノードを使用することで、他の場所から既存のポイントを取得することができます。
Tip
Instanceオブジェクトは、そのポイントポジションを基準にソースオブジェクトのトランスフォームを適用します。ソースオブジェクトが原点にない場合は、これは予期しない結果を招きます。
テンプレートライトが光を放射しないように、レンダーノードの Candidate Lights パラメータからそのテンプレートライトを除外してください:
-
メインメニューから Render ▸ Edit Render Node ▸ あなたのレンダーノード を選択します。
インスタンス毎にライトパラメータを可変させる方法 ¶
ポイント上のアトリビュートに基づいてライトパラメータを可変させることができます。 例えば、ポイントにカラーを付けることで、インスタンス化されたライトのカラーにそのポイントカラーを使用することができます。
“テンプレート”ライトオブジェクトに対してpointエクスプレッションを使用することで、インスタンス化されるポイントからアトリビュート値を取得することができます。 インスタンス化されるポイントジオメトリのパスをnode引数として使用し、instancepointをpoint_number引数として使用します。
point()エクスプレッションは、他のジオメトリのアトリビュート値を取得します。
point(surface_node, point_number, attribute, index)
surface_nodeはサーフェスノードのパスです。例えば、"/obj/geo1/grid1"
。point_numberはアトリビュートを読み込むポイント番号です。
インスタンス化している時は、instancepointを使用することで、現在インスタンス化されているポイントの番号を取得することができます。
attributeはアトリビュートの名前(例えば、ディフューズカラーならCd
)です。
空間内のポイントの位置を意味するアトリビュートには、P
とPw
の2つの特別なアトリビュートがあります(Pw
はポジションのWコンポーネントにアクセスすることができます)。
辞書アトリビュートのコンポーネントは.
を使って解決することができます。
例えば、param.key
はparam
辞書アトリビュート内のkey
の値を返します。
indexには、ベクトル、カラー、配列などの複数コンポーネントアトリビュートのコンポーネント位置を指定します。
例えば、そのアトリビュートがカラーであれば、0
のindex
値は赤、1
は緑、2
は青のコンポーネントを返します。
例えば、インスタンス化されるポイントのカラーをライトのカラーとして使用するには、テンプレートライトの Color パラメータを以下のように設定します:
赤 |
|
---|---|
緑 |
|
青 |
|