Commit Graph

138 Commits

Author SHA1 Message Date
andrew lauritzen
ceabdff2a2 - Add support to mark coarse pages in mips/clipmap levels
- Fix optimal plane bias with clipmap LOD fallback
- Clean up and optimize some of the clipmap level offset math
- Rename some fields to make the resuse between clipmaps/mips clear

#rb brian.karis, ola.olsson

#ROBOMERGE-SOURCE: CL 15466663 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)

[CL 15466676 by andrew lauritzen in ue5-main branch]
2021-02-18 21:09:05 -04:00
graham wihlidal
200151a3bc Renamed r.Shadow.v.* cvars to r.Shadow.Virtual.* to be more obvious, and also renamed VSM.* resource prefixes to Shadow.Virtual.*
#rb brian.karis
[FYI] ola.olsson, andrew.lauritzen

#ROBOMERGE-SOURCE: CL 15450709 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)

[CL 15454805 by graham wihlidal in ue5-main branch]
2021-02-18 13:44:36 -04:00
graham wihlidal
579f03fbaa Prefixed Nanite and VSM resources so that RDG filtering works nicely.
#rb trivial
[FYI] brian.karis, zach.bethel

#ROBOMERGE-OWNER: graham.wihlidal
#ROBOMERGE-AUTHOR: graham.wihlidal
#ROBOMERGE-SOURCE: CL 15449112 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)
#ROBOMERGE-CONFLICT from-shelf

[CL 15454700 by graham wihlidal in ue5-main branch]
2021-02-18 13:40:42 -04:00
ola olsson
f7822cb8c5 Enable caching for Non-Nanite VSM
- added a path to propagate and cache whether material modifies position (WPO) to enable invalidating cached pages (touches whole mesh command pipeline).
- added pixel shader verision of page copying & clearing.
- also added flag for whether cached the mesh draw command supports primitive id (which enables checing this earlier).

#rb andrew.lauritzen,brian.karis,graham.wihlidal,Krzysztof.Narkowicz

#ROBOMERGE-SOURCE: CL 15436539 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)

[CL 15441336 by ola olsson in ue5-main branch]
2021-02-17 15:32:52 -04:00
brian karis
10ccb264da Fixed AllocatePagesUsingRects with Nanite
#rb none
[FYI] ola.olsson

#ROBOMERGE-SOURCE: CL 15400374 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)

[CL 15400383 by brian karis in ue5-main branch]
2021-02-12 21:06:10 -04:00
andrew lauritzen
c9627e03e2 Rearrage clipmaps so that their snapping aligns more across levels
- Levels are now strictly pow2 sizes and snap to half their size (instead of internal page boundaries).
- Propogate mips propgates along clipmap levels instead of mips for directional lights
- Provide a O(1) lookup for clipmaps as well that will fall back to coarser data. Do not use it by default for current opaque shading where we know by construction where the mapped pages are.
Still some minor cleanup and optimization possible to come in a future commit.

#ROBOMERGE-SOURCE: CL 15399904 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)

[CL 15399908 by andrew lauritzen in ue5-main branch]
2021-02-12 19:00:35 -04:00
brian karis
7743e10ae8 Fixed cubemap shadows being inverted and flipped cull winding for !Nanite VSM.
#ROBOMERGE-SOURCE: CL 15347635 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)

[CL 15359404 by brian karis in ue5-main branch]
2021-02-08 15:59:44 -04:00
brian karis
c002e016e3 Spot and point light !nanite VSM support.
#rb ola.olsson

#ROBOMERGE-SOURCE: CL 15341855 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)

