Unreal Engine 5, [UE5 Developer Availability 2022-04-05]


No clue what he's talking about, you make things faster and they're faster. Like I'm sure plenty are miffed UE5 doesn't have a proper bindless drawcall setup yet and it's only on the "future roadmap" even after several versions. But GPU driven mass bindless has been around for a decade now, shipping all the way back with stuff like AC Unity. Nanite is great for what it does, but it's not explicitly a gpu driven drawcall setup, and it would be silly to claim so.
 
Tried the Robocop demo. Similar to Talos there’s lots of visible pop-in of Nanite clusters and textures. It’s such a slow paced game that they should be able to load assets well in advance of when they’re needed especially on graphics cards with abundant VRAM. The streaming engine is trying to do too much here.

Reflections are showing the SDF proxy and therefore are pretty janky. At least off screen objects are visible.

Getting between 50 and 80 fps depending on the scene at 3840x1600 DLSS quality on a 3090.
 
Tried the Robocop demo. Similar to Talos there’s lots of visible pop-in of Nanite clusters and textures. It’s such a slow paced game that they should be able to load assets well in advance of when they’re needed especially on graphics cards with abundant VRAM. The streaming engine is trying to do too much here.
Haven't tried the demo but I'd be surprised if you are seeing anything related to streaming Nanite meshes or virtual textures. More likely it's something non-nanite or not streaming related. People still seem to assume there's some significant amount of streaming that needs to happen here and it's just not the case. That's the magic of virtual geometry.

No clue what he's talking about, you make things faster and they're faster.
Agreed the comment doesn't really make sense to me, or at the very least doesn't seem to understand Nanite. Nanite is not "just" a system to free artists from generating classical LODs, it handles the culling and LOD problems fundamentally better at a finer granularity. The scaling it accomplishes is not really possible with classic mesh LODs even if you had infinite art time.
 
Last edited:
Lords of the Fallen supports software and hardware Lumen. But like in other UE5 games the base performance is so bad that hardware Lumen does not really seem a practical option.
And like others UE5 games the lighting system is just not good enough for the performance. When there is no direct light source every (moving) object looks out of place with no shadows and even no AO:

Game looks like it's not gpu bound most of the time. I'm really interested to see how things change with UE5.4. The worker thread improvements might help push those gpus to 100%.
 
Haven't tried the demo...
Update - gave the demo a quick shot as I had an hour or so. Hot takes:

1) Can you point me to an area where you saw streaming/popping issues? Was it during the camera cuts in cutscenes? I didn't really see any geometry pop at all, and only one camera cut I saw a brief texture pop. Camera cuts do always require special attention in games; you can pre-stream both nanite and virtual texture data in cutscenes to avoid issues on cuts (the Matrix demo does this), but the developers may not have set that up here. Overall the game looks reasonable, but it's clearly not a large studio with AAA polish.

2) I saw one shadow pop seemingly related to camera distance that I couldn't obviously figure out what was going on... might just have been some geometry set up very close/intersecting a light source.

3) The most obvious artifacts were the super noisy road textures that boil like crazy (even with no upscaling... probably not using normal map/spec filtering?), right beside puddles that are literal mirrors :LOL:
1697433493124.png

4) Next up was certain areas with fairly noisy GI. Just a fact of life and will need art attention with any GI solution in the foreseeable future, you can't push things too far in dimly lit areas, etc.

5) DLSS ghosting was fairly apparent in several cases, especially cutscenes with hair over heavy background DOF blur. Possibly some issue with motion vectors or mask setup? TSR ghosted a bit less in this case, but it was present with all the reconstruction/AA techniques to some extent. (Aside: eventually had a crash inside the DLSS/Streamline SDK too, but pre-release demo life).

6) Saw one or two specular fireflies in some of the panning city shots.

7) Performance was even and good here on an admittedly high end machine (12900k w/ 4090). 100-130fps 1440p with 100% render res DLSS/TSR. Didn't notice any stutter or uneven pacing issues throughout the part of the demo I was able to play.

Graphics aside, was an interesting game. While the gameplay is quite different, the narrative style and a lot of the background scenery gave me a heavy Max Payne vibe, which was kind of fun. This one wasn't on my radar but depending on reviews of the narrative and if the gameplay gets a bit more interesting as you start unlocking more of the skill tree it might be one I pick up.

Gotta hit up Cyberpunk update first though as some friends who also bounced off 1.x said they were getting much more into it post patch, so maybe the same for me.
 
Last edited:
I've Tried Lords of the Fallen too. Again only due to curiosity on performance - not really my kind of game.

