When Firaxis chose to use Unreal Engine to power their latest title, XCOM 2, they chose to stay on the older version 3 of the engine instead of the latest, and fully Linux-compatible, version 4. It seems that when they brought XCOM: Enemy Unknown to the masses, they'd hacked that version 3 engine so much, it was practically an entirely new fork. Porting all their customisations to the newer engine would have been daunting, so they decided to stick with that customised engine for XCOM2.
However, this has brought some hangovers from that earlier version with it, hangovers that Feral left in place during the porting. In particular, many titles using UE3 suffer from an extremely low default memory allocation. In fact, the default PoolSize is set at just 10Mb, and I suspect that Feral have to leave it that way to ensure maximum compatibility. In fact, besides Poolsize, you can tweak quite a few settings in your game's ini file, but as usual, it appears that PoolSize is the primary factor in smoothing out the performance. Original credit to this tester for Unreal Engine 3 here from 2013, regarding the original XCOM game.
Having tried these changes myself, I can report that performance leapt from "frustrating and shoddy" to "entirely playable". There is still a little stutter evident in the loading transitions while in the dropship, but in-game performance is definitely a huge improvement. I'd go as far as to use the phrase "buttery smooth". No more slide-show explosions, or missed action-shots.
Here's what you can do.
Important Note: We suggest reverting these changes for any patches that come, as it could affect them. Always revert changes like this when a patch is released.
Before making any changes, you might want to make a copy of your file, then you'll need to open it for editing:
And then find the PoolSize=10 line and change it to something more reasonable, such as 256.
If you just want the quick fix, you can skip this section, however as the more detailed article points out, you might want to change the following lines too. I did, but it's not entirely clear how much they contribute. Feel free to experiment!
Having made the changes, the first thing that XCOM 2 tries to do is set it all back to default values again, so you'll need to mark that file read-only:
(actually, you might want to make that change with sudo so that root owns the file, preventing XCOM 2 from changing it back - some users reported that XCOM 2 does indeed "undo" the read-only flag!)
And that should be the game fixed up for immediate play!
As always, there are a lot of systems out there that will handle these changes differently, so your mileage may vary. Remember to mark the file read-only before playing and if you still don't see a change, try the "reset to defaults" trick mentioned in the original source article.
For reference, my system specs are:
O/S: Ubuntu 14.04 64bit
GPU: Nvidia GTX670, 2Gb
Chip: Intel i7 2600k
RAM: 16Gb
I used the 256Mb PoolSize as shown above, but could have gone 512Mb, as the original source article suggested "GPU memory divided by four". I used the ShaderThreshold 4 as shown above.
If you don't know your video memory, you have two options. If you're using Nvidia, you can simply run the Nvidia XServer Settings GUI (and I think Catalyst drivers might have a similar option actually). Otherwise, you can run:
That will hopefully show you how much RAM your computer detected on start up.
Good luck, Commander!
However, this has brought some hangovers from that earlier version with it, hangovers that Feral left in place during the porting. In particular, many titles using UE3 suffer from an extremely low default memory allocation. In fact, the default PoolSize is set at just 10Mb, and I suspect that Feral have to leave it that way to ensure maximum compatibility. In fact, besides Poolsize, you can tweak quite a few settings in your game's ini file, but as usual, it appears that PoolSize is the primary factor in smoothing out the performance. Original credit to this tester for Unreal Engine 3 here from 2013, regarding the original XCOM game.
Having tried these changes myself, I can report that performance leapt from "frustrating and shoddy" to "entirely playable". There is still a little stutter evident in the loading transitions while in the dropship, but in-game performance is definitely a huge improvement. I'd go as far as to use the phrase "buttery smooth". No more slide-show explosions, or missed action-shots.
Here's what you can do.
Important Note: We suggest reverting these changes for any patches that come, as it could affect them. Always revert changes like this when a patch is released.
Before making any changes, you might want to make a copy of your file, then you'll need to open it for editing:
cd ~/.local/share/feral-interactive/XCOM2/VFS/Local/my\ games/XCOM2/XComGame/Config
cp XComEngine.ini XComEngine.ini.original
gedit XComEngine.ini
And then find the PoolSize=10 line and change it to something more reasonable, such as 256.
If you just want the quick fix, you can skip this section, however as the more detailed article points out, you might want to change the following lines too. I did, but it's not entirely clear how much they contribute. Feel free to experiment!
MipFadeInSpeed0=0
MipFadeOutSpeed0=0
MipFadeInSpeed1=0
MipFadeOutSpeed1=0
MinSmoothedFrameRate=30
MaxSmoothedFrameRate=400
bInitializeShadersOnDemand=True
DisableATITextureFilterOptimizationChecks=False
UseMinimalNVIDIADriverShaderOptimization=False
PoolSize=256 (or VideoRAM/4, up to 768 max)
bAllowMultiThreadedShaderCompile=True
ThreadedShaderCompileThreshold=4 (match your CPU cores, so an i3=2, while i5 or i7=4)
OnlyStreamInTextures=True
Having made the changes, the first thing that XCOM 2 tries to do is set it all back to default values again, so you'll need to mark that file read-only:
chattr +i XComEngine.ini
(actually, you might want to make that change with sudo so that root owns the file, preventing XCOM 2 from changing it back - some users reported that XCOM 2 does indeed "undo" the read-only flag!)
And that should be the game fixed up for immediate play!
As always, there are a lot of systems out there that will handle these changes differently, so your mileage may vary. Remember to mark the file read-only before playing and if you still don't see a change, try the "reset to defaults" trick mentioned in the original source article.
For reference, my system specs are:
O/S: Ubuntu 14.04 64bit
GPU: Nvidia GTX670, 2Gb
Chip: Intel i7 2600k
RAM: 16Gb
I used the 256Mb PoolSize as shown above, but could have gone 512Mb, as the original source article suggested "GPU memory divided by four". I used the ShaderThreshold 4 as shown above.
If you don't know your video memory, you have two options. If you're using Nvidia, you can simply run the Nvidia XServer Settings GUI (and I think Catalyst drivers might have a similar option actually). Otherwise, you can run:
dmesg | grep VRAM
That will hopefully show you how much RAM your computer detected on start up.
Good luck, Commander!
Some you may have missed, popular articles from the last month:
All posts need to follow our rules. For users logged in: please hit the Report Flag icon on any post that breaks the rules or contains illegal / harmful content. Guest readers can email us for any issues.
ha.. it actually made perf worse for me.
dropped from 30 fps to 20 in the mothership (command hub)
AMD FX8320@4,4ghz, GTX 970.
didn't check into battle because was turned off by the perf drop in the command hub.
so i probably wont need this tweak, for me it runs solid 40-70 without those tweaks also, everything set to high, AO tiled, depth of field off, bloom off, 1080p
Last edited by Xpander on 9 February 2016 at 3:57 pm UTC
dropped from 30 fps to 20 in the mothership (command hub)
AMD FX8320@4,4ghz, GTX 970.
didn't check into battle because was turned off by the perf drop in the command hub.
so i probably wont need this tweak, for me it runs solid 40-70 without those tweaks also, everything set to high, AO tiled, depth of field off, bloom off, 1080p
Last edited by Xpander on 9 February 2016 at 3:57 pm UTC
0 Likes
Really noticeable improvement here. I haven't measured frame rates, but the stuttering is almost entirely gone with these changes.
Ubuntu 15.10
Intel i5 2500k
GTX 970
Ubuntu 15.10
Intel i5 2500k
GTX 970
1 Likes, Who?
I found this a couple days back, and it made a MASSIVE amount of difference for me, from unplayable, to perfectly fine with everything up, save texture detail, which I have to set to Medium to prevent stutter, even with the .ini tweaks.
According to the ingame FPS counter, which you can access from the Feral launcher by going to the Advanced tab, entering -showtestpanel, then enabling it in the new tab that shows up immediately to the right of it, I'm getting a consistent 45-50 FPS in mission
According to the ingame FPS counter, which you can access from the Feral launcher by going to the Advanced tab, entering -showtestpanel, then enabling it in the new tab that shows up immediately to the right of it, I'm getting a consistent 45-50 FPS in mission
1 Likes, Who?
@xpander, you're using a beta though arent you frome what I saw in the IRC?
0 Likes
in-mission the engine tweaks helped a great deal; the beta patch helped to a lesser degree (with engine tweaks off). i'd love patch notes for the beta patch. performance outside missions is still atrocious, along with the abysmal after-mission load times and OpenVPN/networking launch issues. i saw no "performance regression" with the 361.18 drivers compared to 35x.xx.
i'd also like to know why MSAA is missing from the Linux version completely, and i'd love more info on Windows vs Linux graphics/driver issues/differences, but that's mostly because i'm a nerd, not to complain about it.
that being said, the fact that Feral has a beta performance patch out before the Windows version is... i don't even know the right word to use. their support is (still) great; i remember working with them when EU/EW came out to get the (same as XCOM2, sigh) networking issue fixed.
great job so far (again), Feral!
Last edited by harleywastaken on 9 February 2016 at 6:10 pm UTC
i'd also like to know why MSAA is missing from the Linux version completely, and i'd love more info on Windows vs Linux graphics/driver issues/differences, but that's mostly because i'm a nerd, not to complain about it.
that being said, the fact that Feral has a beta performance patch out before the Windows version is... i don't even know the right word to use. their support is (still) great; i remember working with them when EU/EW came out to get the (same as XCOM2, sigh) networking issue fixed.
great job so far (again), Feral!
Last edited by harleywastaken on 9 February 2016 at 6:10 pm UTC
0 Likes
And then find the PoolSize=10 line and change it to something more reasonable, such as 256.Poolsize issues are quite common with the Feral ports (Spec Ops: The Line eg.), though it is not too hard to get appropriate values by the command line, as described above. Why are the sizes set to values which don't even come near to the minimum settings (1024/4=256>>10) ?
0 Likes
And then find the PoolSize=10 line and change it to something more reasonable, such as 256.Poolsize issues are quite common with the Feral ports (Spec Ops: The Line eg.), though it is not too hard to get appropriate values by the command line, as described above. Why are the sizes set to values which don't even come near to the minimum settings (1024/4=256>>10) ?
Spec Ops is VP, not Feral.
3 Likes, Who?
Really nice ! Although the game crashes on my i5 with 4 threads, but with 2 works just fine :) thanks.
0 Likes
20FPS -> 40FPS
Thanks!!!! :D
Thanks!!!! :D
0 Likes
Heck where can i get the beta patch? Feral software has no patches released still
Last edited by Uncleivan on 9 February 2016 at 8:04 pm UTC
Last edited by Uncleivan on 9 February 2016 at 8:04 pm UTC
0 Likes
I'll have another hint, if you don't mind to often change graphics settings:
If you are in your base you can actually get Diashow-Com to an acceptable behavior if you set the shadows to "Directional Only", other settings like Texture Detail and Filtering have way less impact.
At least in my case it helps out a lot, it's just a bit annoying to turn the shadows back on on a mission and restart the game to remove stuttering...
(Intel i5, Nvidia GTX 960)
If you are in your base you can actually get Diashow-Com to an acceptable behavior if you set the shadows to "Directional Only", other settings like Texture Detail and Filtering have way less impact.
At least in my case it helps out a lot, it's just a bit annoying to turn the shadows back on on a mission and restart the game to remove stuttering...
(Intel i5, Nvidia GTX 960)
0 Likes
@xpander, you're using a beta though arent you frome what I saw in the IRC?
ohh yes...that might explain
0 Likes
Wow!!! A complete different game after applying the modifications, now it's perfectly playable. I wonder why the default values behave so bad.
Thank you for the tweaks!!
Thank you for the tweaks!!
1 Likes, Who?
Downloading now. We will be in touch, Commander.
1 Likes, Who?
The PoolSize is a proven tweak for UE3 titles, but why would I set
MaxSmoothedFrameRate to 400?
MaxSmoothedFrameRate to 400?
0 Likes
Just changing the poolsize to 512 helped quite a bit for me. I was maxing at about 30 FPS, now I'm maxing at like 42 FPS with low/med settings (using the Steam FPS counter).
Running on Antergos / FX8320 / R9270 / Catalyst15.12
Running on Antergos / FX8320 / R9270 / Catalyst15.12
1 Likes, Who?
WTF? Changed XComEngine.ini to bigger pool size and ThreadedShaderCompileThreshold to 2. chown'ed the file to root:root and gave it a 0755. Guess what? It got both reowned by the "me" and chmod'ed to 0770 again. How can that be? Any suggestions?
Anyway, contrary to the article my settings were not reverted - pool size is still 512 and the compile threshold still 2.
Anyway, contrary to the article my settings were not reverted - pool size is still 512 and the compile threshold still 2.
0 Likes
WTF? Changed XComEngine.ini to bigger pool size and ThreadedShaderCompileThreshold to 2. chown'ed the file to root:root and gave it a 0755. Guess what? It got both reowned by the "me" and chmod'ed to 0770 again. How can that be? Any suggestions?
Anyway, contrary to the article my settings were not reverted - pool size is still 512 and the compile threshold still 2.
The only way that should be possible is if you're running Steam as root, which would (obviously) be a terrible idea. Beyond that possibility, you have a serious flaw on your box if you're seeing root-owned files being chowned by non-root processes...
Did the game improve for you though? That's the most important thing. :D
0 Likes
The PoolSize is a proven tweak for UE3 titles, but why would I set
MaxSmoothedFrameRate to 400?
Good question! The original source suggests "leaving" this at 400, but I found my setting was actually 62. I bumped it up to 400 because I have no experience to argue against an obviously knowledgeable UE3 tester, but since that advice came from 2013, it may well be flawed. 400 does seem a bit on the high side and potentially risks running your card hot generating frames that your screen can't draw and your eyes are incapable of discerning.
Of course, if this was CS:GO, you'd have some folk argue that 400 isn't really high enough... :)
0 Likes
Yes, I could see the reason for a higher value than the default 62 in case of a higher refresh monitor, but for the usual 60 Hz ones I would leave it as it is.The PoolSize is a proven tweak for UE3 titles, but why would I set
MaxSmoothedFrameRate to 400?
Good question! The original source suggests "leaving" this at 400, but I found my setting was actually 62. I bumped it up to 400 because I have no experience to argue against an obviously knowledgeable UE3 tester, but since that advice came from 2013, it may well be flawed. 400 does seem a bit on the high side and potentially risks running your card hot generating frames that your screen can't draw and your eyes are incapable of discerning.
Of course, if this was CS:GO, you'd have some folk argue that 400 isn't really high enough... :)
I was curious to see if there is a special argument for the 400 value.
0 Likes
I also occasionally dabble a bit in Python, I do Internet Security for a living and finally, I'm a big fan of Neil Degrasse Tyson. And not just because he has a cool first name.
See more from me