Elder Scrolls IV: Oblivion Tweak Guide

[Page 9] Advanced Tweaking (Pt.2)

[Audio Variables]

bDSoundHWAcceleration=1 - If set to 1, uses hardware acceleration (i.e. your sound card) to reproduce audio. This provides the best audio quality, however if you are having problems such as odd crashes, you can try a value of 0 to disable hardware sound acceleration.

bMusicEnabled=1 - If set to 0, turns off all background music. This will detract from the atmosphere of the game, but can noticeably improve stuttering on some systems, as background music dynamically loads throughout the game.

bSoundEnabled=1 - If set to 0, turns off all sound effects, but does not affect music. This would be an extreme way of gaining performance or reducing crashes and is not recommended for anything other than troubleshooting purposes.

fMainMenuMusicVolume=0.6000 - The main menu music volume can't be adjusted anywhere in the game, except by using the Master Volume slider (which then affects all sound/music). To alter the menu music volume independently, change the value here.

iMaxImpactSoundCount=32 - This option determines the maximum number of channels used for different sound effects. Reduce it 24 or 16 to remove some of the sound effects in return for a performance boost and stuttering reduction. Note however that this setting can crash your system if set too low, particularly with hardware acceleration enabled.

[Memory, Loading & Multithreading Variables]

All users should implement the Memory and Loading tweaks (with appropriate values) below, but the Multithreading tweaks are best used on Dual Core or HyperThreading CPUs.

Memory Tweaks:

uInterior Cell Buffer=3

uExterior Cell Buffer=36

The above values determine how many cells (whether for interior or exterior areas) are buffered into RAM. Note that usually the value of the Exterior Cell Buffer variable is automatically set by the engine based on the size of the uGridstoLoad variable. The higher that variable is, the higher the engine will raise this value. However if you want to smooth out your FPS, try manually setting a higher value for both of these, depending on how much RAM you have. For 1GB I recommend doubling the values (6 and 72 respectively). For 2GB of RAM, I use 16 and 102 respectively. For higher amounts of RAM, try raising them higher, however note that you should also raise the iPreloadSizeLimit value below.

iPreloadSizeLimit=26214400 - This setting appears to determine the maximum amount (in bytes) of RAM allowed for preloading game data. The higher the value, the more chance you have of reducing stuttering. The default value equates to around 25MB (divide the setting by 1024 to get KB, then by 1024 again to get MB). For those with 1GB of system RAM, try doubling the variable to 52428800. For those with 2GB, try double again at 104857600 (100MB). You can raise these values even further to experiment, however note that raising this to a large amount doesn't force all the game data to sit in RAM, and can actually cause crashes. I suggest the maximum anyone should set this to should be around 262144000 (250MB), even for 2GB of RAM. Make sure to raise your Cell Buffer values accordingly (see above).

bPreemptivelyUnloadCells=0 - If set to 1, this setting attempts to unload cell data it thinks you won't need. This can help those with less than 1GB of RAM, however with 1GB or more of RAM, I recommend leaving it at 0 for greatly reduced stuttering.

Importantly: As you raise the values of iPreloadSizeLimit and the Cell Buffer variables further above, you should make sure bPreemptivelyUnloadCells is set to 0 to take advantage of such additional memory allocation, otherwise it will actively work against the benefits brought about by the other tweaks.

bSelectivePurgeUnusedOnFastTravel=0 - If set to 1, this option removes a range of unnecessary data when you Fast Travel to another location. This can help keep memory usage down for those with less RAM, so it is recommended such people set this to 1, otherwise leave it at 0.

Loading Tweaks:

bUseHardDriveCache=1 - Although Windows should be using your hard drive cache by default for all drive operations, setting this variable to 1 should ensure it does. Note that some people report that enabling this setting can increase stuttering, so experiment to see if it helps or makes things worse for you. If in doubt, leave it at 0.

bBackgroundLoadLipFiles=1

bLoadBackgroundFaceGen=1

bBackgroundCellLoads=1

bLoadHelmetsInBackground=1

iBackgroundLoadLoading=1

bBackgroundPathing=1

Update: As of the 1.1 Patch, the bUseBackgroundPathing=1 option was also added to this section, and should be set to 1 for optimal performance.

All of the above options relate to background loading to attempt to smooth FPS and reduce stutter. I recommend setting them all to 1. This may increase some transitional loading times (e.g. loading cities, crossing indoors/outdoors), but should generally reduce random loading stutter as you wander around. If you experience any problems, set them back to their defaults.

