大氣相關的光照(正確性不能確保)

在大氣的渲染中,涉及到類

class FAtmosphericFogSceneInfo : public FRenderResource

{

};

 

它的光照相關成員函數是
    /** Prepare the sun light data as a function of current atmospheric fog state. */
    void PrepareSunLightProxy(FLightSceneInfo& SunLight) const;

 

調用該函數的是延遲渲染類

void FDeferredShadingSceneRenderer::Render(FRHICommandListImmediate& RHICmdList)
{
  。。。。。。

    if (ShouldRenderSkyAtmosphere(Scene, ViewFamily.EngineShowFlags))
    {
        for (int32 LightIndex = 0; LightIndex < NUM_ATMOSPHERE_LIGHTS; ++LightIndex)
        {
            if (Scene->AtmosphereLights[LightIndex])
            {
                PrepareSunLightProxy(*Scene->GetSkyAtmosphereSceneInfo(),LightIndex, *Scene->AtmosphereLights[LightIndex]);
            }
        }
    }
    else if (Scene->AtmosphereLights[0] && Scene->HasAtmosphericFog())
    {
        // Only one atmospheric light at one time.
        Scene->GetAtmosphericFogSceneInfo()->PrepareSunLightProxy(*Scene->AtmosphereLights[0]);
    }
.......

}

PrepareSunLightProxy()這塊相對比較複雜, 借鑑了寒霜引擎的物理渲染,大概意思是大氣系統的幾個因素,太陽位置影響了實時光照,天氣狀況影響到雲的變化。並涉及到了大氣散射,時間的變化也影響到了實時天空。

看看什麼時候用到這個延遲渲染,在FSceneRenderer::CreateSceneRenderer()中,

在往上走依次是FRendererModule::BeginRenderingViewFamily(FCanvas* Canvas, FSceneViewFamily* ViewFamily);

 FEditorViewportClient::Draw(FViewport* InViewport, FCanvas* Canvas);

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章