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 を使用して、新しいテクスチャでシーンをレンダリングします。無効なピクセルは赤で表示されます。