Enhanced Graphics And Optimization Guide For For State Of Decay 2 PC Version
First off I would like to thank XBox Game Studios and Undead Labs for producing such an amazing game. I also want to thank UL for the constant care and updating of the game. We appreciate it.
This guide is an effort to help users identify some of the issues with how this game performs on PC and how to fix or mitigate those issues so we get the most optimal gaming experience and leave no visual fidelity, or frame performance on the table. Before we do we first need to understand that State of Decay 2 does not perform as well as it should relative to the hardware it runs on, no matter how powerful, or current that particular hardware is. There isn't even a debate about this the game is seriously CPU limited. Now some may disagree if they are basing the game performance on max framerate, average framerate, or the famous 'my eyes don't lie' test, but these alone never tell the full story of how well a game is performing or how well optimized a game is. There are other signs that can point you to the truth of what is really going on.
The problem rears it's ugly head: Low GPU Utilization At Native Resolution.
GPU at 69% load waiting on instructions from the CPU. Classic sign of CPU limitation or CPU bottleneck. 1440p
Headed the opposite direction. GPU at 64% waiting on instructions from the CPU. 1440p.
Notice the two screenshots above. The green bar graph represents the total load my GPU is under during what is a graphic intensive workload, as in playing a game. Ideally you want the GPU to be as close to 100 percent load as possible. This way we know that piece of hardware is at it's technical limit and is not waiting on the CPU before it needs to start another task. In other words, while gaming the most well optimized games with complex 3D models and graphics will usually put a GPU under 99-100 percent load, or a GPU limitation, which in a well optimized game this is what we want. GPU load or utilization as close to max as possible and a much lower CPU utilization.
In State of Decay 2 in the open world the GPU is constantly in a situation where it needs to wait for the CPU, which is a tell tell sign of a CPU limitation, or CPU bottleneck. SOD2 does not do a great job of utilizing the CPU. The way to prove this is to drop down to a resolution lower than your native. If you game at 1080p, drop to 720. If you game at 1440, drop to 1080p and so on. What you will notice is you will not get the massive gain in FPS you normally get when you are GPU limited. You get a minor bump in FPS and your GPU utilization will just be lower. The game using the CPU so poorly in many parts of SOD2 leads to some really bad 1% lows, which in layman's terms equals a stuttering playing experience if those lows get around the 50 fps range.
Now as long as you are not rocking a 10 year old CPU this should not be happening. The other day a user with a 13900K and an RTX 4090 reported only getting 145 FPS and some in the comments said he was ok. Actually no. I have been building and testing gaming PCs for 9, going on 10 yrs. 145 fps on a 5-6 year old game that is not as graphically demanding as other major titles and almost 3,000 dollars worth of cutting edge PC hardware don't add up folks. That is some bad math.
Stop crying Tone! How do we address this issue on our end?
Well there is really nothing we can do to get the FPS our hardware is capable of, for lack of a better term. We would need some kind of optimization update from the devs, maybe now since the infestation update is done...hint hint, but yeah, not likely as the game is old now and optimization on UL's end won't be able to help a dead unit that is the last gen Xbox. That hardware is outdated and it would not be fair to optimize the game for PC users and leave the Xbox users in the cold. At the end of the day console players keep the lights on and pay the bills for publishers and developers. It's not us PC users.
What we can do is improve our 1% lows (gain a more stable playing experience) and improve the visual fidelity since we have so much GPU headroom. Let's get started.
Nvidia DLDSR and DSR - AMD Virtual Super Resolution
Not to get too technical, but whether you have an Nvidia or AMD GPU you can take advantage of advanced forms of super sampling which renders the image in your native resolution to a larger resolution, then shrinks it back down to native to improve the graphical fidelity. I won't get into how to enable this. It's an easy YouTube search, but this is a great way to force our GPU to work harder since it is constantly waiting on the CPU to get busy in the open world, especially while driving. We won't improve our max framerates, they will drop a bit, but they ain't high enough anyway most of the time because of how bad some parts of these maps are, but we will have much better visuals and we will attempt to stabilize our 1% lows later in the guide. Those are more important anyway.
DLDSR and DSR option in Nvidia Control Panel
In the screenshot above is where you would activate DLDSR and DSR if you have an Nvidia card. DLDSR is superior to regular DSR as it uses the tensor cores on RTX GPUs. This enables the super sampling to happen at less of a performance cost. And it looks damn good when it is used in State of Decay 2. If you have an Nvidia RTX card you should be using DLDSR selections over DSR selections always. The guy I mentioned with the RTX 4090 gaming at 1440p. If you see this, you need to do this. You also need to buy a 4k monitor, but I digress.
Let's Try And Stabilize Our 1% Lows: MSI Afterburner/Riva Tuner/In Game Settings.
We now need to tune some things in the actual game. Higher framerates are not always good, especially if they are matched with really crappy 1% lows, or if they surpass the refresh rate of your monitor. We want as smooth a playing experience as possible when we are playing games like this that are so CPU limited. So let's cap our framerate with Riva Tuner to stop the fluctuating FPS and keep our Max, Avg. and 1% low in a nice range of each other. YouTube has probably hundreds of videos teaching how to download MSI Afterburner/Riva Tuner, set it up for capping the framerate and also enabling hardware monitoring so you can check your stats in real time. I don't have time to go into any of that here, but I will post a few screenshots.
My State of Decay Beta exe file set to cap my framerate at 120
Riva Tuner OSD enabled to check FPS information in real time. Bottom left.
In Game Settings:
These settings are assuming everyone has already enabled their form of super sampling in the driver and then applied the new resolution in game, be it Nvidia or AMD. That step is very important as it will allow the GPU to work harder and give us some better visuals since it tends to wait around quite a bit in this game. We don't want a GPU to wait around, EVER! We want them working for the money we paid. Set your super sampling to as high a resolution as you can without your 1% lows dipping below 50-55 fps, whichever you can stand. It will be different for everyone based on hardware and native resolution. The RTX 4090 guy will probably need to set his to some resolution not yet known to mankind.
- Gamma: This setting is very powerful when it is lowered. The lighting, shadows, ambient occlusion. Everything hits different. Now when there is little or no light, it will be dark, as seen in the screenshot above, but when there is a light source at night you will appreciate the effect it has on the game a lot more. Gamma is tricky as we all have different eyes. If you are like me and prefer darker nights, lower your gamma. The lighting during the day and night and the shadow effects are better with lower gamma. Mine is set here, but this setting is user preference.
Somewhere less than 25 percent I guess.
- FOV: Situational. Underrated setting. I have observed better framerates when this is lowered combined with the other settings coming later in the guide. If you can move out of your comfort zone and try 60, or maybe 55 it's cool. I have been using 60 lately from my normal 85. What happens is less of the world is seen, so less is rendered, but with the super sampling enabled and the engine ini tweak coming later, everything just pops at you. Headphones will help you with situational awareness since you don't see as much of the map. Driving is easier and you see less pop in because as mentioned less in on screen being rendered at a distance. This is optional, so experiment with it.
- Vsync: Situational. If you hate screen tearing ( I cannot play a game with it), enable this, but it will most likely induce stuttering, which is what we want to cut down on. If you have a Gsync or Freesync monitor try enabling vsync in the driver combined with either adaptive sync technology. Adaptive sync monitors are a great way to eliminate vsync induced stutter. They are worth the investment. Capping your framerate below your monitor's refresh rate is also helps here, as we have already done earlier, but I have seen incidents of screen tearing at lower fps than my refresh rate plenty of times. Having Gsync on in my monitor and Vsync on in the driver is the only thing that totally eliminates it in games for me.
- Motion Blur: Off. This is one of the worst settings in any game. In a game that is stuttering the last thing you want is a blurry image on top of that. Never turn this on.
- World of Detail: Low-Ultra. I want to say this is related to draw distance, but I would be lying. When you look at mountains far away and switch this from low to ultra I don't see a difference and I don't see an FPS impact either. You can set this to anything between low and ultra. At ultra it does seem that zombies spawn in the road more naturally when you are driving at speed, but I am not 100 percent sure about this one and not afraid to admit it. I do stand by the minimal FPS impact, especially compared to the two heavy hitters up next.
- Shadow quality: High. As in 99.99 percent of PC games, shadows charge a heavy price for their usage. At ultra lighting and shadows look great, but with shadows set to high you have to really look to see the difference between ultra and the FPS difference is significant. You can lose 8-12 FPS or more just switching to ultra from high shadows! just not worth it IMO, unless you have the headroom and 1% lows are not close to 50 fps. Once you drop down to medium things start to fall apart. You will notice a weird haze caused by the sunlight and light in general. It looks like fog, very ugly. You can reduce this strange effect by lowering gamma, but it can still be seen. Low is no shadows at all. Medium or Low shadows should only be selected by those who prefer this setting, not sure who that could be. Be advised Ultra shadows are taxing in this game and in almost every game. Even if your system can handle it they induce stutter you are better off not having. Ultra is not always better.
- Foliage Quality: High-Ultra. Unlike shadows where there is not enough of a discernable difference to justify a 10 or more fps decrease, Ultra foliage compared to high can be seen more easily. On high grass will not appear when you are roughly 20 meters away, say the distance from the front container at the Providence truck stop to that huge grass lot that leads to the farm. Standing on that container at ultra you can see the edges of the grass popping up, on high it disappears until you run across the street to see it. Similar FPS hit as shadows. While driving anytime foliage is less than ultra you see more vegetation pop in. The lower you set this the worse it is. Medium settings you can actually see foliage appear magically ahead of you as you are jogging at times. Also as you drop this lower there is less grass in the game, hurting the aesthetics. This and shadows are the most expensive graphical options. I have mine set to high, even though driving at speed on certain maps you will see grass just appear in front of you, but if you can pay the price for ultra go ahead. Just be advised setting too many options to Ultra will actually induce stuttering. I can personally set this to ultra, but my game plays better with this set to high.
- Texture Quality: VRAM/Resolution dependent. This is why you want your OSD hardware monitor active to test your VRAM usage. If you have an 8GB GPU you will be good for anything up to 4K super sampled. More than 8 ,like 16, sky is the limit. Super sample as high as your framerates allow. No worries at all. Textures are probably the most important setting in the game next to shadows and lighting. This should be set as high as possible. Those with 4, or oh no, 3GB of VRAM (NVidia was wrong for that mess) you need to watch your VRAM usage. When VRAM spills over the game will try and draw resources from system RAM. Always a bad spot to be in. The good thing is this game actually looks pretty good using medium textures. Things like cars and signs will look a tad blurry from a distance, but the game still looks good. High and Ultra I have a hard time seeing a difference at all. This only impacts FPS if you go over your VRAM limit. 99 percent of us will be able to max this out as long was we choose a proper resolution to super sample in.
- Post Process Quality: Low-Ultra. This mainly impacts motion blur and adds some darkness around the edges of the screen at night. Motion blur should be set to off anyway, so this can be set to low-ultra as I see not much of an fps hit. This option also enables or disables lens flare. When the sun is in the right place above you set this to anything but low and you get a chance to catch some lens flare as seen in the pic below. Low disables the effect.
Lens Flare effect at the Farmland Compound in Trumbull Valley. 3414x1920p Nvidia DLDSR.
- Effects Quality: Low-Ultra. Honestly did my best to figure out what this is. Checked mostly at fire barrels to see if I saw a difference in the flame and did not no matter the setting. I did not check the trap explosives which I plan on doing soon. I saw no fps hit. Further testing in the works.
- Ambient Occlusion: Medium. This is basically a shadowing technique that makes lighting and shadows look more realistic, it has the ability to make 'shadows within shadows' which is a really rough way to describe it. Let's say a shadow casts upon a car and lighting near the wheel well hits it a certain way. With ambient occlusion you will likely see the details of the tire treads and other things in that area. When this is turned off you will see less texture and detail. In a dark room with only one light source (The lights from your car) this will really hit hard and the room will look realistically dark, especially when your gamma is lowered. This light appears to generate from a known area, and not just a bunch of light shining in randomly. There is not much difference between medium and ultra in my testing. Not much of an fps hit, so you can raise this if you choose to.
- Anti Aliasing Quality: Medium-Ultra. Since we are super sampling our need to use anti aliasing is lowered, but you will still see jaggies from a far off if you stand on a car or container and point your weapon at a cell tower from about 200 or so meters away. At medium, even at 4k super sampling you will still see shimmering. At ultra you will see the tower with no shimmering. Moderate fps hit as UL chose to use TAA for anti aliasing which is a post process effect. Always a safe and solid option.
Some takeaways before we get to the engine ini file adjustments.
- Setting all of your graphics options to Ultra will induce more stuttering. This is common in a lot of games. Many devs have gone on record most games are optimized for high settings. Using super sampling eliminates the need to use Ultra across the board, especially if you have an RTX Nvidia card and can use DLDSR to super sample. It is flat out amazing and this game LOVES it! Save your Ultra settings flat across the board for your screenshots.
- This game's environment is always changing, so it is nearly impossible to create identical testing scenarios for dead accurate results. We do the best we can. Looking at the shadows on the ground and the natural lights in the sky move as you play just reminds you how quickly testing conditions can change.
- All of our systems are different. This is why devs have a hard time porting console games to PC. It has to be a tremendous headache for them. You will need to determine where you stand in all of this. If you have an old, weak GPU like a GTX 750, this guide will probably not help you as much since you probably won't be as CPU limited as those of us with more powerful graphics cards.
Engine INI Tweaks
- In file explore search bar copy and paste this and search: %LOCALAPPDATA%\StateOfDecay2\Saved\Config\WindowsNoEditor\
- Double click on Engine.ini
Engine.ini is what we need. Double click.
- Copy and past. Then save:
[system settings]
r.Streaming.Boost=1
r.FastVRam.EyeAdaptation=1
r.bForceCPUAccessToGPUSkinVerts=1
r.ViewDistance=5
r.ViewDistanceScale=5
r.LandscapeLODDistributionScale=3
r.LandscapeLOD0DistributionScale=3
r.StaticMeshLODDistanceScale=0.01
r.MaxAnisotropy=16
grass.CullDistanceScale=4
foliage.LODDistanceScale=5
foliage.MinimumScreenSize=0.00000001
foliage.MaxOcclusionQueriesPerComponent=128
foliage.MinInstancesPerOcclusionQuery=65536
r.SkeletalMeshLODBias=-3
r.SkeletalMeshLODRiusScale=0.01
r.Emitter.FastPoolEnable=1
r.EmitterSpawnRateScale=3.0
r.HLOD=1
r.HLOD.DistanceScale=3.0
r.HLOD.MaximumLevel=1
r.MipMapLODBias=0
r.MaxQualityMode=1
r.DetailMode=2
r.MaterialQualityLevel=1
r.HairStrands.DeepShadow.SuperSampling=1
r.TessellationAdaptivePixelsPerTriangle=128
r.Water.WaterMesh.TessFactorBias=12
r.Fog=1
r.FogDensity=0.02
r.FogStartDistance=6
r.VolumetricFog.GridDivisor=30
r.VolumetricFog.GridPixelSize=8
r.VolumetricFog.GridSizeZ=64
r.VolumetricFog.Jitter=1
r.VolumetricFog.InjectShadowedLightsSeparately=1
r.VolumetricFog.InverseSquaredLightDistanceBiasScale=1.000000
r.VolumetricFog.LightFunctionSupersampleScale=2.000000
r.VolumetricCloud.HighQualityAerialPerspective=1
r.VolumetricRenderTarget=1
r.TranslucencyVolumeBlur=0
r.TranslucentLightingVolume=1
r.LightFunctionQuality=1
r.LightShaftQuality=1
r.LightMaxDrawDistanceScale=3
r.HighQualityLightMaps=1
r.TrueSkyQuality=1
r.SkyLightingQuality=1
r.VolumetricCloud=1
r.VolumetricCloud.SkyAO=1
r.VolumetricCloud.SkyAO.Filtering=1
r.VolumetricCloud.ShadowMap=1
r.VolumetricCloud.ShadowMap.MaxResolution=2048
r.VolumetricCloud.SkyAO.MaxResolution=2048
r.VolumetricRenderTarget.Mode=1
r.SkylightIntensityMultiplier=0.4
r.SkyAtmosphere=1
r.SupportSkyAtmosphere=1
r.SkyAtmosphere.LUT32=1
r.SkyAtmosphere.FastSkyLUT=0
r.SkyAtmosphere.MultiScatteringLUT.HighQuality=1
r.SkyAtmosphere.AerialPerspectiveLUT.FastApplyOnOpaque=0
r.SkyAtmosphere.TransmittanceLUT.UseSmallFormat=0
r.SkyAtmosphere.AerialPerspectiveLUT.Depth=96
r.SkyAtmosphere.AerialPerspectiveLUT.DepthResolution=16.0
r.SkyAtmosphere.SampleCountMin=64.0
r.SkyAtmosphere.SampleCountMax=128.0
r.SkyAtmosphere.DistanceToSampleCountMax=128
r.ShadowQuality=5
r.Shadow.RadiusThreshold=0.03
r.Shadow.DistanceScale=3.0
r.Shadow.CSMDepthBias=20
r.Shadow.MinResolution=4096
r.Shadow.MaxResolution=4096
r.Shadow.CSM.TransitionScale=2.0
r.Shadow.PreShadowResolutionFactor=1.0
r.Shadow.FadeResolution=0
r.DistanceFieldShadowing=1
r.Shadow.PerObject=1
r.ContactShadows=1
r.Shadow.AllowForegroundShadows=1
r.AmbientOcclusionLevels=2
r.AmbientOcclusionMaxQuality=100
r.DFShadowQuality=3
r.DFFullResolution=1
r.LensFlareQuality=3
r.ParticleLightQuality=2
r.RefractionQuality=3
r.SSR.Quality=4
r.SSR.MaxRoughness=1
r.SSS.Scale=1
r.SSS.SampleSet=2
r.SSGI.Quality=4
r.DefaultFeature.AntiAliasing=2
r.PostProcessAAQuality=6
r.ScreenPercentage=100
r.TemporalAASamples=32
r.TemporalAACurrentFrameWeight=0.12
r.TemporalAAFilterSize=1.0
r.TemporalAACatmullRom=1
r.TemporalAAPauseCorrect=1
r.BloomQuality=3
r.EyeAdaptationQuality=3
r.Color.Mid=0.35
r.SceneColorFormat=4
r.TonemapperGamma=2.6
r.Tonemapper.Quality=3
r.TonemapperFilm=1
r.Tonemapper.Sharpen=0.33
r.FastBlurThreshold=0
r.MotionBlurQuality=0
r.MotionBlurQuality=0
r.MotionBlur.Amount=0
r.MotionBlurSeparable=0
r.DepthOfFieldQuality=0
r.DepthOfField.FarBlur=0
r.DefaultFeature.MotionBlur=0
r.SceneColorFringe.Max=0
r.SceneColorFringeQuality=0
r.MotionBlur.Max=0
r.Tonemapper.GrainQuantization=0
[/script/engine.userinterfacesettings]
ApplicationScale=0.75
That is it. All done. I take no credit for these ini settings. All credit goes to Alex at Naguide. I will edit this and update as I continue to test. Thanks for reading.
Nvidia DLDSR 4K Ultra. 100 FOV
Nvidia DLDSR 4K Ultra. 100 FOV
Nvidia DLDSR 4K Ultra. 100 FOV