Performance Tweaks: Difference between revisions
Nbohr1more (talk | contribs) |
No edit summary |
||
Line 862: | Line 862: | ||
seta g_enablePortalSky "0" | seta g_enablePortalSky "0" | ||
</pre> | |||
in Darkmod.cfg | |||
==== Disable Lip Sync ==== | |||
AI will not play lipsync animations | |||
<pre> | |||
seta tdm_ai_opt_nolipsync "1" | |||
</pre> | </pre> |
Revision as of 08:12, 17 April 2017
This article relates to performance issues for players. For performance information for mappers, see Performance: Essential Must-Knows
Show FPS
First, you can check how many FPS are achieved by opening the console with Ctrl+Alt+~ (tilde, ^ on German keyboards) and type:
com_showFPS 1
Optimizing the OS performance
Stop running programs in the background
Programs running in the background might either eat up memory that is needed for Doom3, and thus cause swapping to the hard disk, or they might consume CPU time or other resources.
This can cause either general slowdowns or hickups during game play.
Ensure that Programs are the main priority in the OS
To begin the process, type sysdm.cpl in Run box (Windows + R) and hit Enter to open the System Properties.
Select the Advanced tab and under Performance, click on Settings.
In the Performance Options box, select the Advanced Tab again.
You will see a section Processor Scheduling
Choose "Programs" then click Apply.
White-list TheDarkMod.exe in Security Software
Make sure that Windows Defender or Anti-Virus, Anti-Spyware, etc aren't constantly scanning or interacting
with TheDarkMod.exe. Add it to your security white-list.
Priority and Affinity
Set TheDarkMod to High Priority
- Launch TheDarkMod
(Note: Do not start a mission or test map yet. If the 3D render is initialized it will take a long time to exit fullscreen and return to it.)
- Alt + Enter to exit fullscreen
- Ctrl + Alt + Del to open your Task Manager
- Right-click on TheDarkMod.exe the choose "Go to Details"
- (On the details\processes pane) Right-click on TheDarkMod.exe and mouse-over Set Priority and choose High
- Alt + Enter to return to fullscreen
You can also edit your Desktop shortcut to start in High priority:
- Right-click your Desktop shortcut to TheDarkMod and select Properties
- On the Shortcut Tab enter the following into the "Target:" field
cmd.exe /c start "TheDarkMod" /High "C:\darkmod\TheDarkMod.exe"
(Assuming you installed into C:\darkmod)
- Then click the Change Icon button and browse for the Darkmod.ico icon in your darkmod install path
- Click Apply
Set TheDarkMod Affinity
If you have a limited number of cores or heavy background tasks are always consuming the default cores, you can set The Dark Mod to run on a specific core via "affinity"
- Launch TheDarkMod
- Alt + Enter to exit fullscreen
(Note: Do not start a mission or test map yet. If the 3D render is initialized it will take a long time to exit fullscreen and return to it.)
- Ctrl + Alt + Del to open your Task Manager
- Click the Performance Tab and look at the CPU display to see which cores are the least busy
- (On Windows 10, click the "Open Resource Monitor" link and then click the CPU tab and expand the right pane)
- Close the Resource Monitor and click the Processes Tab in Task Manager
- Right-click on TheDarkMod.exe the choose "Go to Details"
- (On the details\processes pane) Right-click on TheDarkMod.exe
- Mouse-over then click "Set Affinity" and uncheck cores you want to prevent TDM from using
- Alt + Enter to return to fullscreen
As with Priority you can set Affinity in your shortcut.
Example Target:
cmd.exe /c start "TheDarkMod" /affinity 1 "C:\darkmod\TheDarkMod.exe"
The affinity number is not matched to the number in your performance screen. For example "Core 0" in Task Manager is affinity 1. The values are in Octal so the numbers go up:
- Core 0 is 1
- Core 1 is 2
- Core 2 is 4
- Core 3 is 8
- Core 4 is 10
- Core 5 is 20
To select multiple cores you need to use odd numbers.
For example /affintiy 5 will enable Core 0 and Core 2.
For a typical dual core CPU with Hyperthreading these will be your real cores
whilst 1 and 3 will be virtual cores.
Combined Example
You can include both priority and affinity switches in your shortcut
C:\Windows\System32\cmd.exe /c start "TheDarkMod" /High /affinity 5 "C:\darkmod\TheDarkMod.exe" +cm_backFaceCull 1 +r_useEntityCulling 1
Start TheDarkMod with high priority on Cores 0 and 2 (real cores) and add two launch cvars ( See Conventions).
As you can see, you can make a huge launch string but once you go past 2 or 3 cvars it's best to
use Darkmod.cfg unless you wish to make multiple launchers for testing (etc).
Process Management Note
You can also either "End Task" on processes that you know you don't need or set them to "below normal" or "low" priority.
Moving these low priority processes to a different core via affinity is also an option.
Some processes, such as OneDrive.exe (which is integrated into the OS) will keep restarting so it's best to set these to "low priority"
If you are unsure what a process does, do not change it until you've researched the process.
Disable Desktop Effects
(If you are willing to sacrifice you desktop visual behavior and effects for better TDM performance. Note: This can be reverted.)
To begin the process, type sysdm.cpl in Run box (Windows + R) and hit Enter to open the System Properties.
Select the Advanced tab and under Performance, click on Settings.
In the Performance Options box, select the Visual Effects tab.
Check "Adjust for Best Performance" then click Apply.
Driver Considerations
(IdTech4) The Dark Mod is based on OpenGL 2.0. GPU manufacturers have largely ignored
issues with this older specification so a number of workarounds have been compiled
by the community to attend to erroneous behaviors or poor performance.
(AMD\ATI) Disable Catalyst AI
(This is probably deprecated.)
Disable Catalyst AI in recent AMD Drivers
(AMD\ATI) Rename the executable
Most modern drivers have built-in profiles for the executable names of commercial games.
Renaming TheDarkMod.exe to the name of a commercial OpenGL game may gain you some optimizations
or even a Crossfire profile (I believe DarkAthena.exe had one.)
Known working renames:
DarkAthena.exe (thus far the most consistent improvement)
Wolf2MP.exe
Amnesia.exe
Brink.exe
Prey.exe
(Nvidia) Disable Index Buffers
seta r_useIndexBuffers "0"
in Darkmod.cfg
(Notes: This tweak will be set as default in v2.05)
(Nvidia) Disable the Streamer Service
Open your run dialog (Windows + R) or command prompt and type services.msc
On the Extended Tab locate "Nvidia Streamer Network Service"
{{RMB} Right-click it and choose "Stop"
Once the service is stopped, right click it again and choose Properties
On the General Tab set Startup Type = Disabled then click Apply.
Do the same for "Nvidia Streamer Service"
You can also perform these steps for any services that you know can be manually started
or are not needed for your daily usage. (Obviously) Do not disable any service that you don't
recognize or know is safe to disable.
(Nvidia) Disable Threaded Optimizations
Open Nvidia Control Panel ->
Manage 3D Settings ->
Bottom half of list locate "Threaded Optimization" <-- Set to NO / Off
Also set "Multi-display/Mixed GPU acceleration" to "Single display performance mode"
This can also reduce or eliminate driver crashes or rendering anomalies.
Lower in-driver quality settings
AMD, Nvidia, and Intel all give users the option to lower texture quality and
also have various quality "optimization" levels for texture LOD Bias and Anisotropy (Filtering).
Try different driver versions
Sometimes updating to the latest driver version or reverting to an older version
will improve performance. Try a few revisions or ask about known good driver versions.
This applies to both GPU drivers and "Motherboard Chipset Drivers".
See also Upgrade your BIOS
Optimizing Dark Mod settings
The settings changes below generally can be changed independently of one another.
This means that if your want better settings in one aspect (such as AA) you can
try reducing quality or disabling another aspect (such as post-processing, image_downsize, v-sync, etc)
Conventions
Most of the changes demonstrated in this article are via "Console variables" CVARS.
The "seta" prefix is intended to save these settings permanently so that they are retained on restart and that is what is used by Darkmod.cfg.
seta cm_backFaceCull "1"
Temporary Testing
To temporarily test any settings, you can drop the "seta" and simply invoke the cvar and it's value (without double quotes) in the console.
Example:
Open the console with Ctrl+Alt+~ (tilde, ^ on German keyboards) and type:
cm_backFaceCull 1
Note: Some CVAR changes in the console, such as vid_mode (resolution), r_multisamples (AA), r_swapInterval (V-Synch), image_anisotropy (AF) cannot be changed without also invoking vid_restart.
See also: Toggle settings in realtime
Launch Options
You can also add the value as part of your of your target in your shortcut:
Example with two cvars:
- Right click your Desktop shortcut to TheDarkMod and select Properties
- On the Shortcut Tab enter the following into the "Target:" field
"C:\darkmod\TheDarkMod.exe" +cm_backFaceCull 1 +r_useEntityCulling 1
(Assuming you installed into C:\darkmod)
- Then click the Change Icon button and browse for the Darkmod.ico icon in your darkmod install path
- Click Apply
See also Set TheDarkMod to High Priority
Run The Dark Mod in fullscreen
Running Darkmod in windowed mode might be quite a bit slower than fullscreen mode.
One reason for this is that windowed mode is forced to V-sync. ( See Disable V-sync )
seta r_fullscreen "1"
in Darkmod.cfg
Disable Post-Processing
In the advanced video settings menu make sure post-processing is disabled
seta r_postprocess "0"
in Darkmod.cfg
Set Object Detail to Low
In the advanced video settings menu lower the Object detail slider below normal
seta tdm_lod_bias "0.5"
in Darkmod.cfg (see also Object_detail )
Set the ambient shading to "Faster"
Inside the settings, change the ambient rendering method to "Faster".
seta tdm_ambient_method "1"
in Darkmod.cfg
(Note: Some preliminary tests in v2.05 show that the Enhanced Ambient is now faster than the "fast" texture based Ambient.)
Set the interaction.vfp to 'Standard'
In the video settings menu, change the interaction shader to Standard. Lighting will not look as good, but you may gain a few frames per second.
seta tdm_interaction_vfp_type "0"
in Darkmod.cfg
Lower Anti-aliasing
In the standard video settings, set AA to a lower value or 0
seta r_multiSamples "0"
in Darkmod.cfg
(Note: Nvidia's in driver FXAA anti-aliasing setting is substantially faster than the multi-samples settings
in game.
Doom 3 is far less susceptible to AA artifacts so this may be an acceptable alternative especially if you are are running the game at native resolution (or nearly native).
AMD has MLAA which may also work well in the same way.)
Force Refresh Timing
Some newer video cards may not properly report the refresh rate to this engine (typically digital output like DVI, HDMI, or DisplayPort) This can cause lag, stutter, and uneven frame pacing.
create an autoexec.cfg in your darkmod directory and set:
seta r_displayRefresh "60"
(Obviously increase to match your available mode.)
Disable V-sync
In the standard video settings, disable vsync
seta r_swapInterval "0"
in Darkmod.cfg
The Dark Mod has extremely variable FPS compared to modern titles due to it's substantial CPU heavy renderer.
We strongly recommend disabling V-Sync altogether or forcing variable V-sync tech such as G-Sync or Freesync in your driver settings while disabling it in-game.
Field of View Decrease
Note that this setting might occasionally produce odd effects such as a grabbed object seems to move a little on release.
You can get a performance improvement if you decrease the field of view. By default this is 90 degrees but you might try entering in the console:
g_fov 85
or
seta g_fov "85"
in Darkmod.cfg
In addition, if you are playing a mission that is too good to miss and reach a very low performance area which is almost unplayable on your machine, you might consider setting the field of view extremely low temporarily to get you through then restore to 90 later...
g_fov 50
or bind a toggle
bind "z" "toggle g_fov 50 90";
in Darkmod.cfg so you can tap a key to go between FOV ranges.
See Toggle Settings in Realtime
Note from Fidcal: I have played comfortably on g_fov 75 and even think perhaps it makes nearby objects more realistically close so you can get right up to a table, etc. Not noticed any problem with restricted view.
Reduce your resolution!
On older cards, Doom3's render engine is very expensive for every per pixel drawn, and reducing the resolution will help the most. For instance, at 1600x1200 the game needs to draw four times as many pixels as when running 800x600. The result with 800x600 will not look as bad as one might think – but the frame rate improvements might make it much more playable.
If you cannot set the resolution you want in the settings menu then enter it in Darkmod.cfg.
To edit Darkmod.cfg:
- Uninstall any current mission in the New Mission menu.
- Close Dark Mod
- Edit Darkmod.cfg in the darkmod folder
- Re-install the mission.
- Whenever you UNinstall and install another mission, these changes will migrate to those FMs as well.
(Alternatively, edit both the Darkmod.cfg in the darkmod folder AND the one in the current FM game folder, eg, fms\chalice.)
Search down for these cvars first and replace them with the values shown:
seta r_mode "-1" seta r_customHeight "640" seta r_customWidth "480"
alternate for wide screen monitors:
16:9 ratio
seta r_mode "-1" seta r_customwidth "1280" seta r_customheight "720" seta r_aspectratio "1"
See also: Resolutions
Lower Anisotropic Filtering
In the standard video settings, lower or disable AF
seta image_anisotropy "0"
in Darkmod.cfg
(Note: This has very little performance benefit for most GPU hardware. This is also one of the few graphic settings that can be adjusted without requiring a vid_restart or restarting the engine.)
Slow loading times
Loading times for The Dark Mod are known to be on the long side. The main culprit is that the engine encodes mip-maps
when loading textures. In the future, we may be able to address this by compressing the normal maps or encoding them
in a format that includes mip-maps.
Some users have reported modest benefits to loading time when upgrading to an SSD but given the bottle-neck above CPU
and RAM upgrades would likely be more beneficial.
Sometimes, beyond the normal expectation of slow loading, the load times are egregiously slow. In those cases it's
best to review the tuning options and workarounds below.
If you find an FM is very slow to load it may be an ATI graphics card problem. One report says this was cured by turning off Catalyst AI. Also cures HDR-Lite Post-Processing Problems.
Changing the following settings to 0 will also reduce loading time, but be warned: if you have a lower-end system, poor graphics card, or low ram, you will likely notice a performance hit ingame since you will now be using uncompressed textures.
seta image_useNormalCompression "0" seta image_useCompression "0"
NEW INFO: The Dark Mod has never really used Normal Map compression because it is incompatible with heightmap images
and it produces nasty artifacts for the texture scales we use.
The current builds have had the RXGB swizzle disabled as of at least 2.0 standalone. (Probably as of v1.08 when the GPL executable sources were released.)
There is no benefit to enabling normal map compression currently so feel free to set this to 0.
NEW INFO 2: v2.05 will have a new image_mipmapmode cvar. 0 = Software (original), 1 = Legacy GL, 2 Modern (default).
This will offload Mipmap generation to the video driver. Depending on the quality of your GPU driver this may improve or
degrade texture loading performance. In my testing, mode 2 is a little slower than mode 0 on initial load but is substantially
faster on reload or loading new FM's that use the same textures )
Note: Disabling compression may lead to Malloc errors due to memory consumption.
You may be able to compensate by setting image_downsize options or use image_downsize instead of disabling compression. Image Downsizing
The game is very slow!
If you get less than 10 FPS, or the game even stutters, please try this:
Look into your Darkmod.cfg inside your darkmod folder and check that the following settings are like shown below:
seta image_usePrecompressedTextures "1" seta image_useNormalCompression "0" seta image_useAllFormats "1" seta image_useCompression "1" seta image_preload "1" seta r_useCachedDynamicModels "1" seta r_useShadowVertexProgram "1" seta r_useEntityCulling "1" seta cm_backFaceCull "1"
NEW INFO: The Dark Mod has never really used Normal Map compression because it is incompatible with heightmap images
and it produces nasty artifacts for the texture scales we use.
The current builds have had the RXGB swizzle disabled as of at least 2.0 standalone. (Probably as of v1.08 when the GPL executable sources were released.)
There is no benefit to enabling normal map compression currently so feel free to set this to 0 as shown above.
Note: image_preload can increase the memory usage at load time, some lowend users have disabled this ( 0 ) to get past malloc errors for going over your memory limits.
Configure Video RAM
Change:
seta com_videoRam "128"
to the appropriate value (in MB) for your GPU in Darkmod.cfg
Eg. A 2GB video card would have 2048 there.
seta com_videoRam "2048"
Lightgem interleaved calculation
By default lightgem calculation occurs every frame. You can set lightgem calculation to happen only once
per several frames by setting tdm_lg_interleave console parameter to values higher than 1.
For example, typing:
tdm_lg_interleave 3
in console tells TDM to recalculate lightgem value every third frame.
This tweak can increase average FPS, but it often produces noticeable stuttering, especially on slow machines when your FPS is below 25 to 30FPS.
NEW INFO:
In v2.05, there is a new tdm_lg_interleave_min cvar which checks your current FPS and if you are below the configured value
it reverts tdm_lg_interleave to 1 to reduce stutter at lower FPS values. The default value is 40 (eg. 40FPS).
As the cost of lightgem calculation is (also) substantially lower in v2.05, you may be able to set this to 1 for most missions.
In testing, the only mission I found that suffered from "tdm_lg_interleave ( > 1) stuttering" was "Penny Dreadful 3: Erasing the Trail".
For that mission, I set tdm_lg_interleave_min to 50 to cure the stutter.
This setting can also be used to boost already high FPS values for the new unbounded FPS options ( com_FixeTic 1 ).
(eg. If you have 90FPS set tdm_lg_interleave to 7 and tdm_lg_interleave_min to 75 to attempt a push towards 120FPS)
Split Lightgem
You can also split the calculation across frames so that part is done in one frame and part is done in the next:
tdm_lg_split 1
Some folks have reported that this causes flicker but that was in older builds.
I haven't seen any problems with this in recent builds.
This will give a modest boost compared to interleave and both can be used together or independently.
Eg:
Keep tdm_lg_interleave 1 for to prevent stutter at low FPS but set tdm_lg_split to gain a little boost.
or
Set tdm_lg_split to 1 to get you from 26 FPS to 28 FPS as a baseline, then set tdm_lg_interleave to 2 to gain a substantial boost (up to double FPS) but since the baseline is close to 30FPS the risk of stutter is substantially reduced.
NEW INFO:
In v2.05 tdm_lg_split will be enabled (1) by default.
See also Weak Lightgem
Image downsizing
As a last resort, you may enable image downsizing: in Darkmod.cfg, set image_downSize to 1 and then set a limit with image_downSizeLimit, e.g., "image_downSizeLimit" "256".
seta image_downSize "1" seta image_downSizeLimit "256"
This reduces texture memory requirements and may completely alleviate hard drive thrashing. There are similar cvars for bump and specular maps as well.
Example: Downsize Normal Maps
seta image_downSizeBump "1" seta image_downSizeBumpLimit "256"
Example: Downsize Specular maps
seta image_downSizeSpecular "0" seta image_downSizeSpecularLimit "64"
Note: We recommend that you disable post-processing before using image_downsize.
If you set image_downsizeLimit below 512, part or all of the screen wont render when post-processing enabled.
If any image_downSizeLimit is set below your screen resolution, you will see visual errors when post-processing is enabled.
Drop in Frame Rates when Viewing Water
Some players have reported a drastic drop in performance when an agitated water surface is in view. This on a Radeon card. Try entering this in the console. It disables the water visible surface effects but at least it might let you play normally...
seta r_skipPostProcess "1"
or
seta r_postprocess "0"
You can also set a key-bind to toggle this instead:
bind "z" "toggle r_postprocess 0 1"
See Toggle Settings in Realtime
See also Underwater performance poor
Disabling standard graphics features
At the cost of some pretty severe scene quality, you can disable a number of independent graphic features
that are non-essential to play.
Disable Soft Particles
The new Soft Particle effects in v2.03 and newer use a little more GPU than the previous particles.
This is offset by the fact that v2.03 and higher don't render particles during the lightgem calculation.
Still, if you want an extra boost then set:
seta r_useSoftParticles "0"
in Darkmod.cfg
Disable Fog
seta r_skipFogLights "1"
in Darkmod.cfg
Disable BlendLights
seta r_skipBlendLights "1"
in Darkmod.cfg
Disable Player Shadow
The player shadow slightly reduces performance. It has no game effect at all (not seen by AI for instance) apart from atmospheric effect so if you want to disable it enter in the console:
g_showplayershadow 0
Or, in Darkmod.cfg (see above) change the following line from "1" to "0":
seta g_showplayershadow "0"
Disable Player Lantern Shadow
You may notice a drop in performance while using the player lantern.
Add "noshadows" "1" to entitydef light_lantern_moving in tdm_playertools_lantern.def and this stops the player lantern casting shadows. This helps improve performance slightly when using the lantern.
Disable Particles
This will seriously mar your image quality. Flames, glares, and smoke will all be gone.
seta r_skipParticles "1"
in Darkmod.cfg
Disable Specular Maps
Specular gives materials their shine. This option will make all surfaces shine-free.
Note: This may not work with the Enhanced Ambient
seta r_skipSpecular "1"
in Darkmod.cfg
Disable Normal Maps
The main detail attribute for textures in Doom 3 \ Darkmod is the Normal Map.
If you disable this your game will become really ugly.
seta r_skipBump "1"
in Darkmod.cfg
Disable FPS Lock
(New in upcoming v2.05) Run one game tick per graphics frame, rather than fixed 60 ticks per second.
seta com_fixedTic "1"
in Darkmod.cfg
Disable Sky
(New in upcoming v2.05) Pitch black sky with no clouds, Moon, or stars
seta g_enablePortalSky "0"
in Darkmod.cfg
Disable Lip Sync
AI will not play lipsync animations
seta tdm_ai_opt_nolipsync "1"
in Darkmod.cfg
Lower Sound Quality
You can force 22khz audio processing to reduce the CPU overhead of audio processing.
Obviously, EAX effects will increase CPU load for audio so you should consider disabling
those before lowering audio quality. If normal audio plays fine but EAX causes performace,
this change might give you a boost while EAX is enabled.
seta s_force22kHz "1"
Weak Lightgem
Setting:
seta tdm_lg_weak "1"
in Darkmod.cfg will disable the renderer based lightgem and use a simpler math-based solution. It's a far less accurate lightgem but may allow weaker systems to play the game as a second to last resort.
(Note: The cost of lightgem calculation has been substantially lowered in the upcoming TDM v2.05. This may be an obsolete option in future releases.)
Gameplay Performance Tips
If you have done everything else you can and performance is still poor then one or two things you might do in game to help:
- Close all doors after you have passed through. Generally the game has to process both areas until you close the door if the doorway is still in sight.
- Kill or KO every AI you can. You might not like to play that way but generally, AI still hog resources even out of sight (depending on how set up in the game.)
- Avoid alerts. A dozen guards searching for you will really slow things down on a low-end machine.
- Try to look down at the ground when moving along. Gazing up at a grand vista will slow you down. Best to do your gazing while standing still.
Hardware Considerations
The Dark Mod 1.0 was released in 2009. The average mission designer and player of that time had a Geforce 6600GT and AMD Athlon 64 X2 2GHZ.
While some missions were playable all the way down to a P4 2.8GHZ with an FX5200, this is well below the expected audience for this project.
Current Intel integrated GPU's have better performance than the Geforce 8800 that was a high-end card in 2009. Low-power mobile chips are known to throttle under heavy load, especially when using integrated graphics.
Upgrade your BIOS
Sometimes bugs or unintended specification limits in the BIOS on an older motherboard will prevent it from allowing the CPU or GPU to meet their potential.
If your manufacturer has an updated motherboard BIOS available, consider applying it.
Last resort: Upgrade your hardware
Modern games need a lot of computing power, and while you don't need the absolutely newest hardware to play them, upgrading single components of your machine can help tremendously:
- If you got less than 2 GByte main memory, consider upgrading your memory. This really helps to reduce swapping, which introduces quite noticeable slowdowns.
- If you got a graphic card from NVidia older than the GF 7x00 series, consider upgrading it.
Upgrading your CPU is possible in most cases but can be quite complicated
and the cost might be so high that upgrading your whole PC might be a better value.
Upgrading the hard disk will usually not help much with gaming, unless you are running out of free space.
Some users have reported that SSD has improved loading times but the bigger problem with load times
is Mip-Map generation which is CPU \ Memory bandwidth limited.
Toggle settings in realtime
With the exception of Resolution, AA, and AF settings; most of the above settings can be changed in realtime in the console or via a bind in Darkmod.cfg.
For example, you could bind both post-processing and enhanced interaction to the Z key to enable and disable them both by pressing that key
bind "z" "toggle r_postprocess 0 1; toggle tdm_interaction_vfp_type 0 1"
in Darkmod.cfg
Blurry Briefing and Menu Screens
- Obsolete info. This is fixed in TDM 2.05
If you get blurry briefing and menu screens then in Darkmod.cfg make sure you do NOT have image_downSize 0.
Instead set it to 1. But see also Image Downsizing as there is a patch available to allow
image_downsize without making menus blurry.
See also
See also the FAQ.