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 ビット固定小数点で十分な精度が得られます。