Best impression so far from UE5 games on my dated Vega56 / Ryzen 2700. It's unplayable initially - i need to lower resolution from 1440p to 1080p.
Then it was much better, but still bad. I had to wait until it has loaded everything from my HDD, or until it's done with compiling shaders.

But then it runs smooth like butter with ULTRA settings, if that was the name of the highest preset. Yes, i can use ultra without any compromise. Pretty surprising.
Unlike former UE5 experiences, this game did not show bad reconstruction artifacts from upscaling. It's worse than prev gen with TAA only ofc., e.g. i can now notice TAA smearing.
But there is n heavy noisy, flicker, or generally unstable image.
Anything works fine at good performance.

However, i have not left the initial cave scene, which is pretty small.
They expect me to run forward with W, then press V as well to run faster, and then press F to jump.
That's simply not possible with one human hand. After 5 attempts on the jump, i gave up. What were they thinking? :D

The visuals are not as impressive as they could be.
I do notice high details, but due to the low contrast / low saturation art style, it's just not very noticeable and the lighting feels pretty flat too.
The game surely has impressive moments and scenes later, i guess.

It feels like getting a large SSD would be the more urgent upgrade to my system then a new GPU. But even then i would not expect to get rid of it completely. I think we have to pay some price to get rid of loading times.

Really good. But it might be good to select lower resolutions automatically with old GPUs.
 
I think one of the reasons LotF is performing better than other UE5 titles is the fact that it doesn’t appear to be using virtual shadow maps. You can enable it with Unreal Engine Unlocker and it makes shadows look much better imo. There is a 10-30% performance penalty.


I feel like the added geometric detail from employing Nanite is wasted a bit with imprecise shadow maps. It would be good if they added VSMs as an option for the PC version.
 
1) Can you point me to an area where you saw streaming/popping issues? Was it during the camera cuts in cutscenes? I didn't really see any geometry pop at all, and only one camera cut I saw a brief texture pop. Camera cuts do always require special attention in games; you can pre-stream both nanite and virtual texture data in cutscenes to avoid issues on cuts (the Matrix demo does this), but the developers may not have set that up here. Overall the game looks reasonable, but it's clearly not a large studio with AAA polish.

It was most noticeable in indoor areas with lots of objects. The arcade and tv station. It might have happened in cutscenes too but don’t recall. It’s definitely pop-in and it’s both geometry and textures. Same thing happened in Talos. Talos was super easy to replicate. Look at a tree, turn around for a few seconds and then turn back to it. Or walk up to a bush and you can see the higher LOD leaves stream in. If it’s not Nanite clusters loading in then I don’t know how to explain it.

There was obvious DLSS fizzling on hair and edges of character clothing in the precinct diagnostic cutscene.

The detail on environment clutter is great. Pipes are perfectly round and little details like switches and barrel caps are fully modeled. Saw a few low poly electrical cables on the floor of a server room but overall the clutter is really well done.
 
I think one of the reasons LotF is performing better than other UE5 titles is the fact that it doesn’t appear to be using virtual shadow maps. You can enable it with Unreal Engine Unlocker and it makes shadows look much better imo. There is a 10-30% performance penalty.


I feel like the added geometric detail from employing Nanite is wasted a bit with imprecise shadow maps. It would be good if they added VSMs as an option for the PC version.

Looks like RT shadows equivalent from a IQ standpoint but 30% is a lot of deal with.

What I'd like to see at is UE5 based tech (VSM/Lumen/etc) vs hardware based RTX and see what the performance and IQ deltas are. I'm sure it'll happen at some point.
 
Looks like RT shadows equivalent from a IQ standpoint but 30% is a lot of deal with.

What I'd like to see at is UE5 based tech (VSM/Lumen/etc) vs hardware based RTX and see what the performance and IQ deltas are. I'm sure it'll happen at some point.
Regarding IQ deltas Unreal documentation mentions Ray Traced shadows take precendence due to better quality.
Ray-traced shadows still take precedence over VSMs as they generally provide the highest quality solution.
 
I don't think Lords of the Fallen uses hardware RT Lumen. I messed around with Unreal Engine Unlocker and turning settings on and off in relation to HW RT made no difference in terms of fps or visual output.
There still seems to be some confusion in regards to whether or not LotF uses HW RT (like in this TechPowerUp article from today or this YT vid) and I think by looking at the log files you can rule it out. The only mention of RT is in regards to it not being enabled in the project settings.

[2023.10.16-12.31.04:255][ 0]LogRendererCore: Ray tracing is disabled. Reason: disabled through project setting (r.RayTracing=0).

None of the presets enable it either. Here are the cvars set while switching through the presets:

Low to medium

