* DF lighting GBuffer dependencies packed into 2 textures (saves .1ms)
* Reverted CULL_OBJECTS_TO_RECORD as performance savings are inconsistent
* Added low quality gap fill pass that just does a bilateral filter (saves .4ms)
* Enabled interpolation depth testing (saves .2ms)
* Disabled the temporal stability filter (saves .2ms)
* Overall empty scene cost on PS4 3.77ms -> 2.83ms
[CL 2501856 by Daniel Wright in Main branch]
* Added r.AOHistoryDistanceThreshold with default to 20, can be tweaked to avoid ghosting behind characters while not causing too much flickering
* Distance fields are now culled to each surface cache record before ray tracing for AO, saves a bit of GPU time
[CL 2496263 by Daniel Wright in Main branch]
* Added a bias along the normal for heightfield shadowing used by GI, avoids aliasy grass shadows
* Also implemented a 3x3 filter for heightfield shadowmap shadows to reduce instability from camera movement and vertex animation
[CL 2452238 by Daniel Wright in Main branch]
* Rejecting history based on world position differences, not camera Z. This fixes a lot of noise under camera movement.
* The last texel of the history is never reused to avoid artifacts from bilinear filtering of a viewport in a larger render target
* Fixed error in the reprojected depth from storing something else in the sign of the depth
* There's now a 2d spatial filter of stable results applied to any pixels whose history was discarded (unstable)
[CL 2452229 by Daniel Wright in Main branch]
Backed off on heightfield GI local shadowing intensity, helps prevent dense trees from blocking all GI
GI is now scaled down on objects without a distance field or heightfield representation to compensate for lack of local occlusion
[CL 2452212 by Daniel Wright in Main branch]
* Enable with 'r.DistanceFieldGI 1' on console
* Surfel GI is currently disabled as it doesn't interop yet
* A GBuffer atlas is created for Landscape from components that can affect indirect lighting based on the current view
* Shadowing from a directional light is computed by reusing shadowmaps and ray tracing distance fields
* Lighting is computed for the atlas using GBuffer properties
* First bounce GI light transfer is computed for a receiver by iterating over all the nearby lit texels of the heightfield and treating them as Virtual Point Lights. Two gather regions are used, the larger one skips through the heightfield to achieve a larger bounce distance. Distance field AO is used to provide local shadowing.
* Material diffuse color not yet supported, and regions outside of the view don't have valid shadowing.
[CL 2436606 by Daniel Wright in Main branch]
* Disabled by default, need a movable skylight with r.DistanceFieldGI enabled at load time (ConsoleVariables.ini)
* Surfels (oriented disks) are placed on mesh surfaces and capture diffuse color by evaluating the material with actual UVs and world position
* Surfels are lit and shadowed by ray tracing through mesh distance fields (directional light only so far)
* Irradiance cache records are lit with nearby Virtual Point Lights created from lit surfels. Only using camera based LOD of the surfel representation and object based surfel culling, no hierarchy yet.
* Shadowing of the VPLs is provided by distance field cone tracing. A depth visibility function is constructed along each of the 9 cone trace directions, and used to shadow the incoming VPL lighting.
* Component reregistration and transform updating causes surfels to be generated again which can be slow. In the future only the material needs to be re-evaluated.
* Geometry shaders with stream out are now supported, by implementing FShader::GetStreamOutElements
* Compute shaders can now evaluate materal attributes like BaseColor
* SkyLight MaxOcclusionDistance increased to 10m, which is the minimum useful amount for GI
[CL 2424208 by Daniel Wright in Main branch]
Lighting done in the bass pass does not properly use the new shading model yet. All dynamic lighting does: deferred direct lights, ambient cubemap, and dynamic skylight.
[CL 2411324 by Brian Karis in Main branch]
* 21ms in GDC level for landscape occlusion down to .12ms
* Also fixed heightfield occlusion from Landscapes with subsections
[CL 2400088 by Daniel Wright in Main branch]
* Requires a Movable Skylight + 'r.DistanceFieldGI 1' + 'r.GenerateMeshDistanceFields' project setting enabled
* Provides a single bounce of Diffuse GI with bounce distance limited by OcclusionMaxDistance (default 6m)
* Virtual Point Lights are placed from the directional light by ray tracing the scene's distance fields, normal comes from SDF gradient
* Currently only placing 128*128 VPLs up to 40m from camera
* VPLs light irradiance cache samples using hemispherical disk light model, indirect shadowing is provided by the same cone traces used for Distance Field AO
* Irradiance is computed only at irradiance cache points (max every 8 pixels) and interpolated to the rest of the pixels
* Hardcoded half grey material color for now, and poor performance due to brute force VPL lighting
[CL 2390645 by Daniel Wright in Main branch]