vault backup: 2024-12-16 12:48:15
This commit is contained in:
parent
2044ccf84d
commit
8ba555c357
@ -837,13 +837,70 @@ RDG_EVENT_SCOPE(GraphBuilder, "UnbatchedLights");//batchedLights为没有LightFu
|
||||
=>
|
||||
for (int32 LightIndex = UnbatchedLightStart; LightIndex < LumenLightStart; LightIndex++)
|
||||
=>
|
||||
if (bDrawShadows){...} => ***RenderDeferredShadowProjections()***
|
||||
if (bDrawShadows){...} => RenderRayTracingShadows()/***RenderDeferredShadowProjections()***
|
||||
=>
|
||||
if (bDirectLighting){...}
|
||||
if (bDirectLighting){...}
|
||||
if (bDirectLighting){...} => RenderLight()
|
||||
if (bUseHairLighting){...}=> RenderLightForHair()
|
||||
|
||||
## RenderDeferredShadowProjections()
|
||||
```c++
|
||||
void FDeferredShadingSceneRenderer::RenderDeferredShadowProjections(
|
||||
FRDGBuilder& GraphBuilder,
|
||||
const FMinimalSceneTextures& SceneTextures,
|
||||
const FTranslucencyLightingVolumeTextures& TranslucencyLightingVolumeTextures,
|
||||
const FLightSceneInfo* LightSceneInfo,
|
||||
FRDGTextureRef ScreenShadowMaskTexture,
|
||||
FRDGTextureRef ScreenShadowMaskSubPixelTexture)
|
||||
{
|
||||
CheckShadowDepthRenderCompleted();
|
||||
|
||||
SCOPED_NAMED_EVENT(FDeferredShadingSceneRenderer_RenderShadowProjections, FColor::Emerald);
|
||||
SCOPE_CYCLE_COUNTER(STAT_ProjectedShadowDrawTime);
|
||||
RDG_EVENT_SCOPE(GraphBuilder, "ShadowProjectionOnOpaque");
|
||||
RDG_GPU_STAT_SCOPE(GraphBuilder, ShadowProjection);
|
||||
|
||||
const FVisibleLightInfo& VisibleLightInfo = VisibleLightInfos[LightSceneInfo->Id];
|
||||
|
||||
const bool bProjectingForForwardShading = false;
|
||||
RenderShadowProjections(GraphBuilder, SceneTextures, ScreenShadowMaskTexture, ScreenShadowMaskSubPixelTexture, LightSceneInfo, bProjectingForForwardShading);
|
||||
ShadowSceneRenderer->ApplyVirtualShadowMapProjectionForLight(GraphBuilder, SceneTextures, LightSceneInfo, ScreenShadowMaskTexture, ScreenShadowMaskSubPixelTexture);
|
||||
|
||||
RenderCapsuleDirectShadows(GraphBuilder, SceneTextures.UniformBuffer, *LightSceneInfo, ScreenShadowMaskTexture, VisibleLightInfo.CapsuleShadowsToProject, bProjectingForForwardShading);
|
||||
|
||||
// Inject deep shadow mask for regular shadow map. When using virtual shadow map, it is directly handled in the shadow kernel.
|
||||
if (HairStrands::HasViewHairStrandsData(Views))
|
||||
{
|
||||
bool bNeedHairShadowMaskPass = false;
|
||||
const bool bVirtualShadowOnePass = VisibleLightInfo.VirtualShadowMapClipmaps.Num() > 0;
|
||||
if (!bVirtualShadowOnePass)
|
||||
{
|
||||
for (int32 ShadowIndex = 0; ShadowIndex < VisibleLightInfo.ShadowsToProject.Num(); ShadowIndex++)
|
||||
{
|
||||
FProjectedShadowInfo* ProjectedShadowInfo = VisibleLightInfo.ShadowsToProject[ShadowIndex];
|
||||
if (ProjectedShadowInfo->HasVirtualShadowMap())
|
||||
{
|
||||
bNeedHairShadowMaskPass = false;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
bNeedHairShadowMaskPass = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bNeedHairShadowMaskPass)
|
||||
{
|
||||
RenderHairStrandsShadowMask(GraphBuilder, Views, LightSceneInfo, false /*bForward*/, ScreenShadowMaskTexture);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
RenderShadowProjections():
|
||||
1. 取得当前FVisibleLightInfo、FLightSceneProxy;创建FProjectedShadowInfoArray DistanceFieldShadows、NormalShadows。
|
||||
2. 遍历VisibleLightInfo.ShadowsToProject,按照阴影特征将每个FProjectedShadowInfo加入DistanceFieldShadows、NormalShadows。
|
||||
|
||||
# 半程阴影
|
||||
由晨风&Neverwind提出:
|
||||
|
Loading…
x
Reference in New Issue
Block a user