Set CVar [[r.SkeletalMeshLODBias:1]]
Set CVar [[r.ViewDistanceScale:0.6]]
Set CVar [[r.FXAA.Quality:1]]
Set CVar [[r.TemporalAA.Quality:1]]
Set CVar [[r.TSR.History.UpdateQuality:1]]
Set CVar [[r.TSR.RejectionAntiAliasingQuality:1]]
Set CVar [[r.ShadowQuality:3]]
Set CVar [[r.Shadow.MaxResolution:1024]]
Set CVar [[r.Shadow.MaxCSMResolution:1024]]
Set CVar [[r.Shadow.RadiusThreshold:0.05]]
Set CVar [[r.Shadow.DistanceScale:0.7]]
Set CVar [[r.DistanceFieldAO:1]]
Set CVar [[r.CapsuleShadows:1]]
Set CVar [[r.Shadow.Virtual.SMRT.RayCountDirectional:4]]
Set CVar [[r.Shadow.Virtual.SMRT.RayCountLocal:4]]
Set CVar [[r.DFShadowQuality:2]]
Set CVar [[r.VolumetricFog.GridPixelSize:16]]
Set CVar [[r.LumenScene.Radiosity.ProbeSpacing:16]]
Set CVar [[r.Lumen.ScreenProbeGather.RadianceCache.NumProbesToTraceBudget:150]]
Set CVar [[r.Lumen.TranslucencyVolume.RadianceCache.NumProbesToTraceBudget:75]]
Set CVar [[r.LumenScene.DirectLighting.UpdateFactor:64]]
Set CVar [[r.LumenScene.Radiosity.UpdateFactor:256]]
Set CVar [[r.Lumen.Reflections.DownsampleFactor:8]]
Set CVar [[r.MotionBlurQuality:3]]
Set CVar [[r.AmbientOcclusionMaxQuality:60]]
Set CVar [[r.AmbientOcclusionLevels:-1]]
Set CVar [[r.AmbientOcclusionRadiusScale:1.5]]
Set CVar [[r.DepthOfFieldQuality:1]]
Set CVar [[r.RenderTargetPoolMin:350]]
Set CVar [[r.Bloom.ScreenPercentage:35.355]]
Set CVar [[r.FastBlurThreshold:2]]
Set CVar [[r.Upscale.Quality:2]]
Set CVar [[r.Filter.SizeScale:0.7]]
Set CVar [[r.DOF.Gather.AccumulatorQuality:0 ; lower gathering accumulator quality]]
Set CVar [[r.DOF.Gather.PostfilterMethod:2 ; Max3x3 postfilering method]]
Set CVar [[r.DOF.Gather.RingCount:3 ; low number of samples when gathering]]
Set CVar [[r.DOF.Scatter.ForegroundCompositing:0 ; no foreground scattering]]
Set CVar [[r.DOF.Scatter.BackgroundCompositing:0 ; no foreground scattering]]
Set CVar [[r.DOF.Recombine.Quality:0 ; no slight out of focus]]
Set CVar [[r.DOF.TemporalAAQuality:0 ; faster temporal accumulation]]
Set CVar [[r.DOF.Kernel.MaxForegroundRadius:0.006 ; required because low gathering and no scattering and not looking great at 1080p]]
Set CVar [[r.DOF.Kernel.MaxBackgroundRadius:0.006 ; required because low gathering and no scattering and not looking great at 1080p]]
Set CVar [[r.Streaming.MipBias:2]]
Set CVar [[r.Streaming.MaxNumTexturesToStreamPerFrame:3]]
Set CVar [[r.Streaming.Boost:1]]
Set CVar [[r.MaxAnisotropy:2]]
Set CVar [[r.Streaming.PoolSize:600]]
Set CVar [[r.TranslucencyLightingVolumeDim:32]]
Set CVar [[r.DetailMode:1]]
Set CVar [[r.MaterialQualityLevel:2 ; Medium quality]]
Set CVar [[r.SSS.Scale:0.75]]
Set CVar [[r.SSGI.Quality:1]]
Set CVar [[r.EmitterSpawnRateScale:0.25]]
Set CVar [[r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution:16.0]]
Set CVar [[r.SkyAtmosphere.FastSkyLUT.SampleCountMin:4.0]]
Set CVar [[r.SkyAtmosphere.FastSkyLUT.SampleCountMax:32.0]]
Set CVar [[r.SkyAtmosphere.SampleCountMin:4.0]]
Set CVar [[r.SkyAtmosphere.SampleCountMax:32.0]]
Set CVar [[r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat:0]]
Set CVar [[fx.Niagara.QualityLevel:1]]
Set CVar [[foliage.DensityScale:0.25]]
Set CVar [[grass.DensityScale:0.25]]

Medium to high

