This is the documentation for Enlighten.

7.9.2. ILightTransportOutput によるデバッグ

ILightTransportOutput オブジェクトには以下が含まれています。

  • ラジオシティ テクスチャのピクセルごとに、以下を格納する 1 つのピクセル オブジェクトがあります。
    • このピクセルのテクスチャ上の X、Y 位置
    • 一連の有効なレイ オリジン
    • 一連の無効なレイ オリジン
    • バックフェースに届く一連の光線

データのロード

通常、実行時には単に新しい ILightTransportOutput オブジェクトを作成し、そこにデータをシリアル化して入れます。

ILightTransportOutput* ltOutput = LoadInterface<ILightTransportOutput>("<myfilename>");

LoadInterface ヘルパー関数を使用していない場合、Create を呼び出し、自分で Load します。

有効/無効なオリジン

これらのピクセルごとの配列は、光線が投射された位置を格納しています。通常は、適切なライティングにならない、有効なオリジンのないピクセルのみに注意を払います。有効なオリジンがないのは、ほとんどが当初の投影が不適切であるか、GetRejectRayOriginIfAnyBackFaces ビルド パラメーターが有効になっていることが原因です。もう 1 つ、無効なレイ オリジンの理由として考えられるものは、Enlighten では、互いに有効なレイ オリジンのセットとみなすことのできるレイ オリジン、つまりレイ オリジン間で明確な視認できる見通し線があるレイ オリジンの最大のセットのみがラジオシティ ピクセルに含まれるように試行されることです。このセットの一部ではないレイ オリジンも無効とマークされます。

バックフェース ライン セグメント

これらのピクセルごとの配列は、レイ オリジンから投射され、バックフェースに届いた光線の終点を格納します。ライト リークがある場合、バックフェースへの経路がある可能性があります。これにより、そのような作成エラーが明らかになります。

サンプル コード

以下のコードは、ラジオシティ テクスチャのコピーに、各出力ピクセルの有効性を示すデバッグ データを入力します。通常は、特定の出力ピクセルのバックフェース光線を描画する必要があります。

s32 outputWidth = radCore->m_MetaData.m_OutputWidth;
s32 outputHeight = radCore->m_MetaData.m_OutputHeight;
 
// テクスチャを作成します
Texture* tex = TextureManager::Get()->CreateTexture(outputWidth, outputHeight);
 
// (オプションで) テクスチャに少しノイズを入れ、完全に黒にならないようにします
srand(23562123);
for ( s32 i=0; i<outputWidth * outputHeight; i++ )
{
    float r=.15f*Min(1.0f,Max(0.0f,((float)rand()/RAND_MAX)));
    float g=.15f*Min(1.0f,Max(0.0f,((float)rand()/RAND_MAX)));
    float b=.15f*Min(1.0f,Max(0.0f,((float)rand()/RAND_MAX)));
 
    tex->PixelColour(i, VConstruct(r,g,b,0.f));
}
 
for ( s32 i=0; i<ltOutput->GetNumPixels(); i++ )
{
    const Enlighten::LightTransportPixel* pix = ltOutput->GetLightTransportPixel(i);
 
    if (!pix->m_ValidRayOrigins.GetSize())
    {
        tex->SetPixelColour(i, VConstruct(1.f, 0.f, 0.f, 0.f));      // ピクセルを赤にします
    }
}
 
// ラジオシティ UV を使用して、新しいテクスチャでシーンをレンダリングします。無効なピクセルは赤で表示されます。