Tips: Performance
Portable Install Navmeshtool Merging Objects Cleaning Plugins INI Importer Custom Shaders Custom Groundcover Register BSAs File Renames Atlased Meshes
Making a twenty-plus year-old game look like a modern one while still having good performance can be tricky. Thankfully, OpenMW offers many different settings options for managing performance in various ways.
This page will discuss specific strategies for gaining those precious FPS.
Table Of Contents
- How To Test Performance
- Async Physics
- Field Of View
- Groundcover
- Mods
- Object Paging
- Shadows
- Viewing Distance
- Water
- OS/GPU-Specific Tips
- Steam Deck Tips
- Performance Data
How To Test Performance
It's good to establish a testing pattern that you can repeat in order to quickly change and test settings values. Something like this:
- Edit your settings as desired. Do not edit the settings file with the OpenMW-Launcher running.
- Run OpenMW-Launcher.
- Under the "Advanced" tab, click "Testing".
- Check the box next to where it says "Skip menu and generate default character".
- Pick a busy scene to test against (Balmora and Ebonheart both have spots that are very demanding). Type the cell name into the box next to where it says "Start default character at".
- Download the OpenMW Test Script file.
- Back in the launcher, where it says "Run script after startup:", click the button labeled "Browse..." and select the file you downloaded in the previous step.
- Click "Play" in the launcher, and the game will load with your chosen scene.
- Repeat this process as you try different values.
After a bit of testing it's possible to arrive at settings that run well for your system, it just takes some patience.
Async Physics
Change or add the async num threads
value under the [Physics]
section of settings.cfg
.
[Physics]
async num threads = 2
In modern versions of OpenMW, async physics
are enabled by default. However, the default setting is only to use one thread for physics processing.
Versions of OpenMW older than 0.48 do not have async physics enabled by default.
When setting this higher than 1
, it's good to do some benchmarks to make sure you benefit from the change - setting the value too high can and will cause performance degradation.
To do a quick benchmark:
- Go to a city such as Balmora (paste
coc "balmora, guild of mages"
into the console, press Enter, close the console, then walk outside) - Spawn in 20 or so NPCs (paste
placeatpc "imperial guard" 20 20 1
into the console and press Enter) - Press F3 twice to see the performance graphs, note the parts that indicate physics to see how things are going
- Adjust your settings as needed and repeat
Field Of View
Personally, I love using a wide FOV in games that allow it. But I've found the performance cost can be significant, and actually nowadays just play with the default FOV.
If you've got a widened FOV, and want to get more performance out of your setup, then do try using the default FOV.
Groundcover
On this website, I suggest somewhat conservative values for groundcover settings but it may be possible to push that a bit further. For example: I've noticed that rendering distance = 12288.0
doesn't have too much of an impact on most scenes, and the pop-in is greatly reduced.
Mods
There are several modding projects that are dedicated to improving the performance of the vanilla Morrowind assets. These include Morrowind Optimization Patch and Project Atlas. These can especially help on lower-end systems.
Object Paging
OpenMW's object paging system is very powerful, highly configurable, and very well-documented. It gives you fine-grained control over how much distant stuff you see in-game. In order to maximize performance with it, you need to find the right amount of distant objects your system can handle.
The most powerful option for controlling this is object paging min size
(it goes under the [Terrain]
section), which sets the size of things that will get paged (and thus, rendered in the distance). On my system with a powerful GPU, I set this to 0.023
, but you could raise it higher for more serious gains (at the cost of more pop-in, and less distant objects overall).
Shadows
I've had the most success with maximum shadow map distance
for getting performance out of shadows. I play with 4096
, which is half the default value. It's worth tweaking this one for potential gains.
Viewing Distance
The viewing distance
setting will have a major impact on your performance (combined with object paging).
I've found that a value of 71680
, or just under 10 cells, is about as far I can go without having major drops in the busier scenes. If you have a less powerful GPU, experiment with 7 cells or lower, and a higher value for object paging min size
.
Water
Water settings can have a huge impact on performance without it being very obvious. Some things that can affect performance:
- Texture quality: It can be tempting to set this to "High", but the difference between that and "Low" is actually not too noticeable in practice. In any case, it may be a worthy tradeoff to simply set this to "Low".
- Reflection shader detail: This is another one that may be tempting to max out, but really beyond "World" reflections a lot of the extra detail is hard to notice and very expensive to render.
- Refraction: Like the above reflection option, this one requires the engine to draw the entire scene twice which results in a decent performance hit. Disable this if you want to gain some FPS.
OS/GPU-Specific Tips
If you're using a modern AMD GPU on a modern Linux system (e.g., I've got a Polaris 10 card on a rolling release distro), it might be a good idea to try running OpenMW with the OSG_VERTEX_BUFFER_HINT=VERTEX_BUFFER_OBJECT
environment variable. On my own setup, this doubled my average FPS with very high settings.
This is known to not make any difference with Nvidia GPUs (and may have a negative impact on performance), but it is unknown to me if it makes a difference with AMD GPUs on Windows.
Steam Deck Tips
It's possible to run any of the mod lists featured on this website using Valve's Steam Deck, but some considerations will need to be made because of the device's limitations.
- For the Total Overhaul and Graphics Overhaul lists in particular, you'll need to use a reasonably low viewing distance so that you don't use too much RAM and crash OpenMW. I've been using
viewing distance = 40960
with a lot of success (no more crashing due to OOM). - This applies to all setups but especially the more graphically intense - another way to use less memory overall is to raise the
object paging min size
value if you have not already done so. A value ofobject paging min size = 0.023
has worked well for me. - Use a lower
shadow map resolution
value,shadow map resolution = 1024
for example. - Run the game at a lower than native resolution such as 928x580, then use the Steam Deck's builtin FSR controls to raise the quality on top of that. I've noticed a lower power draw when doing this (anywhere from 1-4w give or take).
- As mentioned above in the "Water" section, those settings can gain or cost you FPS.
- Not strictly related to performance, but OpenMW's portable install feature is useful for having simultaneous entries for multiple mod lists and setups in your Steam Deck game UI.
- Also not strictly related to performance, OpenMW AppImages are an easy way to get releases and development builds onto your Steam Deck.
Performance Data
A collection of benchmarks I've done, with visuals provided by Flightless Mango and the excellent mangohud software.
- OpenMW 0.47 (unreleased version: b286397dd4): Vanilla Morrowind vs Vanilla + MOP vs Vanilla + Project Atlas vs Vanilla + MOP + Project Atlas
- OpenMW 0.47 (unreleased version: 2bfee281fd): Benchmarking the Total Overhaul list in a busy scene at 3, 5, and 10 cells viewing distance
- OpenMW 0.47 (unreleased version: 2bfee281fd): Benchmarking the Total Overhaul list in a busy scene with different
object paging min size
values and a 10-cell viewing distance
Portable Install Navmeshtool Merging Objects Cleaning Plugins INI Importer Custom Shaders Custom Groundcover Register BSAs File Renames Atlased Meshes