- Enable this mode by default for a platform
[REVIEW] [at]krzysztof.narkowicz, [at]john.huelin
#localization none
#tests ReplayRun test and visual test in editor
[CL 25551548 by jian ru in ue5-main branch]
* Added a small bias along the normal in order to minimize leaking, which was caused by sampling card grid cell inside a wall. This fixes issues with object order when they are placed near to each other.
* Move card hit point closer to the surface, as all hit points are biased by SDFTraceResult.ExpandSurfaceAmount in order to escape uncertain SDF region. This provides a bit more precise hit point and improves card sampling quality.
[FYI] Daniel.Wright
[CL 24197434 by krzysztof narkowicz in ue5-main branch]
* CullObjectsToClipmapCS writes to a buffer when any incomplete Mesh SDFs are used, which is read back by the CPU and a new clipmap update gets queued for when streaming is complete
* Controlled by r.AOGlobalDistanceField.RecacheClipmapsWithPendingStreaming (enabled by default)
* New debug option to profile the cost of heightfield / Mesh SDF streaming recaches: r.AOGlobalDistanceField.ForceRecacheForStreaming
* New information added to the draw event to debug full recapture reasons: "Clipmap:0 CacheType:MostlyStatic FULL UPDATE: HeightfieldStreaming"
#preflight none
[CL 23932238 by Daniel Wright in ue5-main branch]
- Modified WorldToUVAddAndMul and similar to convert from translated world space.
- Use FInt64Vector to track update origin.
- Apply modulo to ScrollOffset before converting to float.
#jira UE-166912
#jira UE-140552
#preflight 638669e133774509007e2237
#rb Krzysztof.Narkowicz, rob.krajcarski, daniel.wright
[CL 23316846 by tiago costa in ue5-main branch]
*** This change will incur a full shader invalidation across all platforms ***
Issues:
- Some platforms require async compute dispatch indirect arguments to not cross specific memory boundaries
- This places restrictions on the valid sizes for a dispatch indirect argument set. We were not conforming to these restrictions which could result in GPU crashes on these async passes
Fixes:
- FRHIDispatchIndirectParameters is padded out to meet per-platform memory boundary restrictions
- This is driven via new per-platform preprocessor define PLATFORM_DISPATCH_INDIRECT_ARGUMENT_BOUNDARY_SIZE
- Some platforms require FRHIDispatchIndirectParameters to align with their internal structure hence we cannot universally size to meet all platform's requirements
- Introduce new FRHIDispatchIndirectParametersNoPadding for uses when we explicitly do not want the padding and otherwise avoid the memory boundary restrictions
- Revise and expand indirect argument validation code to catch further such issues in the future
- Update shaders which write to dispatch indirect argument buffers to account for optional per-platform padding
- New utility function WriteDispatchIndirectArgs introduced to faciliate this
- platforms which require other than the default nonpadded dispatch indirect arguments must define DISPATCH_INDIRECT_UINT_COUNT and their own WriteDispatchIndirectArgs in their CommonPlatform.ush
- move creation of DispatchIndirectGraphicsCommandSignature command signature to be per-platform
- DispatchIndirectGraphicsCommandSignature and DispatchIndirectComputeCommandSignature stride changed to account for additional padding on impacted platforms
Testing:
- ran Lyra with and without async compute Lumen on impacted platforms as well as Win64
- ran FN replay on impacted platforms
#rb Krzysztof.Narkowicz, Ben.Woodhouse, Benjamin.Rouveyrol
#jira UE-167950
#preflight 6359563b2e6690262a11bc06
[CL 22862498 by eric mcdaniel in ue5-main branch]
Following the existing CastHiddenShadow, AffectIndirectLightingWhileHidden allows hidden primitives to be injected into GI and reflections. This is useful as an extra art direction knob to create cheap invisible area lights through GI.
* Only implemented in Lumen
* Will inject {Visible=false, AffectIndirectLightingWhileHidden=true} primitives into both distance field scene and ray tracing scene (TLAS)
#rb Daniel.Wright, Yuriy.ODonnell
[CL 22412764 by krzysztof narkowicz in ue5-main branch]
During page composite pass, pages containing coverage values below 1 are marked using a single bit inside PageTable. This bit is then checked during the tracing pass to decide whether we should load a sparse coverage page or not.
Previously we were marking empty areas as coverage 0, but it had some side effects and isn�t compatible with this marking scheme. Now all empty space is marked as coverage=1 and mobility cache composition was accordingly modified.
Performance wins on FortGPUTestBed, all tracing passes, current gen console, 1080p
Epic - 0.17ms
High - 0.1ms
Unfortunately this doesn�t fully remove coverage overhead in levels without foliage. Overhead after this optimization:
Epic - 0.1ms
High - 0.06ms
[CL 22165335 by krzysztof narkowicz in ue5-main branch]