Set CVar [[r.SkeletalMeshLODBias:0]]
Set CVar [[r.ViewDistanceScale:0.8]]
Set CVar [[r.FXAA.Quality:3]]
Set CVar [[r.TSR.History.UpdateQuality:2]]
Set CVar [[r.TSR.ShadingRejection.Flickering:1]]
Set CVar [[r.ShadowQuality:5]]
Set CVar [[r.Shadow.CSM.MaxCascades:4]]
Set CVar [[r.Shadow.MaxCSMResolution:2048]]
Set CVar [[r.Shadow.RadiusThreshold:0.04]]
Set CVar [[r.Shadow.DistanceScale:0.85]]
Set CVar [[r.Shadow.CSM.TransitionScale:0.8]]
Set CVar [[r.AOQuality:1]]
Set CVar [[r.VolumetricFog.GridSizeZ:64]]
Set CVar [[r.Shadow.Virtual.MaxPhysicalPages:2048]]
Set CVar [[r.Shadow.Virtual.ResolutionLodBiasDirectional:-0.5]]
Set CVar [[r.Shadow.Virtual.ResolutionLodBiasLocal:0.0]]
Set CVar [[r.Shadow.Virtual.SMRT.RayCountDirectional:8]]
Set CVar [[r.Shadow.Virtual.SMRT.SamplesPerRayDirectional:4]]
Set CVar [[r.Shadow.Virtual.SMRT.RayCountLocal:8]]
Set CVar [[r.Shadow.Virtual.SMRT.SamplesPerRayLocal:4]]
Set CVar [[r.DFShadowQuality:3]]
Set CVar [[r.LumenScene.Radiosity.ProbeSpacing:8]]
Set CVar [[r.Lumen.ScreenProbeGather.RadianceCache.ProbeResolution:16]]
Set CVar [[r.Lumen.ScreenProbeGather.RadianceCache.NumProbesToTraceBudget:300]]
Set CVar [[r.Lumen.TranslucencyVolume.GridPixelSize:64]]
Set CVar [[r.Lumen.TranslucencyVolume.RadianceCache.NumProbesToTraceBudget:200]]
Set CVar [[r.LumenScene.DirectLighting.UpdateFactor:32]]
Set CVar [[r.LumenScene.Radiosity.UpdateFactor:128]]
Set CVar [[hex.LumenGIMaxSurfaceCachePrimitiveTasks:0]]
Set CVar [[hex.LumenGIMaxMeshCardTasks:128]]
Set CVar [[r.Lumen.Reflections.DownsampleFactor:2]]
Set CVar [[r.MotionBlur.HalfResGather:0]]
Set CVar [[r.AmbientOcclusionMipLevelFactor:0.6]]
Set CVar [[r.AmbientOcclusionMaxQuality:100]]
Set CVar [[r.DepthOfFieldQuality:2]]
Set CVar [[r.RenderTargetPoolMin:400]]
Set CVar [[r.LensFlareQuality:2]]
Set CVar [[r.BloomQuality:5]]
Set CVar [[r.Bloom.ScreenPercentage:50.000]]
Set CVar [[r.FastBlurThreshold:3]]
Set CVar [[r.Tonemapper.GrainQuantization:1]]
Set CVar [[r.LightShaftQuality:1]]
Set CVar [[r.Filter.SizeScale:0.8]]
Set CVar [[r.DOF.Gather.RingCount:4 ; medium number of samples when gathering]]
Set CVar [[r.DOF.Scatter.ForegroundCompositing:1 ; additive foreground scattering]]
Set CVar [[r.DOF.Scatter.BackgroundCompositing:1 ; no background occlusion]]
Set CVar [[r.DOF.Scatter.EnableBokehSettings:0 ; no bokeh simulation when scattering]]
Set CVar [[r.DOF.Scatter.MaxSpriteRatio:0.04 ; only a maximum of 4% of scattered bokeh]]
Set CVar [[r.DOF.Kernel.MaxForegroundRadius:0.012 ; required because of AccumulatorQuality=0]]
Set CVar [[r.DOF.Kernel.MaxBackgroundRadius:0.012 ; required because of AccumulatorQuality=0]]
Set CVar [[r.Streaming.MipBias:0]]
Set CVar [[r.Streaming.MaxNumTexturesToStreamPerFrame:0]]
Set CVar [[r.MaxAnisotropy:4]]
Set CVar [[r.VT.MaxAnisotropy:8]]
Set CVar [[r.Streaming.PoolSize:800]]
Set CVar [[r.TranslucencyLightingVolumeDim:48]]
Set CVar [[r.RefractionQuality:2]]
Set CVar [[r.SSR.Quality:2]]
Set CVar [[r.TranslucencyVolumeBlur:1]]
Set CVar [[r.MaterialQualityLevel:1 ; High quality]]
Set CVar [[r.SSS.Scale:1]]
Set CVar [[r.SSS.SampleSet:1]]
Set CVar [[r.SSS.Quality:-1]]
Set CVar [[r.SSGI.Quality:2]]
Set CVar [[r.EmitterSpawnRateScale:0.5]]
Set CVar [[r.ParticleLightQuality:1]]
Set CVar [[r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice:2]]
Set CVar [[r.SkyAtmosphere.FastSkyLUT.SampleCountMax:64.0]]
Set CVar [[r.SkyAtmosphere.SampleCountMax:64.0]]
Set CVar [[r.SkyLight.RealTimeReflectionCapture:1]]
Set CVar [[fx.Niagara.QualityLevel:2]]
Set CVar [[foliage.DensityScale:0.8]]
Set CVar [[grass.DensityScale:0.8]]
Set CVar [[r.HairStrands.Visibility.MSAA.SamplePerPixel:4]]
Set CVar [[r.AnisotropicMaterials:1]]

