About this mod
Optimized Scalability Setting Groups. Currently optimizes the following groups: Ambient Occlusion Quality, Shadow Quality, Foliage Quality, and Texture Quality.
- Permissions and credits
Ambient Occlusion Quality: Recommended: High (Ultra is just the original Ultra, and is there for comparison purposes). Only High was significantly changed.
Shadow Quality ..................: Recommended: Ultra, but if your GPU cannot handle the car headlight shadows* then use High.
Foliage Quality ...................: Recommended: High, or Ultra if you can. If you have more GPU headroom, then edit Ultra's grass.DensityScale to 0.75 (or higher**).
Texture Quality ...................: Recommended: High (8x AF) or Ultra (16x AF***) if you have 4gb+ of vram. Otherwise, medium for 3gb vram... or low for 2gb vram.
* I optimized these ultra headlight shadows so that they're just barely looking good, and it's really the only significant difference between High and Ultra.
** Note that much past 0.75 the grass sparseness decreases to the point where the transition between grass and no grass becomes obvious.
*** I literally cannot tell the difference between 8x or 16x, even if I pause the game and look for it (and I know what to look for) -- we just don't normally see any textures (including distant roads) at the extreme angles required for there to be a noticeable difference with the textures this game uses. So, you may as well get the extra ~1-2 fps from using 8x AF imo.
If you modify the files, be sure to set them back to read-only before starting the game.
I also recommend using Notepad++ to edit these files.
I barely consider this a mod, but I'm going to call this mod from here on out for simplicity's sake...
What's in this mod?
Two files: Scalability.ini and Engine.ini.
The Scalability.ini file contains the changes to the scalability groups and is the main portion of this mod. The Engine.ini file for the most part really just adds the line:
r.Streaming.FramesForFullUpdate=17
This spreads out the work of the streaming system does over 17 frames instead of the default 5 frames. Any higher than that, and you'll begin to notice that the streaming engine is lagging behind a bit. This reduces CPU usage a bit. I extensively tested how high I could go while downclocking my LCD to 50hz... so if you're playing at a stable 60hz (or higher), you can probably raise this value by a relative amount (for example, at 60hz you can get away with 20 frames). So basically divide your minimum stable fps by 3 and round down.
All the other* settings changes I tried in Engine.ini either a) aren't actually applied for some reason, or b) are the engine's internal default values already.
* There are other setting changes that "work", but don't actually improve the gaming experience in terms of increased performance or smoothness (for example changing r.Streaming.HLODStrategy to 2, or disabling the streaming system altogether). This is mainly because I was never able to get the game to "unlock" the use of all my vram on a 8gb card (the engine seems to limit max VRAM usage to around 70%) no matter what I tried. If you think a setting warrants re-testing, let me know in the comments.
Who is this mod for?
The most obvious group of people who would benefit from this mod are people who can almost but not quite run every setting group on Ultra, and so end up running most things on Ultra (except for some or all of the above setting groups).
Then there's people who are forced to run with Foliage Quality set to Low (which turns off grass) because they can't really run High or Ultra, but won't run Medium or Low because it kinda looks worse than no grass at all. Now medium and low doesn't look so bad. Same for Shadows.
Or you CAN AND DO run the game on all Ultra settings, but want more headroom to run a heavy Reshade profile... or to reduce GPU temps for whatever reason.
Or you just wanna play around with tweaking the settings yourself and want a base file to start with that has all the original settings. I got you covered, too.
What if's...
I don't like what you did to some of these settings...
Then edit these files yourself! It's all right there in the file for you -- both the original settings and my optimized settings. I documented as much as I reasonably could.
I think you overlooked some optimization/performance setting in these files...
Let me know in the comments. I probably already tested it and determined it either had a) no effect; or b) a performance/smoothness regression -- but I may be willing to re-test stuff.
Installation:
1) Make a backup copy of your ..\Saved\Config\ folder for State of Decay 2 (the folder that contains the WindowsNoEditor folder). If you're using the Steam verson, it should be located here: %userprofile%\AppData\Local\StateOfDecay2\Saved\Config\WindowsNoEditor\
2) Extract this mod into the Saved folder, so that it overwrites the contents of the WindowsNoEditor folder.
It will only overwrite two files: Scalability.ini. and Engine.ini
3) Play around with the settings ingame.
Un-installation:
1) Restore the backup you made during step #1 of the installation to the original location.
Other recommended things to do/try:
1) Nvidia card owners: Use the 446.14 drivers if you can, because it's the last driver that has a very low impact on DPC latency (but really only when the card's IRQ handling is set to MSI mode, so you should do that). I test them all. Feel free to test them all too, if you want.
2) Use DDU to clean gpu drivers in safe mode from your system before installing new drivers.
3) Keep DPC latency and spikes as low as possible. Some recommend 200 nanoseconds is the limit (including spikes) to shoot for, however you SHOULD be able to get it down to like 40 nanoseconds (including spikes) by disabling drivers you don't really need (like USB 2.0 drivers, which can never enter MSI mode). Pay particular attention to the HAL and your GPU drivers. My motherboard has 11 USB ports, and I needed to disable 9 of them to get DPC latency all the way down (leaving only 2 of the 4 usb 3.0 ports on -- the two that used Intel drivers)!
4) Use Latency Monitor to see what's causing high DPC and ISRs. Note: Latency Monitor will trigger a large spike or two when you first push the the green start icon. After those initial spike(s), just hit the red stop button, and then hit the start button again and it won't cause the spike(s) this time.
5) Try setting everything you possibly can (including all the PCI Express Root Hub ports, even if you have to manually edit them to enable it using regedit) to use MSI mode for IRQ interrupt handling -- use MSI Util v3. If you're not using a PCI device, then the PCI Bridge doesn't really matter, so don't worry about it much. There's 2 things you're trying to do here: a) Have no hardware devices sharing the same IRQ; and b) reduce DPC latency while keeping ISRs to a minimum -- if you're getting like 1000 ISRs per second just sitting at the desktop doing nothing, that's bad... should be 100 or less, but it will fluctuate some.
6) Set render-ahead frames to 1, or for NVIDIA set Low Latency Mode to "On" -- not "Ultra"!.
7) Disable the windows pagefile if you have 16gb+ RAM or more. No, seriously -- if you're not BSODing due to an OOM error, you're fine. If you are, then it's Windows telling you to buy more RAM. And If you need the pagefile to exist to parse windows memory crash dumps on your freaking GAMING PC, you've got bigger problems to deal with. There's 2 exceptions to this known to humankind: 1) Some old bullshit productivity program you've never heard of and will never use and that I can't even remember its name and I'm not going to bother looking it up right now; 2) Any game that uses the Frostbite engine because Frostbite is weird that way -- you simply need at least a 16gb pagefile with Frostbite engine games for stability, even though it'll never use it... Even if you have 32gb of RAM... don't ask me why.
If using vsync (imo you should because screen tearing is nasty):
a) Use RTSS (comes with MSI afterburner) to lock framerate 0.01 or 0.02 fps below your LCD panel's vertical refresh rate (yes, it's that precise, and only Skyrim's engine should need ~0.02) in order to keep the render buffer starved, which basically removes all input lag when using vsync. Doing this destroys the only remotely valid argument against using vsync.
b) Use the Custom Resolution Utility to underclock your LCD panel to a lower vertical refresh rate (hear me out!) -- your LCD should be able to go down to around 50hz, which looks and feels pretty damn close to 60 fps (because it only adds around 3.333ms of latency), while taking pressure off of your GPU and CPU (virtually a ~20% performance boost to both at the "cost" of increased latency that you won't really notice much). That 3.333ms of latency isn't a pure cost -- it gives the GPU and CPU ~3.333ms MORE TIME to draw each frame, which is huge. As a proud card carrying member of the PC master race, I don't make this statement lightly. You'll need to set the ingame Motion Blur setting to High (trust me, they did motion blur right in this game/engine -- it's per object motion blur, not some trash shader based only on camera movement). If your windows mouse cursor still feels smooth/responsive (move the cursor around by itself, and also try grabbing a window and moving it around the screen) and windows text isn't blurry (it'll be pretty obvious), then you're good -- your LCD can handle the refresh rate. You'll probably want to lock your GPU's power when testing this at the desktop, otherwise the comparison may not be accurate (like if your GPU is running at 300mhz or something to conserve power). Do note that this is NOT the same as simply locking your fps to ~50 while your LCD is displaying at ~60hz -- that would look/feel stuttery as hell. I recommend using Resolution Changer SX2 to make it quick and easy to change between different refresh rates. I realize some people claim they're very sensitive to latency... well, sucks to be you then, huh? Personally, I think they're victims of marketing campaigns pushing e-sport level hardware (where only the lowest possible latency matters) onto the average consumer to boost sales in a niche market.
Tools used:
Notepad++ to edit the files, MSI Afterburner/RTSS for performance overlays, GPU-z to double-check VRAM usage and performance logging, and Google Chrome to view these* web pages:
https://docs.unrealengine.com/4.26/en-US/TestingAndOptimization/PerformanceAndProfiling/Scalability/ScalabilityReference/
http://www.kosmokleaner.de/ownsoft/UE4CVarBrowser.html
https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Textures/Streaming/Config/
https://github.com/smo0ths/UE4CommOpti
https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Textures/Streaming/Stat/
https://blog.katastros.com/a?ID=01600-c33d22c9-117d-4c3b-acff-6cf1e5238b71
* There were other web pages, but these are the only one's I bothered to bookmark.