After a few hours messing around with many, many settings trying to improve FPS and diminish stuttering I decided to compile a few changes I think makes a decent difference in FPS to help others.
There are a lot of options which you cannot change directly in the game in the file user.xml, located at C:/Program Files (x86)/Steam/steamapps/common/TreeOfSavior/release/user.xml
Open it in notepad and use wordwrap (Format -> Word Wrap). Also try these changes one by one, saving and opening tree of savior because some of them may cause weird errors, and you should revert if so. Some interesting options are:
Resolution mode: if set to “0”, will make the game in true full screen. Which adds quite a bit of FPS, but you won’t be able to alt-tab out of it
DrawActorPersent: the number of characters draw in the screen at any given time. Includes NPCs as well as other players. It helps a lot with crowded places such as Klaipedia. I set mine to 20, which helps a little with FPS but doesn’t makes many chars disappear. I actually don’t think my computer can handle the original amount which is 99! But the biggest issue doesn’t seems to be character rendering, but receiving network packets of what other players are doing, which this setting does not fix.
DrawMonsterPersent: the same thing but for monster. Needs to be higher than DrawActorPersent since you usually wanna see more monsters. Limiting it also helps in huge respawn areas that can lag you for seconds. I’ve changed this to 30, but haven’t tested it fully on areas with many enemies.
BitPerPixel: basically the color depth of each pixel. More bits means a bigger color palette, but at the cost at of lower FPS. Several people commented that changing this value to 16 makes it faster without any noticeable difference. This setting may not work on Hi-Definition monitors (myself included), which usually can only be set to 32 or 64. Lower resolution monitors may support 8, 16, 24 and 32.
UseFastLoading=“1” may make maps load faster? It seems to but I’m not entirely sure does anything.
Also changing your resolution width and height to something lower than your native resolution works well. But do mantain the proportion between height and width, or else things will be weird.
If available, also set VSync to Adaptative for you GPU set to on, which results in less stutter. There’s no such options in game, but you may be able to force it on your GPU control panel. For nvidia cards, this can be found opening the Control Panel -> Manage 3D settings -> Program Settings tab -> add or select tos client (in the same folder as user.xml above) -> set vertival sync to Adaptive. Also since you’re already there turn every other setting to off, and select prefer maximum perfomance in power management mode (to make sure ToS will use your discrete graphics card instead of the onboard one)
Regarding the spam issues… The game uses TCP connections and seems to do a poor job optimizing how packets are received and processed. This results in global chat actually stuttering the screen. There are 2 fixes at the moment right now (which aren’t simply hide the chat which does nothing), one which disables all chat using a windows firewall rule (which is installed by defatult on all computers and could be considered less of an exploit), and the other by installing a third party software which selectively blocks incoming spam messages. The latter being quite doubtful regarding the rules of service from ToS. Both solutions can be read at https://www.reddit.com/r/treeofsavior/comments/4czl9l/bot_spam_message_blocker/
Issues:
If you set it to full screen mode you cant alt tab. No way around it as far as I know.
If your mouse cursor disappears if you set it to true fullscreen mode, go to (Windows 10) display settings -> advanced -> advanced sizing -> set a custom scaling level and put something less than 150 (149 works for example). This may happen on high resolution screens. (Im using a retina macnook pro which is 2880 x 1800). This issue is related to not having a higher DPI sprite for the cursor which then disappears.
Stuff that seems to make no difference in FPS whatsoever (to me):
adding flag -dx11 to run in steam (since it seems to already run as dx11 if available)
changing texture, bloom, FXAA, etc
Results and Hardware:
Im running on a 2014 MacBook Pro with discrete graphics, which has 16GB RAM, a GT 750M and a quad core i7 at 2.2Ghz on Windows 10.
Before those changes I was getting 20-30 FPS in dungeons and 5-15 FPS in Klaipedia. After them, I get 45-60 FPS in dungeons and 20-60 FPS in Klaipedia.
Stuttering is still quite visible, which seems to be caused by loading new characters/monsters on the screen, but the duration of the stutter has been lessened. Before I could “freeze” for whole seconds, and now its a lot minor (still annoying as hell, but doesn’t affects gameplay that much). Using something to block global chat partially fixes a lot of the constant stuttering.
The most simple way to verify stuttering is to simply walk/jump around in a map.
Conclusoion:
While these changes do make the game a whole lot better to play, it’s clear ToS needs to further optmize how new elements are rendered on the screen in order to completely avoid stuttering.
It would be awesome if @STAFF_Ethan or another member could clarify what some options in user.xml are for, since many seems to be related to FPS. And also some other tips on maximing ToS performance in general?