High to ultra

Set CVar [[r.ViewDistanceScale:1.0]]
Set CVar [[r.FXAA.Quality:4]]
Set CVar [[r.TemporalAA.Quality:2]]
Set CVar [[r.TSR.History.UpdateQuality:3]]
Set CVar [[r.TSR.History.GrandReprojection:1]]
Set CVar [[r.TSR.Velocity.Extrapolation:1]]
Set CVar [[r.TSR.RejectionAntiAliasingQuality:2]]
Set CVar [[r.Shadow.CSM.MaxCascades:10]]
Set CVar [[r.Shadow.MaxResolution:2048]]
Set CVar [[r.Shadow.RadiusThreshold:0.01]]
Set CVar [[r.Shadow.DistanceScale:1.0]]
Set CVar [[r.Shadow.CSM.TransitionScale:1.0]]
Set CVar [[r.Shadow.PreShadowResolutionFactor:1.0]]
Set CVar [[r.AOQuality:2]]
Set CVar [[r.VolumetricFog.GridPixelSize:8]]
Set CVar [[r.VolumetricFog.GridSizeZ:128]]
Set CVar [[r.Shadow.Virtual.MaxPhysicalPages:4096]]
Set CVar [[r.Shadow.Virtual.ResolutionLodBiasDirectional:-1.5]]
Set CVar [[r.LumenScene.Radiosity.ProbeSpacing:4]]
Set CVar [[r.LumenScene.Radiosity.HemisphereProbeResolution:4]]
Set CVar [[r.Lumen.TraceMeshSDFs.Allow:1]]
Set CVar [[r.Lumen.ScreenProbeGather.RadianceCache.ProbeResolution:32]]
Set CVar [[r.Lumen.ScreenProbeGather.ScreenSpaceBentNormal:1]]
Set CVar [[r.Lumen.ScreenProbeGather.DownsampleFactor:16]]
Set CVar [[r.Lumen.ScreenProbeGather.IrradianceFormat:0]]
Set CVar [[r.Lumen.ScreenProbeGather.StochasticInterpolation:0]]
Set CVar [[r.Lumen.ScreenProbeGather.TwoSidedFoliageBackfaceDiffuse:1]]
Set CVar [[r.Lumen.TranslucencyVolume.GridPixelSize:32]]
Set CVar [[r.Lumen.TranslucencyVolume.TraceFromVolume:1]]
Set CVar [[r.LumenScene.SurfaceCache.CardCaptureRefreshFraction:0.125]]
Set CVar [[r.LumenScene.Radiosity.UpdateFactor:64]]
Set CVar [[hex.LumenGIMaxMeshCardTasks:0]]
Set CVar [[r.Lumen.Reflections.DownsampleFactor:1]]
Set CVar [[r.Lumen.TranslucencyReflections.FrontLayer.Allow:1]]
Set CVar [[r.MotionBlurQuality:4]]
Set CVar [[r.AmbientOcclusionMipLevelFactor:0.4]]
Set CVar [[r.AmbientOcclusionRadiusScale:1.0]]
Set CVar [[r.Bloom.ScreenPercentage:70.711]]
Set CVar [[r.FastBlurThreshold:100]]
Set CVar [[r.Upscale.Quality:3]]
Set CVar [[r.Filter.SizeScale:1]]
Set CVar [[r.DOF.Gather.AccumulatorQuality:1 ; higher gathering accumulator quality]]
Set CVar [[r.DOF.Gather.PostfilterMethod:1 ; Median3x3 postfilering method]]
Set CVar [[r.DOF.Scatter.BackgroundCompositing:2 ; additive background scattering]]
Set CVar [[r.DOF.Scatter.EnableBokehSettings:1 ; bokeh simulation when scattering]]
Set CVar [[r.DOF.Scatter.MaxSpriteRatio:0.1 ; only a maximum of 10% of scattered bokeh]]
Set CVar [[r.DOF.Recombine.Quality:1 ; cheap slight out of focus]]
Set CVar [[r.DOF.TemporalAAQuality:1 ; more stable temporal accumulation]]
Set CVar [[r.DOF.Kernel.MaxForegroundRadius:0.025]]
Set CVar [[r.DOF.Kernel.MaxBackgroundRadius:0.025]]
Set CVar [[r.MaxAnisotropy:8]]
Set CVar [[r.Streaming.LimitPoolSizeToVRAM:0]]
Set CVar [[r.Streaming.PoolSize:1000]]
Set CVar [[r.TranslucencyLightingVolumeDim:64]]
Set CVar [[r.SSR.Quality:3]]
Set CVar [[r.SSR.HalfResSceneColor:0]]
Set CVar [[r.SceneColorFormat:4]]
Set CVar [[r.DetailMode:2]]
Set CVar [[r.SSS.SampleSet:2]]
Set CVar [[r.SSS.Quality:1]]
Set CVar [[r.SSS.HalfRes:0]]
Set CVar [[r.SSGI.Quality:3]]
Set CVar [[r.EmitterSpawnRateScale:1.0]]
Set CVar [[r.ParticleLightQuality:2]]
Set CVar [[r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice:4]]
Set CVar [[r.SkyAtmosphere.FastSkyLUT.SampleCountMax:128.0]]
Set CVar [[r.SkyAtmosphere.SampleCountMax:128.0]]
Set CVar [[fx.Niagara.QualityLevel:3]]
Set CVar [[foliage.DensityScale:1.0]]
Set CVar [[grass.DensityScale:1.0]]

