This is the documentation for Enlighten.

6.4.1. ライトマップ UV データ

プリコンピュートにより、各ラジオシティ システムライトマップ UV データが生成されます。

インスタンスのライトマップ UV

ラジオシティ システムのすべてのインスタンスのライトマップ UV データを抽出するには、IPrecompPackedSystem オブジェクトをロードします。

// path: "precomp/[system name].pas"
const Enlighten::IPrecompPackedSystem* packedSystem
    = Geo::LoadInterfaceCompressed<Enlighten::IPrecompPackedSystem>(path);

このシステム内のインスタンスのライティングにプローブが使用されている場合、システムにはライトマップ UV データがなく、IPrecompPackedSystem::GetOutputWidth が 0 を返します。

各インスタンスのライトマップ UVの情報を取得するには、IPrecompPackedSystem::GetPackedInstances を呼び出します。

各 IPrecompPackedInstance オブジェクトは、システム内のインスタンス オブジェクトに対応します。

for(Geo::s32 i = 0; i != packedSystem->GetNumInstances(); ++i)
{
    const Enlighten::IPrecompPackedInstance* packedInstance = packedSystem->GetPackedInstances()[i];
}

IPrecompPackedInstance::GetInstanceGuid を呼び出してインスタンス GUIDを取得し、対応するインスタン オブジェクトの検出にこれを使用します。

共有されたライトマップ UV

同じジオメトリ オブジェクトを参照するインスタンス間では、ライトマップ UV を共有することをお勧めします。

すぐに使用するには、各インスタンスで一意の UV を使用します。これを行うには、IPrecompPackedInstance::GetOutputUvArray を呼び出し、各インスタンス用に事前に変換された UV を取得します。

共有された UV データを取得するには、IPrecompPackedGeometry オブジェクトをロードします。

// path: "precomp/[geometry name].pag"
const Enlighten::IPrecompPackedGeometry* packedGeometry
    = Geo::LoadInterfaceCompressed<Enlighten::IPrecompPackedGeometry>(path);

IPrecompPackedGeometry::GetOutputUvArray を使用して共有されたライトマップ UV を取得し、IPrecompPackedInstance::GetUvTransform を使用して各インスタンスの UV トランスフォームを取得します。

IPrecompPackedInstance と IPrecompPackedGeometry にあるメッシュは、インスタンスが参照するジオメトリ オブジェクトと同じ順序で保存されます。

出力 UV アレイ内の頂点は、入力メッシュの頂点とまったく同じ形で配置されます。

レンダリングされたメッシュと同じ配置の頂点配列を、それぞれの入力メッシュ オブジェクトに指定した場合、UV アレイで頂点の順番を再度調整する必要はありません。Enlighten ライトマップでメッシュをレンダリングするには、単に UV アレイを新しい頂点データ ストリームとして追加します。

UV データを抽出する際、ゲームでロードとレンダリングができる、永続的な形式に変換します。16 ビット固定小数点で十分な精度が得られます。