This is the documentation for Enlighten.
6.1.4. インスタンス オブジェクト
.scene ファイルのインスタンス オブジェクトを指定するには instance 要素を使用します。
ラジオシティ インスタンス
エンジン メッシュをラジオシティ計算に含めるには、シーン内で一意の name 属性を持つ instance 要素を追加します。
各 instance 要素の geometry 属性がジオメトリ オブジェクトを参照していることを確認します。
position と rotation 属性を使用してインスタンスのワールド トランスフォームを設定します。
type 属性を設定します:
- Radiosity:ライトマップを使用してライティングします。
- Probe Radiosity:プローブを使用してライティングします。
zone 属性を使用してインスタンスをできる限り少ないグループにまとめます。小さいワールドでは、シーンのすべてのインスタンスに単一のゾーンを使用します。ワールドがストリーミングのためにいくつかのまとまりに分割されている場合、zone 属性を使用してそれぞれのまとまりについて、インスタンスを単一のゾーンにグループ化します。
ライトマップを使用してライティングする場合、各インスタンスは最大 512x512=262,144 ピクセルのピクセル数を持つことができます。ワールドにこのような数のピクセルを必要とする単一のインスタンスが含まれている場合、プリコンピュートはエラーを返します。これを防ぐには、そのような非常に大きなインスタンスを少数のまとまりに分割します。
インスタンス GUID
instanceGuid 属性を設定して、ラジオシティ インスタンスを追加したオリジナルのエンジン メッシュを簡単に識別できるようにします。属性値は 128 ビットの 16 進文字列です。
1 つのゾーンに同じ instanceGuid を有する 2 つのインスタンスを含めることはできません。
エンジンですでに各エンジン メッシュに対して一意の 128 ビット値が生成されている場合は、その値を使用することをお勧めします。
エンジンでエンジン メッシュを識別するために文字列が使用されている場合は、適切なハッシュ関数で算出された文字列の 128 ビット ハッシュの使用をお勧めします。
適切なハッシュ関数で算出された 128 ビット ハッシュであれば、コリジョンが発生する可能性は (0 ではありませんが) 極めて低くなります。
instanceGuid に変更があった場合、プリコンピュートを再実行する必要があります。エンジン メッシュの名前を変更した後にプリコンピュートすることを避けるには、各エンジン メッシュで不変の Enlighten GUID を維持してください。編集ツールでこの Enlighten GUID を生成し、ソース アセットとともに保存します。
プリコンピュート間ではインスタンス識別子を変更しないことを強くお勧めします。プリコンピュートを実行するたびに新しいランダムな GUID を生成することはお勧めしません。
除外されたインスタンス
メッシュがラジオシティ計算に含まれない場合、シーンに追加する必要はありません。ただし、シーンが GeoRadiosity にロードされた際に表示されるようにそのようなインスタンスを追加した方が便利である場合もあります。
そのようなメッシュを追加するには、一意の name の instance 要素を追加し、type 属性を Fully Dynamic に設定し、ジオメトリ オブジェクトとワールド トランスフォーム属性のみを追加します。
ラジオシティ パラメーター
ラジオシティ パラメーターの間接光の解像度を制御するには、ラジオシティ パラメーターの parameterSet 要素の名前に paramSet 属性を設定します。
同じゾーンのすべてのインスタンスに同じ paramSet を使用する必要があります。
シーン例
以下のシーンファイルは単一のインスタンスを含んでいます。
<?xml version="1.0" encoding="utf-8"?> <scene name="Cornellbox" version="1"> <instance name="Cornellbox" instanceGuid="0000000000000000" systemId="Cornellbox" paramSet="Interior" geometry="Cornellbox" type="Radiosity" position="0 0 0" rotation="0 0 0 1" /> </scene>
インスタンスのスケール
ライトマップを使用してライティングしているインスタンスの場合、インスタンスにスケール ファクターが適用されている場合に望まない動作が発生する場合があります。
- 負のスケール ファクターの場合、必要とする間接光の解像度よりもライトマップ ピクセルが小さくなります。
- 非整数のスケール ファクターの場合、必要とする間接光の解像度とライトマップ ピクセルが一致しない可能性があります。
- 不均一なスケールでは、ライティング アーティファクトが発生する可能性のある非正方形ライトマップ ピクセルが生成されます。
- 大きな正のスケール ファクターの場合、ライトマップに無駄な空間が発生します。
このような動作を防ぐには、シーンのインスタンスにスケール ファクターがある場合にスケール ファクターをジオメトリ オブジェクトにベイクすることをお勧めします。シーンに同じジオメトリ オブジェクトのインスタンスが複数含まれ、それらが異なるスケール ファクターを有する場合、固有のスケール ファクターごとに新しいジオメトリ オブジェクトを作成します。
一般的に 1 から 4 の間の均一のスケール ファクターを適用すれば安全です。インスタンスにこのようなスケール ファクターを適用するには、position と rotation 属性を transform 属性に置き換えます。
不均一または負のスケールの transform 属性への使用はお勧めしません。
マテリアル
既定のインスタンスでメッシュ オブジェクト)のマテリアル属性をオーバーライドするには、インスタンスに materialOverrides 子要素とそれに対応する meshName 属性を追加します。materialOverrides 要素は、メッシュ オブジェクトと同じ方法で定義された material 要素を含みます。
以下の例は、メッシュ Flag
のマテリアルのプロパティを ID 0 でオーバーライドするインスタンス Flagpole1
を示しています。
<instance name="Flagpole1" instanceGuid="0000000000000000" systemId="System1" paramSet="High" geometry="Flagpole" type="Radiosity" position="0 0 0" rotation="0 0 0 1" /> <materialOverrides meshName="Flag" > <material id="0" backfaceBehaviourType="doubleSided"/> </materialOverrides> </instance>
メッシュとインスタンスの両方でマテリアル属性を指定した場合、インスタンスの属性がメッシュの属性をオーバーライドします。
各属性について、Enlighten は以下から値を取得します。
- 指定されたインスタンスのマテリアル属性、指定されていない場合は…
- 指定されたメッシュのマテリアル属性、指定されていない場合は…
- デフォルト