The takeaway first: Battlefield 3 (multiplayer as well as campaign) is very playable on 9600M GT with 256MB video RAM and a mid-2009 dual core Macbook Pro, with a few tweaks applied and a few compromises, mostly the resolution at which the game can be played comfortably.
UPDATE: here is a follow-up post to this one on How to get much sharper, crisper graphics in BF3 (no, it’s not yet another post about DANOC FXAA).
The results are based on the custom resolution of 900×700 (number-of-pixels-wise this is similar to resolution of 1024×600) and span from:
1. Getting great framerates (30-60+ fps with occasional dips to 25 fps) while compromising image quality at mostly low graphic settings (except anisotropic filter: 4x, no FXAA injector)
2. Getting playable framerates (25-40 fps with dips as low as 15 fps) and noticeably better graphic fidelity at a few settings racked up higher (terrain quality: medium, mesh quality: high, ambient occlusion: SSAO, FXAA injector)
If you want to play BF3 on this sort of underspec’d hardware, you’ll probably alternate between the two sets depending on the map you’ll be playing. Unfortunately, this 256MB card struggles with textures set to Medium, so they’ll have to be set to Low. If you have a 512MB version of 9600M GT, set textures to Medium.
Actual framerates are some 5-10 fps higher than in video below:
Macbook Pro mid-2009, machine model MacbookPro 5,3
CPU: Core2Duo 2,66 GHz P8800 (overclocked to 2.87 GHz, voltage set to 1.11 V with ThrottleStop)
GPU: Nvidia 9600M GT 256 Mb GDDR3 (overclocked core/memory/shader from 500/792/1250 to 700/1150/1550)
Windows 7 Ultimate 64-bit SP1, Bootcamp 3.3
Graphic driver: 296.10 WHQL, no 3D driver installed
Nvidia motherboard driver: 6.05.30
Audio driver: default CirrusLogic that comes with the above version of Boot Camp
Nvidia Control Panel
Game Booster 3.3.1
Realmware BF3 Settings Editor
FXAA injector (classic FXAA, not Danoc FXAA preset; can use SMAA injector as well but FXAA injector yields better image quality)
Mesh quality: Low (or High)
Terrain quality: Low (or Medium)
Terrain decoration: Low (or High)
Antialiasing deferred: Off
Antialiasing post: Off (we’ll use FXAA injector instead)
Motion blur: Off
Anisotropic filtering: 4x
Ambient occlusion: Off (or SSAO)
Sound system: Headphones
Enhanced stereo mode: On
Raw mouse input: On
Additional BF3 Settings editor settings:
Field of view (vertical): 50 or lower
DirectX 11: Enabled
DX Deferred CS Path: Disabled
Shadowmap resolution: 1024
Vertical sync: Off
Stereo 3D: Off
Modify user.cfg file by adding or modifying this line and set:
Set a custom resolution, field of view (FOV) and disable screen scaling:
First of all, notice that we are not using screen scaling here – the point is to keep the image fidelity as sharp as possible. Therefore you will still play the game fullscreen mode (as opposed to windowed), only in a smaller area (cropped to 900×700, on the native LCD screen resolution). In Nvidia Control panel go to Display > Adjust desktop size and position and select “No scaling” and select “Override the scaling mode set by games and programs”.
Set the FOV to 50, or even lower, depends what works best for you.
About the custom resolution:
Unfortunately the game starts to feel slow even on a resolution of 1024×768. On the other hand, the resolution of 800×600 is a bit too smallish, so a custom resolution of 900×700 is some sort of a sweet spot where the screen doesn’t look too small on laptop LCD and is not too hard on the eyes. To create a custom resolution, go to Display > Change resolution, click Customize below, then Create custom resolution, enter only the desired width (horizontal pixels) and height (vertical lines), test and save the custom resolution. The new resolution will become available in game.
If you feel that the 900×700 (or similarly sized) area is too small, hook the laptop to an external CRT monitor. With a CRT monitor you can get a larger picture with well smoothed out pixels (not the case with external LCDs). I use a 19 inch external CRT at native resolution 1024×768 @ 100Hz and play those 900×700 pixels on a comfortably large display (again, not scaled). Playing on an external CRT you’ll probably want to set the mesh quality to low, since having it on high in my view only makes a noticeable difference on a native LCD display.
Just rack the fans to the maximum (6000 RPM) before playing.
About ThrottleStop, voltages and overclocking:
We are using Throttlestop to set the voltage for a specific FSB multiplier to make CPU run cooler and unlock bidirectional throttling between CPU and GPU (meaning that any of these will shift to a lower performance mode once the other gets too hot). In ThrottleStop, go to settings, select Nvidia GPU and select “Unlock bidirectional PROCHOT”. Then, in the main screen, unselect “BD PROCHOT”.
Other settings in ThrottleStop:
Set multiplier: On, value: 10.0, VID: 1.1125 V (if you have set the frequency to 2.87 GHz in the Nvidia Control Panel). Remark: you could also rack the CPU to the maximum 3.01 GHz at 1.16V, but this way the CPU could get hot enough so it throttles itself down automatically at temperatures close to 100C and you could get performance dips this way. It really depends on how cool the room / surface around the laptop is.
Power Saver: Off
Disable Turbo: Off
BD PROCHOT: Off
C States: Off
(all off basically)
Results: CPU goes to 95C max, GPU goes to some 85-87C max which is “low” enough that you won’t be getting performance dips due to auto CPU/GPU throttling. These temps are supposed to be well within operating limits for both CPU and GPU.
FXAA/SMAA injector in BF3:
I won’t go into much detail here, basically you WANT to use Timothy Lottes FXAA injector in Battlefield 3. I use vanilla FXAA injector instead of Danoc FXAA injector (Danoc just distorts the graphics for me, even though the colours are really vivid with it, I prefer using plain FXAA settings and set the preset to the lowest – in shader.hlsl set #define FXAA_QUALITY__PRESET 10.
Anyway, this FXAA injector works miles better (particularly when you ramp mesh quality up to High) and is less blurry than game’s built-in FXAA (Antialiasing post).
Optionally you can use SMAA injector instead. Personally I feel edges are quite a bit smoother with FXAA. If you need extra performance while still retaining some nice antialiasing, but not as smooth as FXAA, I’d say go with SMAA.
Update: to get even better performance with SMAA while still having most of the jagged edges smoothed out, set the Low preset in file “SMAA.h” even lower, for instance edit to something like:
#if SMAA_PRESET_LOW == 1
#define SMAA_THRESHOLD 0.3
#define SMAA_MAX_SEARCH_STEPS 2
#define SMAA_MAX_SEARCH_STEPS_DIAG 0
#define SMAA_CORNER_ROUNDING 100
Don’t forget to select this preset in file “injector.ini”, set “preset = SMAA_PRESET_LOW”.
Download SMAA injector 1.2 here: http://mrhaandi.blogspot.com/p/injectsmaa.html
Nvidia Control Panel settings:
I have the following settings for Battlefield 3 (or global) profile:
Maximum pre-rendered frames: 0
Anisotropic sample optimization: On
Negative LOD bias: Allow
Filtering quality: High performance
Trilinear optimization: On
Threaded optimization: Auto
Triple buffering: Off
Power management: Prefer maximum performance
Multi-display: Single display performance mode
AA – Gamma correction: Off
AA – Transparency: Off
Game Booster and other tweaks:
Fire up Game Booster gaming mode to stop unnecessary processes while playing BF3.
Other things you can do:
-close browser with Battlelog when you are in game
-close Origin client when you are in game
-close Nvidia tray
-kill other processes in Task Manager (bootcamp.exe, gbtray.exe)
You can also try setting the priority of bf3.exe in Task Manager to High.
That’s it, hope this works well for you. Enjoy the game. Might soon update this post with a video or something.