This Guide, Just a Medic Trying to Save the World from FPS Woes
Below, I have incorporated most of the recommendations across those sites as well as various others, and things I've heard people say in Discord, read in a forum, or figured out.
As a Systems Administrator and Engineer for over 18+ years. I've been dealing with high performance optimization in all forms related to computing.
Websites under DDoS, optimizing video games for best play experience across multiple platforms at a game studio, and now running a Data Center and render farm for a movie studio.
This guide focuses on the fact that PlanetSide 2 is a game from 2012, and modern tech like NUMA (Non-Uniform Memory Access), and multi-core CPUs don't give the best performance.
Having a good solid framerate not only improves your enjoyment of the game, but it can also actually dictate your rate of fire vs framerate according to some in-depth testing from Iridar, and FPS vs RPM on Reddit from x[H]0PE oN3Xo.
So tweak away to get the best possible competitive edge solider!
Feel free to message me on our FEAR Discord with any questions. Or if you think there is something valuable to add to this guide.
- Jacob "[FEAR] DrSaveYourAss", written 5/9/2020 (updated: 7/28/2020)
This is the easy win part here, change stuff the game lets you. Unlike a lot of games most settings can be changed without restarting the client.
Change all video settings in-game
Launch PlanetSide 2 and from the bottom-right, go to Settings > Graphics
Display Mode: Full Screen
Resolution: 1920x1080
Render Quality: 100%
Vertical Field of View: 74.00
Wide View Mode: No
Vertical Sync: No
GPU Particle Quality: Grayed out
Render Distance: 1000
Smoothing: No
Fog Shadows: No
Ambient Occlusion: Yes
Bloom Enabled: Yes
Motion Blur: No
Overall Quality: Custom
Graphics Quality: Low
Texture Quality: Ultra
Lighting Quality: High
Shadow Quality: High
Effects Quality: High
Terrain Quality: High
Flora Quality: High
Model Quality: Low
Particles: Low
The only options that require a restart are Graphics Quality, Texture Quality, Model Quality, and Particles
Flora, Particles, and Shadows are all CPU based graphics. Everything else is GPU
Flora and Shadows are the largest CPU bottleneck. If you constantly see the [CPU] indicator while running /fps, lower these
You should set Texture Quality to Ultra if you have 2GB VRAM or more. There is only one texture pack, this settings only controls how much can be offloaded to VRAM
Your resolution and settings will vary wildly from mine based on your setup
Most bang for your buck, change Render Distance and Render Quality first
Just these two settings have a piling on effect with all your other settings
Also, both of these can be adjusted in-game, on the fly. Big battle, FPS hurting? Drop them real quick and revert after
Other In-game Changes on the Fly
Render Distance
Render Distance controls fog of war, and terrain rendering. In most cases other than air, 1000m is perfect.
I tried setting it to 100m from the config file, and sure enough I could not see things past that
Get in some Air in VR, adjust Render Distance and see it change without even having to exit out of settings
So... if you are guarding a little 500m base and your FPS is hurting at 1000m drop it on the fly
If you're spawning air, and need the longer draw distance, just increase it before you take off and revert when back to infantry
Most continents have a hidden 2000-2500m Render Distance cap anyways, so setting above that is not needed
Dynamic Infantry and Vehicle Rendering
Render Distance has no affect on infantry and vehicles which are dynamically controlled by the server
Non-sniper infantry renders out to 300m
Snipers, the AV MAX, and vehicles renders out to 600m both introduced in Game Update 6/17/2015
Awareness/Render changes
Awareness based off damage, players who you damage or damage you are calculated as high propriety and are more likely to be rendered to each other
Infantry awareness/render range now takes loadouts into account, players with a long range weapon in their loadout can be rendered up to 600 meters away, depending on the weapon; this includes AV MAXs and Sniper Rifles.
In the following screenshots, you can see VR Training has a "hidden" 700m cap, and literally has a white grid on the terrain floor, not just wall
This is even with my Render Distance set to the max of 6000m, and notice the enemies at 700m > 500m > 300m > 200m > 100m
Render Quality
Render Quality sets the sampling to use
At higher res your GPU kicks in more over the CPU
With reduced Render Quality you're essentially Downsampling
This is the opposite of Supersampling, aka Anti-Aliasing
Running at higher res and dropping Render Quality to 50% it only has to average pixels at half the bit-rate.
Especially helpful for when large chunks of pixels change at once, and colors drastically shift
Render Quality can go up to 200% (2.000000 in config), if your FPS doesn't struggle and you would instead prefer to Supersample things
I haven't dug into the math yet myself, but I see people saying:
Your CPU is also taxed with handling audio, and you can lower the MaxVoices settings to reduce the number of audio channels the CPU has to handle.
You won't want to go much lower than 96 or in big battles you won't be able to hear all the various sounds around you happening.
Also supposedly PlanetSide 2 can't always auto-detect your Audio bitrate, and might default to 41000 Hz.
If your Windows Audio from your soundcard is 48000 Hz like mine, that means it constantly has to use the CPU to downsample all audio. Forcing the game to match Windows can give it a nice extra lil boost.
Right-click your speaker icon at the bottom-right in Windows > Open Sound Settings
Click Manage sound devices
Under Output click on Device properties
Click Additional device properties
On the [Advanced] tab, see what your Hz is at (mine is 48000 Hz)
Open your UserOptions.ini file
Under the [Sound] section match that Hz level:
Place SampleRate under MaxVoices as it won't exist by default
PlanetSide 2: Windows Task Manager CPU Affinity/Pinning, Quick and Effective
The easiest way at the OS/hardware level to get a 10% or more boost is use the Windows Task Manager to set CPU Affinity/Pinning.
Launch PlanetSide 2 from the launcher
Once in-game before logging in, Alt-Tab out
Right-click the taskbar > Task Manager
Go to the Details tab
Find PlanetSide2_x64.exe
Right-click > Set Affinity
Now depending on CPU architecture, or NUMA node mapping/memory controller layout you have some options:
For each of these, Uncheck All Processors, then try:
Select just CPU 0 (socket 0, core 0, memory controller 0)
Select just CPU 8 (socket 0, core 8, memory controller 1)
Select just CPU 8-15 (socket 0, core 8-15, memory controller 1)
Select based off Hyper-Threaded cores, usually Even or Odd cores
With an 8 core/16 thread architecture, try each of these and monitor in game performance with /fps and keep an eye on Task Manager'sPerformance and Details tab for the PlanetSide2_x64.exe.
I seem to get the best performance with it pinned to my second memory controller and all 4 cores + 4 HT cores [8-15].
There can be some additional overhead for having the OS manage Affinity as opposed to letting the CPU itself handle it.
So in my case just restricting PlanetSide2_x64.exe to its own second memory controller and letting the Intel CPU handle Affinity between physical and HT cores works out better.
Essentially what you're trying to do is force the entire PlanetSide2_x64.exe to run contained to a single NUMA (Non-Uniform Memory Access) zone, and stick to just 1 socket and 1 memory controller.
Windows runs on primarily Core 0. If something like an update kicks off you shouldn't really notice it in-game. It understands that PlanetSide2_x64.exe is requesting dedicated CPU on other Cores.
Windows tries to restrict any other background system processes from running on those cores.
This all increases the memory bandwidth, and reduces NUMA misses.
When socket 0, memory controller 0, core 0 needs memory stored across the memory controller to socket 0, memory controller 1, core 8 that is bad for performance.
Most applications are not NUMA aware, and treat the system as if the underlying physical architecture doesn't have a physical delay of 20-80ns to keep hopping over the controller each time.
20-80 nano seconds doesn't sound like a lot, but in-game when things are looping thousands of times a minute, it adds up for sure.
It does do some "threading", but not in the same fashion better apps like Google Chrome handle it. It is handing off its thread management to the OS and kinda fudging it.
You can do the same type of CPU affinity/pinning like with Task Manager by right-clicking on PlanetSide2_x64.exe as well:
Open up Chrome or Discord then launch Process Explorer, and look at/expand explorer.exe > (Chrome.exe / Discord.exe)
This is what good multi-threading looks like.
Now at the bottom of the process list find PlanetSide2_x64.exe
Notice the entire Private Bytes and Working Set of memory only have a single PID. That means no multi-threading is being taken advantage of
At a whole whopping 3.6GB of memory usage (super low), another odd recommendation I see is that 8-16+GB RAM will speed up the game, Nope, close some programs before launching
I don't feel like going in-depth with how RAM works. But of that 3.6GB of memory, 1.7GB of it is paged to the disk's pagefile.
This is why going from a HDD to SSD is usually preferred over additional RAM
I think I recall back in the day they had the "Dumb" type of multi-threading at one point.
Essentially loading up a single PID with pretty much everything, but then using a few other threads for random specific tasks like network ticks.
They probably realized with the expansion of NUMA since 2012 that it's better at the OS level for it to just single-thread in the hopes its entire memory footprint ends up on a single socket and memory controller.
PlanetSide 2: False Hopes of Faster and Faster GHz, Because Physics
As your active core count increases for "parallel" work, it will heat throttle to slower and slower GHz to maintain heat thresholds. More transistors flipping bits = more leaked electricity = more heat.
"Processors have two modes of thermal protection, throttling and automatic shutdown. When a core exceeds the set throttle temperature, it will start to reduce power to bring the temperature back below that point. The throttle temperature can vary by processor and BIOS settings. If the conditions are such that throttling is unable to keep the temperature down, such as a thermal solution failure or incorrect assembly, the processor will automatically shut down to prevent permanent damage."
Even though each reduction in transistor size decreases the amount of wasted current, we aren't at the electron level yet. Nature is pretty freaking amazing with its conservation of energy tactics.
Most games are single-threaded, so all of the "parallel" work much like UMA programs running on NUMA architecture is kinda faked at a virtualization layer.
Also setting even or odd core, or one whole side of a memory controller or the other, based on architecture can help to ensure your game is only running on physical "logical" cores.
Not hyper-threaded ones which will throttle overall performance for the sake of "parallel" work it's not actually physically capable of doing.
When all your cores are active, your GHz per core drops for heat management. So what you're looking for is the sweet spot for your motherboard layout, memory controller, and CPU.
Click the Taskbar > Task Manager and just watch on the Performance tab after clicking on the CPU on the left. Watch the speed widely fluctuate.
As it's giving you an average over 8 cores in my case. The more multi-threaded you try to go, the lower the average GHz will drop.
If it looks like CPU Affinity is helping, which I almost can't imagine a case it would hurt performance when you've found the right cores for your architecture.
You probably don't want to Alt-Tab and set this each time. You can play with some command line options but it's gonna be totally different based on your setup.
So that's where BitSum's Process Lasso shines very nicely:
Go ahead and head over to BitSum.com and grab Process Lasso.
When you first launch it, I just use the default options:
Management Console (GUI) Startup: Start at login for ALL users
Core Engine (Governor) Startup: Start at login for ALL users
Click Next, cause as they mention: Confused? Simply click NEXT and everything will work lol
Management Scope and Configuration Folder: Manage ALL processes Process Lasso has access to
Use a non-default setting or log storage location?: Use recommended location (per-user)
Click FINISH
Again launch PlanetSide 2 and once in-game, Alt-Tab back to Process Lasso
Swap to the Active processes tab
Right-click PlanetSide2_x64.exe > CPU Affinity > Always > Select CPU Affinity
Here it should also show NUMA Nodes
Even if you just have Node 0 you can still benefit from CPU Affinity by playing around till you find the best core combo.
You can watch the Core CPU% usage graph at the top-right, and see it's skipping the Hyper-Threading cores
This is a downside to Mac hardware for sure. With its OpenFirmware from FreeBSD, it doesn't easily support disabling NUMA memory interleaving, like just about any modern PC BIOS lets you do
I could spend the time to do it, but I get good enough performance with just the virtual CPU Affinity/Pinning and I don't wanna swap settings back-and-forth when I swap between MacOS and Windows
I run some stuff in my MacOS Dev Environment that is a bit sensitive to having NUMA Memory Interleaving disabled, since it can span upwards of 25GB of usage which would span multiple physical NUMA Zones anyways
Process Lasso also has a shortcut for disable Hyper-Threading, in my case it selects the even "physical" cores only
This is due to the more cores active = less GHz, as well as sometimes your OS will lie about the actual hardware based of BIOS setting
Thanks to [FEAR] annarocks, he pointed out his shows only Node 0 on a AMD Ryzen 5 3550H Quard-Core
This is beyond dumb, because with a 102GB/s die-to-die bandwidth, it is faking UMA architecture to Windows on-top of a real physical NUMA one
He was able to go into the BIOS and look for where it set NUMA to Memory Interleave and change it to Channel
This enables the performance of the Hardware he paid for!
I mean look at this crap, an additional 55ns delay to talk to the far-memory, come one ASUS why you screwing over AMD like that?
This is why I trust exactly 0% of the benchmarks for any CPU or RAM online. If I am not testing it myself I call bull!
No one understands this crap today, I work with Intel Engineers and there is nothing on the market fast enough to speed up when we have a single frame to render that takes 2 weeks
So I had to learn a bunch of this crap, so we actually get the performance out of the servers we bought for our render farm
Interestingly enough, with Process Lasso my best performance seems to come from just disabling HT cores
There are so many variables at play, for some stuff, the built in Windows tools will allow better kernel access
But then in some cases 3rd party software is leaner and can perform better
With Always, CPU Affinity for the PlanetSide2_x64.exe. With Process Lasso running before you launch PlanetSide 2 it'll maintain those settings
You get a nice little graph over time as well that shows you, in my case:
11% Processor Use
100% Responsiveness
29% Memory load
To the far right you also get a nice per core %CPU indicator
Check it out when you restrict it to just core 0
There is so much more to Process Lasso, but just stick with these basics unless you really are hunting for a few more fps
PlanetSide 2: Graphic Card Specific Tweaks and Beyond
Welp that's a book. I could go on into the various renditions of Nvidia and AMD/Radeon's control panels and other hardware level stuff like downsampling and what not at the card itself.
But I'll leave that up to you to research a bit based off what you have, since things vary so much. While the PlanetSide 2 in-game settings + Windows process management works across the board for anyone.
If you still have a HDD, a $50 500GB SSD will typically be a way better upgrade than more RAM or a better video card as a first step.
Depending on your generation of hardware you will probably butt up against being CPU bound, if you throw a brand new modern GPU in. More RAM is always nice but 4-8GB should usually suffice if you've tweaked your settings.