This is the documentation for Enlighten.

6.3.2. ライトマップ UV の共有

同じメッシュの多くのインスタンスを効率的にレンダリングするには、多数の描画で Enlighten ライトマップ UVのセットを共有することをお勧めします。

Enlighten では、ジオメトリ オブジェクトごとに 1 つのライトマップ UV セットが作成されます。2 つのインスタンスで使用されるメッシュのライトマップ UV のセットを 1 つ生成するには、両方のインスタンスが使用するジオメトリ オブジェクトを 1 つ作成します。

Enlighten は、各インスタンスに対してライトマップ UV トランスフォームを作成します。共有ライトマップ UV バッファを持つインスタンスを描写する際、インスタンスのライトマップ UV トランスフォームを頂点シェーダーのライトマップ UV 座標に適用し、最終的な UV を計算します。

インスタンス UV トランスフォーム

インスタンス ライトマップ UV トランスフォームとは、スケールと変換のみを含む 2D アフィン トランスフォームです。回転がないため、m_LinearTransform[0][1]m_LinearTransform[1][0] は常に 0 です。

トランスフォームを頂点シェーダーにアップロードする前に、単一の float4 にパッキングします。

Geo::GeoVector4 packedUvTransform = Geo::GeoVector4(
    uvTransform.m_LinearTransform[0][0],
    uvTransform.m_LinearTransform[1][1],
    uvTransform.m_Translation[0],
    uvTransform.m_Translation[1]);

以下の例は、共有ライトマップ UV 座標をパッキングされたインスタンス トランスフォームによって変換し、インスタンス ライトマップ UV を作成する方法を示しています。

float2 TransformUV(float4 packedUvTransform, float2 uv)
{
    return uv * packedUvTransform.xy + packedUvTransform.zw;
}