Ultra back to low

Set CVar [[r.SkeletalMeshLODBias:2]]
Set CVar [[r.ViewDistanceScale:0.4]]
Set CVar [[r.FXAA.Quality:0]]
Set CVar [[r.TemporalAA.Quality:0]]
Set CVar [[r.TSR.History.UpdateQuality:0]]
Set CVar [[r.TSR.History.GrandReprojection:0]]
Set CVar [[r.TSR.ShadingRejection.Flickering:0]]
Set CVar [[r.TSR.Velocity.Extrapolation:0]]
Set CVar [[r.TSR.RejectionAntiAliasingQuality:0]]
Set CVar [[r.ShadowQuality:2]]
Set CVar [[r.Shadow.CSM.MaxCascades:1]]
Set CVar [[r.Shadow.MaxResolution:512]]
Set CVar [[r.Shadow.MaxCSMResolution:512]]
Set CVar [[r.Shadow.RadiusThreshold:0.06]]
Set CVar [[r.Shadow.DistanceScale:0.6]]
Set CVar [[r.Shadow.CSM.TransitionScale:0.25;]]
Set CVar [[r.Shadow.PreShadowResolutionFactor:0.5]]
Set CVar [[r.DistanceFieldAO:0]]
Set CVar [[r.CapsuleShadows:0]]
Set CVar [[r.Shadow.Virtual.MaxPhysicalPages:512]]
Set CVar [[r.Shadow.Virtual.ResolutionLodBiasDirectional:0.0]]
Set CVar [[r.Shadow.Virtual.ResolutionLodBiasLocal:1.0]]
Set CVar [[r.Shadow.Virtual.SMRT.RayCountDirectional:0]]
Set CVar [[r.Shadow.Virtual.SMRT.SamplesPerRayDirectional:2]]
Set CVar [[r.Shadow.Virtual.SMRT.RayCountLocal:0]]
Set CVar [[r.Shadow.Virtual.SMRT.SamplesPerRayLocal:2]]
Set CVar [[r.DFShadowQuality:1]]
Set CVar [[r.VolumetricFog.GridPixelSize:32]]
Set CVar [[r.VolumetricFog.GridSizeZ:32]]
Set CVar [[r.LumenScene.Radiosity.ProbeSpacing:32]]
Set CVar [[r.LumenScene.Radiosity.HemisphereProbeResolution:3]]
Set CVar [[r.Lumen.TraceMeshSDFs.Allow:0]]
Set CVar [[r.Lumen.ScreenProbeGather.RadianceCache.ProbeResolution:8]]
Set CVar [[r.Lumen.ScreenProbeGather.RadianceCache.NumProbesToTraceBudget:100]]
Set CVar [[r.Lumen.ScreenProbeGather.ScreenSpaceBentNormal:0]]
Set CVar [[r.Lumen.ScreenProbeGather.DownsampleFactor:32]]
Set CVar [[r.Lumen.ScreenProbeGather.IrradianceFormat:1]]
Set CVar [[r.Lumen.ScreenProbeGather.StochasticInterpolation:1]]
Set CVar [[r.Lumen.ScreenProbeGather.TwoSidedFoliageBackfaceDiffuse:0]]
Set CVar [[r.Lumen.TranslucencyVolume.GridPixelSize:128]]
Set CVar [[r.Lumen.TranslucencyVolume.TraceFromVolume:0]]
Set CVar [[r.Lumen.TranslucencyVolume.RadianceCache.NumProbesToTraceBudget:50]]
Set CVar [[r.LumenScene.SurfaceCache.CardCaptureRefreshFraction:0]]
Set CVar [[r.LumenScene.DirectLighting.UpdateFactor:256]]
Set CVar [[r.LumenScene.Radiosity.UpdateFactor:1024]]
Set CVar [[hex.LumenGIMaxSurfaceCachePrimitiveTasks:256]]
Set CVar [[hex.LumenGIMaxMeshCardTasks:64]]
Set CVar [[r.Lumen.Reflections.DownsampleFactor:4]]
Set CVar [[r.Lumen.TranslucencyReflections.FrontLayer.Allow:0]]
Set CVar [[r.MotionBlurQuality:0]]
Set CVar [[r.MotionBlur.HalfResGather:1]]
Set CVar [[r.AmbientOcclusionMipLevelFactor:1.0]]
Set CVar [[r.AmbientOcclusionMaxQuality:0]]
Set CVar [[r.AmbientOcclusionLevels:0]]
Set CVar [[r.AmbientOcclusionRadiusScale:1.2]]
Set CVar [[r.DepthOfFieldQuality:0]]
Set CVar [[r.RenderTargetPoolMin:300]]
Set CVar [[r.LensFlareQuality:0]]
Set CVar [[r.BloomQuality:4]]
Set CVar [[r.Bloom.ScreenPercentage:25.000]]
Set CVar [[r.FastBlurThreshold:0]]
Set CVar [[r.Upscale.Quality:1]]
Set CVar [[r.Tonemapper.GrainQuantization:0]]
Set CVar [[r.LightShaftQuality:0]]
Set CVar [[r.Filter.SizeScale:0.6]]
Set CVar [[r.Streaming.MipBias:16]]
Set CVar [[r.Streaming.MaxNumTexturesToStreamPerFrame:1]]
Set CVar [[r.Streaming.Boost:0.3]]
Set CVar [[r.MaxAnisotropy:0]]
Set CVar [[r.VT.MaxAnisotropy:4]]
Set CVar [[r.Streaming.LimitPoolSizeToVRAM:1]]
Set CVar [[r.Streaming.PoolSize:400]]
Set CVar [[r.TranslucencyLightingVolumeDim:24]]
Set CVar [[r.RefractionQuality:0]]
Set CVar [[r.SSR.Quality:0]]
Set CVar [[r.SSR.HalfResSceneColor:1]]
Set CVar [[r.SceneColorFormat:3]]
Set CVar [[r.DetailMode:0]]
Set CVar [[r.TranslucencyVolumeBlur:0]]
Set CVar [[r.MaterialQualityLevel:0 ; Low quality]]
Set CVar [[r.SSS.Scale:0]]
Set CVar [[r.SSS.SampleSet:0]]
Set CVar [[r.SSS.Quality:0]]
Set CVar [[r.SSS.HalfRes:1]]
Set CVar [[r.SSGI.Quality:0]]
Set CVar [[r.EmitterSpawnRateScale:0.125]]
Set CVar [[r.ParticleLightQuality:0]]
Set CVar [[r.SkyAtmosphere.AerialPerspectiveLUT.SampleCountMaxPerSlice:1]]
Set CVar [[r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution:8.0]]
Set CVar [[r.SkyAtmosphere.FastSkyLUT.SampleCountMin:2.0]]
Set CVar [[r.SkyAtmosphere.FastSkyLUT.SampleCountMax:16.0]]
Set CVar [[r.SkyAtmosphere.SampleCountMin:2.0]]
Set CVar [[r.SkyAtmosphere.SampleCountMax:16.0]]
Set CVar [[r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat:1]]
Set CVar [[r.SkyLight.RealTimeReflectionCapture:0]]
Set CVar [[fx.Niagara.QualityLevel:0]]
Set CVar [[foliage.DensityScale:0]]
Set CVar [[grass.DensityScale:0]]
Set CVar [[r.HairStrands.Visibility.MSAA.SamplePerPixel:1]]
Set CVar [[r.AnisotropicMaterials:0]]