bUseBackgroundFileLoader=0 - This setting may improve stuttering performance on some machines if set to 1, but I have noticed that it can also cause crashes and long loading times for some people, so on balance I recommend leaving it at 0.

Update 2: As of the 1.2 Patch the following loading-related settings have been added to the Oblivion.ini file:

iPostProcessMillisecondsEditor=50

iPostProcessMillisecondsLoadingQueuedPriority=20

iPostProcessMilliseconds=5

I'm not certain of what the above settings do, but they seem to relate to the loading of post process effects such as HDR which are applied after a scene is rendered. By changing these values you can fine-tune the way their loading impacts on stuttering in the game world. I tried various values, but the most noticeable impact was reducing the iPostProcessMillisecondsLoadingQueuedPriority value from its default of 20 to a lower value, such as 5. It will depend on your particular system as to whether changing this will have the same impact.

Multithreading Tweaks:

bUseThreadedBlood=1

bUseThreadedMorpher=1

bUseThreadedTempEffects=1

bUseThreadedParticleSystem=1

bUseMultiThreadedTrees=1

bUseMultiThreadedFaceGen=1

iNumHavokThreads=5

iThreads=9

iOpenMPLevel=10

All of the above settings seem to relate to the use of the GameBryo engine's multithreading capability. Multithreading splits tasks into 'threads' where possible, and runs them in parallel across both cores of multi core or HyperThreading (virtual multi core) CPUs to improve performance. Note that raising the values of the iThreads, iNumHavokThreads and iOpenMPLevel settings very high doesn't automatically mean it uses that many threads - it all depends on how many threads are actually possible based on the information being processed. Experiment with these variables but if you experience problems reset them back to their defaults.

Update: In recent times many people have written to me and/or have also posted around the Internet that the tweaks in the [Memory, Loading & Multithreading Variables] section of this guide are either useless or harmful. I have clearly noted from day one that that these tweaks may have no impact, and having tested them myself to ensure that they aren't harmful, I mention that you can experiment with them if you wish, and reset them if you run into any problems. The reason they are still listed here is for the sake of completeness, so I don't receive hundreds of emails telling me that my guide is 'incomplete' because I don't cover these famous tweaks.

[Cell Visibility/Loading Variables]

uGridsToLoad=5 - Increasing the uGridsToLoad value (always in odd steps of 5,7,9,11 etc.) will increase the number of grids around the character in which full texture data will be loaded up and visible as he/she wanders around. This clearly improves visual quality - removing blurry distant LOD textures for example when set to 11 or above - however it also noticeably increases loading times and loading pauses, introduces visual anomalies (particularly around water areas) and reduces performance significantly. Interestingly, as uGridsToLoad increases, the system automatically increases the uExterior Cell Buffer value to accommodate the greater cell data. Furthermore, if you use an even value, the engine will automatically raise it to the nearest odd value (e.g. entering 10 means the engine will set it to 11). On balance the default value of 5 is a good compromise between performance and loading pauses.

Importantly: Instead of using the above variable to improve distant textures, particularly the blurry land textures, it is strongly recommended that you instead use the Landscape LOD Replacement Mods as detailed in the Patches & Mods section of this guide on Page 4. These mods provide far less of a performance decrease for a similar effect, and don't result in the types of glitches which altering the uGridsToLoad variable can bring with it.

uGridDistantTreeRange=15

uGridDistantCount=25

The above settings when combined can be used to increase the visibility of distant trees. Increasing the uGridDistantTreeRange setting by itself has no visible impact. Yet if you also increase the uGridDistantCount value as well, you will start to see trees further out towards the horizon, on mountain ranges for example. Very high values will reduce performance and dramatically increase level loading times. For example experiment with a value of 200 for both to see the image quality and performance impact on your system, though I would recommend you leave these at their default for the best performance/image quality balance.

uGridDistantTreeRangeCity=4

uGridDistantCountCity=4

The above settings work in much the same way as uGridDistantTreeRange and uGridDistantCount except they apply to tree visibility within cities.

fLandTextureTilingMult=2.0000 - Decreasing this value can reducing the obvious tile pattern which occurs on land textures, but unfortunately also distorts textures close to the character. You can also use this mod for a much better fix to grass tiling.