vault backup: 2024-12-08 13:54:43
This commit is contained in:
@@ -7,8 +7,71 @@ rating: ⭐
|
||||
---
|
||||
# 阴影偏移
|
||||
可以考虑的Buffer有
|
||||
- Depth
|
||||
- ShadowDepths
|
||||
- CustomDepth
|
||||
|
||||
## 相关Paas
|
||||
1. ShadowDepths
|
||||
|
||||
|
||||
# 其他
|
||||
顺序:
|
||||
RenderCustomDepthPass
|
||||
RenderCustomDepthPass
|
||||
|
||||
FSceneRenderer::CreateDynamicShadows
|
||||
=>
|
||||
FSceneRenderer::CreatePerObjectProjectedShadow
|
||||
|
||||
|
||||
|
||||
```c++
|
||||
if (!IsForwardShadingEnabled(ShaderPlatform))
|
||||
{
|
||||
// Dynamic shadows are synced later when using the deferred path to make more headroom for tasks.
|
||||
FinishInitDynamicShadows(GraphBuilder, InitViewTaskDatas.DynamicShadows, InstanceCullingManager, ExternalAccessQueue);
|
||||
}
|
||||
```
|
||||
|
||||
```c++
|
||||
if (RendererOutput == ERendererOutput::DepthPrepassOnly)
|
||||
{
|
||||
RenderOcclusionLambda();
|
||||
|
||||
if (bUpdateNaniteStreaming)
|
||||
{
|
||||
Nanite::GStreamingManager.SubmitFrameStreamingRequests(GraphBuilder);
|
||||
}
|
||||
|
||||
CopySceneCaptureComponentToTarget(GraphBuilder, SceneTextures, ViewFamilyTexture, ViewFamily, Views);
|
||||
}
|
||||
else
|
||||
{
|
||||
GVRSImageManager.PrepareImageBasedVRS(GraphBuilder, ViewFamily, SceneTextures);
|
||||
|
||||
if (!IsForwardShadingEnabled(ShaderPlatform))
|
||||
{
|
||||
// Dynamic shadows are synced later when using the deferred path to make more headroom for tasks.
|
||||
FinishInitDynamicShadows(GraphBuilder, InitViewTaskDatas.DynamicShadows, InstanceCullingManager, ExternalAccessQueue);
|
||||
}
|
||||
|
||||
// Update groom only visible in shadow
|
||||
if (IsHairStrandsEnabled(EHairStrandsShaderType::All, Scene->GetShaderPlatform()) && RendererOutput == ERendererOutput::FinalSceneColor)
|
||||
{
|
||||
UpdateHairStrandsBookmarkParameters(Scene, Views, HairStrandsBookmarkParameters);
|
||||
|
||||
// Interpolation for cards/meshes only visible in shadow needs to happen after the shadow jobs are completed
|
||||
const bool bRunHairStrands = HairStrandsBookmarkParameters.HasInstances() && (Views.Num() > 0);
|
||||
if (bRunHairStrands)
|
||||
{
|
||||
RunHairStrandsBookmark(GraphBuilder, EHairStrandsBookmark::ProcessCardsAndMeshesInterpolation_ShadowView, HairStrandsBookmarkParameters);
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE: The ordering of the lights is used to select sub-sets for different purposes, e.g., those that support clustered deferred.
|
||||
FSortedLightSetSceneInfo& SortedLightSet = *GraphBuilder.AllocObject<FSortedLightSetSceneInfo>();
|
||||
{
|
||||
RDG_CSV_STAT_EXCLUSIVE_SCOPE(GraphBuilder, SortLights);
|
||||
RDG_GPU_STAT_SCOPE(GraphBuilder, SortLights);
|
||||
ComputeLightGridOutput = GatherLightsAndComputeLightGrid(GraphBuilder, bComputeLightGrid, SortedLightSet);
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user