[CL 15341864 by brian karis in ue5-main branch]
2021-02-05 16:37:17 -04:00
andrew lauritzen
eb93f3b0c8 Grab bag of virtual shadow fixes:
- Fix SMRT with non-nanite geometry (wasn't sampling the second map)
- Fix toggling distance field shadow cascade on when VSMs are enabled (trying to create a distance field complete shadow map)
  - This is a bit of a questionable case, but at least does not crash now
- Remove dependence of clipmap max distance on shadow cascade distance and replace with a cvar
  - Will likely want to do something similar for far culling distance for non-nanite stuff, but TBD
  - May eventually want a parameter back on the light, but for now just having a cvar set high is good as there is little overhead with Nanite meshes
- Add some debug output for SMRT spot lights

#jira UERNDR-682
#rb brian.karis
#fyi ola.olsson

[CL 15215315 by andrew lauritzen in ue5-main branch]
2021-01-27 01:49:27 -04:00
Brian Karis
c69a8a42cc One pass VSM projection, culled by the light grid.
Major SMRT optimization. Adaptive 7 rays per light with rough penumbra detection. Quality appears to surpass 1rpp with denoising.

#rb andrew.lauritzen

[CL 15190972 by Brian Karis in ue5-main branch]
2021-01-25 18:20:37 -04:00
andrew lauritzen
d45623ceed - Add pass to propogated mapped page information down the page table to enable O(1) lookups of any mapped page at the leaves
- Move some functions in PageManagement.usf to avoid confusing global resource scopes

#rb brian.karis
#fyi ola.olsson

[CL 15169596 by andrew lauritzen in ue5-main branch]
2021-01-22 23:23:16 -04:00
Ola Olsson
75247deb28 Hook up render state recreate to VSM Cvar (r.Shadow.v.Enable)
- needed to handle z-order change in cached render commands.

#rb andrew.lauritzen
#fyi graham.wihlidal

[CL 15162791 by Ola Olsson in ue5-main branch]
2021-01-22 04:59:02 -04:00
andrew lauritzen
a380d97b0e More non-Nanite VSM fixes
#rb graham.wihlidal
#fyi ola.olsson

[CL 15161956 by andrew lauritzen in ue5-main branch]
2021-01-21 23:47:09 -04:00
andrew lauritzen
e0478fe99c - Enable SMRT for spot lights (still a few minor issues but mostly working well)
- Change VSM page table to single packed uint with a field to allow single-lookup to find any mapped MIP
- Page table lookups go through helper function to encode/decode
- Remove some unused shadow emit code

#rb brian.karis
#fyi ola.olsson

[CL 15160590 by andrew lauritzen in ue5-main branch]
2021-01-21 19:15:53 -04:00
Ola Olsson
876ee313e1 Non-Nanite directional light VSM Prototype (disabled, depends on instance culling)
- All non-nanite VSM code is wrapped in ENABLE_NON_NANITE_VSM define (on by default if GPUCULL_TODO is on)
- Added FProjectedShadowInfo with setup to gather primitives for clipmap VSM
- Added RenderVirtualShadowMapsHw to FVirtualShadowMapArray to draw into the VSM
- Shadow depth Vertex shader contains logic to route the instances to pages and uses clip distance to clip to page boundary
- Added culling shaders to replicate instances for each overlapped page

#rb rune.stubbe
#fyi graham.wihlidal,brian.karis,andrew.lauritzen

[CL 15144144 by Ola Olsson in ue5-main branch]
2021-01-20 08:46:15 -04:00
Ola Olsson
3b528bb5d5 Move Virtual SM common parameters to a uniform buffer to resolve shader name class issues.
#rb andrew.lauritzen

[CL 15135494 by Ola Olsson in ue5-main branch]
2021-01-19 10:17:05 -04:00
Brian Karis
baed699817 Point light VSM
#rb andrew.lauritzen

[CL 15133841 by Brian Karis in ue5-main branch]
2021-01-18 22:44:41 -04:00
andrew lauritzen
bd45865fd2 Fix toggling nanite off/on and nanite viewflags off by centralizing the location from which we decide on whether we're using Virtual Shadow Maps or not (top of Render()).
Centralize VSM enable CVar.

#rb ola.olsson

[CL 15052915 by andrew lauritzen in ue5-main branch]
2021-01-12 14:40:19 -04:00
zach bethel
c6cb1e82be Deprecated and gutted FSceneRenderTargets. Moved all textures over to FSceneTextures. Refactored the renderer to use RDG textures from FSceneTextures instead.
#rb arne.schober, luke.thatcher, christopher.waters, kenzo.terelst

[CL 15040082 by zach bethel in ue5-main branch]
2021-01-11 14:49:16 -04:00
andrew lauritzen
43ac742379 Fix/improve a variety of VSM artifacts:
- Use engine contact shadow trace function to respect a few tweaks there including the cast contact shadow flag
  - Had to stop short of including all the hair/eye-specific stuff as it is very hard-coded currently and not appropriate for general VSM shader...
- Fix self-intersection issues with short contact shadow traces
- Reduce default length of contact shadow trace to reduce artifacts
- Add normal-based offset to shadow lookup positions to reduce issues with projection aliasing and Nanite mesh LOD
- Add small page dilation region to avoid normal offset walking off mapped pages
  - Will likely eventually converge some of the sampling logic with SMRT to make it more robust as well, but dilation is a useful feature regardless
- Sample both clipmap levels with SMRT by default as performance of dynamically only sampling one doesn't seem to gain much and some artifacts are avoided.

#review brian.karis
#jira UE-103582

[CL 15031479 by andrew lauritzen in ue5-main branch]
2021-01-08 22:26:52 -04:00
andrew lauritzen
fb0b1d790b Initial shadow map ray tracing support for directional lights
- Disabled by defaul to start. Enable with r.Shadow.v.SMRT.RayCountDirectional 1
- Denoiser will now use temporal reprojection when SMRT is enabled (disable with r.Shadow.v.Denoiser.Temporal 0)
- Variety of fixes and refactors to existing VSM and projection code
- Still a few edge cases that will be improved in future around screen space trace and similar, but working fairly robustly for reasonable light source size settings

#rb ola.olsson
#fyi brian.karis

[CL 14942586 by andrew lauritzen in ue5-main branch]
2020-12-16 17:57:13 -04:00
zach bethel
924417b66f Moved more Nanite resources over to RDG.
#fyi graham.wihlidal
#jira none

[CL 14917602 by zach bethel in ue5-main branch]
2020-12-14 15:13:06 -04:00
Krzysztof Narkowicz
f484d3a594 Lumen - implemented virtual shadow map support for shadowing Lumen's surface cache.
#jira none
#rb Andrew.Lauritzen

[CL 14915815 by Krzysztof Narkowicz in ue5-main branch]
2020-12-14 14:39:11 -04:00
Rune Stubbe
00e07341c2 Added support for two-pass HZB culling with Nanite multi-view
Two pass occlusion for Non-VSM shadows
Changes shadowmap atlas rendering to render into the border, so we have real data for wide shadowmap filtering kernels. Also improves atlas HZB performance.

#rb ola.olsson
#fyi graham.wihlidal, brian.karis, andrew.lauritzen

[CL 14762582 by Rune Stubbe in ue5-main branch]
2020-11-17 06:16:49 -04:00
Ola Olsson
a9b6b0e0a8 Refactor virtual shadow maps to remove needless extract and register external of RDG resources.
- Changed (most) intermediate buffers & textures in FVirtualShadowMapArray to RDG buffers/textures
- Removed GenerateIdentityPageTables as it was no longer working.
- Renamed GeneratePageFlagsFromLightGrid -> BuildPageAllocations to better reflect current function.

#rnx
#rb Andrew.Lauritzen

[CL 14693244 by Ola Olsson in ue5-main branch]
2020-11-09 15:47:39 -04:00