Dynamic Quality Settings, or "Scalable 2D or 3D"


When I package my project, it runs at ~30 FPS on my build system, which is old, so I’m reasonably happy with that performance. However, in the editor, it runs a lot faster because the “Engine Scalability Settings” kick in and lower various quality settings. Is there a way to have this same behavior in a packaged build? It would be nice if the quality scaled depending on the user’s hardware.

I tried changing the setting “Optimize project settings for:” to “Scalable 2D or 3D,” but that apparently just disables a bunch of things like anti-aliasing and motion blur, regardless of whether the user’s hardware is fast or slow.

Here’s a related and maybe more important question – how would I go about giving the user the option to adjust all these settings? Most modern games allow the user to choose their quality level. Some want the highest framerate, no matter what, and some want it to always look pretty.


Maybe my question was too general…

I see that there are lots of console commands that adjust various quality settings. So far, I’ve experimented with the r.* and sg.* commands, and some of them definitely change the framerate.

Allowing the user to change these is probably not great, though, because:

  1. Executing console commands from C++ is not recommended (the commands are always changing)
  2. There is little or no documentation on these commands, what they do, the parameters, etc…

So, is there a better way to let the user adjust quality?

Here you can find all scalability console commands + explanation: :slight_smile:

Yes! Thank you, fighter, this is exactly what I needed.

I think I will work with these through Scalability::FQualityLevels where possible. It seems more reliable than executing console commands. I also think I will ditch the idea of an “auto” setting based on the frame rate. I see that others in the forums have made this work, but I like the idea of letting the user decide through a menu. Feels more traditional.

Thanks again.