Maybe someone else can find something interesting but nothing jumped out at me in regards to HW RT.
 
It would be good if they added VSMs as an option for the PC version.
I'm obviously biased, but yeah it would be nice as a high end option :). As a game that came from UE4 I imagine they didn't want to add more risk by switching shadow techniques but it does clean up the shadows and add a fair amount of lighting depth in your comparisons. In principle VSMs should work very well in this game as it is largely static geometry with a few dynamic parts, so VSM caching should work great. That said, if it hasn't been tested by the developers at all there are likely still edge cases that cause spurious invalidations and so on that contribute to the performance overhead; they do require a small amount of care to keep things working optimally, albeit less than previous shadow map techniques.

Looks like RT shadows equivalent from a IQ standpoint but 30% is a lot of deal with.
In this case the non-VSM shadows seem to be using a very short range and small number of cascades, presumably to keep performance high on lower end PCs. VSMs going out to the horizon instead are going to cost more, but in a game like this you could likely mitigate a lot of that with caching and scalability settings if desired.

Regarding IQ deltas Unreal documentation mentions Ray Traced shadows take precedence due to better quality.
VSMs can often attain subpixel resolution similar to ray-traced shadows, but shadow-map-based techniques will always be limited in terms of area lights. VSMs with SMRT can do a plausible job of the first occluder with small to moderate-sized area lights but you can't push the area light size too far, and overlapping regions of soft and hard shadows are always going to have some artifacts with shadow maps, since they simply do not have the data required to do a physically accurate solution in those cases.

