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++)
|
for (int32 LightIndex = UnbatchedLightStart; LightIndex < LumenLightStart; LightIndex++)
|
||||||
=>
|
=>
|
||||||
if (bDrawShadows){...} => ***RenderDeferredShadowProjections()***
|
if (bDrawShadows){...} => RenderRayTracingShadows()/***RenderDeferredShadowProjections()***
|
||||||
=>
|
=>
|
||||||
if (bDirectLighting){...}
|
if (bDirectLighting){...}
|
||||||
if (bDirectLighting){...}
|
if (bDirectLighting){...} => RenderLight()
|
||||||
|
if (bUseHairLighting){...}=> RenderLightForHair()
|
||||||
|
|
||||||
## RenderDeferredShadowProjections()
|
## 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提出:
|
由晨风&Neverwind提出:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user