There's no doubt we'd all prefer to not use shadow maps anymore but even ignoring platform support, we are unfortunately still limited by the ray tracing BVH situation for the time being.

It was most noticeable in indoor areas with lots of objects. The arcade and tv station. It might have happened in cutscenes too but don’t recall. It’s definitely pop-in and it’s both geometry and textures.
Weird, I did look specifically at those areas and didn't see anything. Object count shouldn't really affect things on this front assuming they are Nanite. If it was longer distances it could be something like HLOD (also not related to Nanite, etc) but that shouldn't be a factor in the scenes you mention. Not sure what could be going on... is it possible to capture a video? I'm not sure why it doesn't repro for me here. 🤷‍♂️
 
There's no doubt we'd all prefer to not use shadow maps anymore but even ignoring platform support, we are unfortunately still limited by the ray tracing BVH situation for the time being.

The Ubisoft folk have been bragging about cracking this problem ever since that Avatar game was shown off (2?) years ago. Unfortunately nothing's come out yet so no conference talk about how they're moving all that foliage around in a BVH in realtime :confused:

I do wonder if the visibility bitmask strategy could work for virtualized shadow map filtering (https://arxiv.org/pdf/2301.11376.pdf). They horizon test multiple "sectors" over a hemisphere, and can consequently get an independent depth/"thickness" estimation for each one. Could narrow the hemisphere to the area represented by the light and independently test different sectors. Might be able to get the inner penumbra, the problem area where you're assuming geometry, to be tested independently of the outer area where you have visibility. You could carry it further by allowing artist bias dependent on how far the horizon test traverses into occluded areas, so vertical (towards the light) traversal could go farther than horizontal/perpendicular traversal, thus "thin" objects, from the light's perspective, could be assumed to be thin vertically and horizontally, while "thick/wide" objects could be assumed to be solid walls, and you'd only (ideally) assume even this for the unknown parts of the penumbra.
 
I think one of the reasons LotF is performing better than other UE5 titles is the fact that it doesn’t appear to be using virtual shadow maps. You can enable it with Unreal Engine Unlocker and it makes shadows look much better imo. There is a 10-30% performance penalty.


I feel like the added geometric detail from employing Nanite is wasted a bit with imprecise shadow maps. It would be good if they added VSMs as an option for the PC version.
Can you share how you managed to enable VSM? Is UUU a must?
 
Can you share how you managed to enable VSM? Is UUU a must?
I haven't found another way of enabling it personally. Putting the command into .ini files didn't work. Here's the steps I use:

1. Disable Anti-Cheat with the instructions from this guide (which will make the game run in offline mode only)
2. Get Universal Unreal Engine 5 Unlocker (One-time Patreon membership required afaik, unless the author also released a free version somewhere)
3. Boot the game via the .exe in the folder as described in the guide
4. Open the console via the Tilde key or whatever key you set
5. Enter "r.Shadow.Virtual.Enable 1"
 
Seeing how smooth are the flyby transitions in Spiderman 2, if after all the IE5 updates in the last two years, they could get those traversals without any stutter

 
Back
Top