STEAM GROUP
Special K - "Kaldaien's Mod" Special☆K
STEAM GROUP
Special K - "Kaldaien's Mod" Special☆K
265
IN-GAME
2,475
ONLINE
Founded
May 23, 2016
Language
English
All Discussions > Development > Topic Details
BlankFX Apr 29, 2020 @ 8:11pm
Assassin's Creed Odyssey - Heavy Performance Fix
I just made an interesting discovery regarding Assassins Creed Odyssey I thought I should share and that might heavily help all those that were in false hope Special K Mod would fix their performance issues.
I did some benchmarks with the games internal benchmark tool for that. To make sure it was fault free, I repeated them all a couple of times.

System Specs I benchmarked with:
i7-4790K
RTX 2080 Ti
32 GiByte of RAM

No Modifications:
FPS min: 25
FPS avg 42
FPS max: 60
CPU min: 17 ms
CPU avg: 24 ms
CPU max: 39 ms
GPU min: 13 ms
GPU avg: 20 ms
GPU max: 33 ms

Special K Mod (taken from SK_Odyssey_fast_stream-v0.7z, the most recent Special K makes the game crash at startup)
FPS min: 13
FPS avg 37
FPS max: 54
CPU min: 19 ms
CPU avg: 27 ms
CPU max: 76 ms
GPU min: 13 ms
GPU avg: 21 ms
GPU max: 65 ms

So far this might not be anything new to us as Kaldaien stopped supporting Ubisoft Games for a very decent reason.

Now there is a tool called DXVK, which also uses dxgi.dll-Interception, like Special K, but is actually a wrapper from DirectX to Vulkan. The primary goal of the DXVK-Project is to make games using DirectX run on Linux. It's feature to also work on windows is just a nice side effect of that.
Devs of DXVK stated they couldn't think of a scenario where DXVK could improve performance on Windows over the native implementation of DirectX.
Yet, I was able to absolutely make sure I got heavy performance improvements by using DXVK on Assassin's Creed Odyssey.

DXVK:
FPS min: 32
FPS avg 73
FPS max: 104
CPU min: 10 ms
CPU avg: 14 ms
CPU max: 31 ms
GPU min: 9 ms
GPU avg: 14 ms
GPU max: 32 ms

As stated above I repeated these benchmarks a couple of times in each configuration to verify this effect.
I assume the improvements might heavily depend on the CPU, which was kind of bottlenecked by my aging i7-4790K and no mod.
Now I'd love to see if some users could verify my discovery by doing some benchmarks too.
If you do so, please pay attention to the fact that DXVK does lag for a very short period of time when it has to render shaders for the first time to create it's "ACOdyssey.dxvk-cache"-File. This initial lag requires you to repeat the benchmark to get valid results.

I hope Kaldaien won't mind me to create this thread in his forum, but yet it's a good chance to put more shame on Ubisoft, which I hope will be fine by him. ¯\_(ツ)_/¯
Last edited by BlankFX; Apr 29, 2020 @ 8:12pm
< >
Showing 1-15 of 35 comments
Kaldaien Apr 29, 2020 @ 9:30pm 
The fast stream version is likely to actually cause performance issues, rather than alleviate them if I remember correctly. There's a slower streaming version that balances disk I/O less aggressively; you wind up with more visible texture pop-in, but fewer hitches.

I do not recall any of this stuff affecting the in-game benchmark though, sadly. The hitches I spotted do not happen in the benchmark, they were repeatable during gameplay only and only in the larger cities.
Kaldaien Apr 29, 2020 @ 9:33pm 
As for DXVK improving things, this is likely due to its swapchain management. You may want to try adjusting the swapchain settings in Special K's control panel to see if it changes anything.

Use Flip Model + 3 backbuffers + 4 max device latency + 1 presentation interval will probably deliver a change similar to DXVK.
BlankFX Apr 30, 2020 @ 6:32am 
Thanks for the input. I applied what you recommended and did new benchmarks using the version from SK_Odyssey_slow_stream.7z.

Sadly I wasn't able to accomplish any decent improvements.

SK_Odyssey_slow_stream-Mod with Flip Model, 3 backbuffers, 4 max device latency, 1 presentation interval. (I also had to set Fullscreen=true, ForceFullscreen=true and OverrideRes=1920x1080 in dxgi.ini for it to work properly.)
(values in () give the difference to the Special K-benchmark from above)
FPS min: 17 (+4)
FPS avg 39 (+2)
FPS max: 57 (+3)
CPU min: 17 ms (+2)
CPU avg: 26 ms (-1)
CPU max: 59 ms (-17)
GPU min: 13 ms (+/- 0)
GPU avg: 21 ms (+/- 0)
GPU max: 53 ms (-12)

For comparison, another benchmark using DXVK:
FPS min: 28
FPS avg 72
FPS max: 107
CPU min: 9 ms
CPU avg: 14 ms
CPU max: 36 ms
GPU min: 9 ms
GPU avg: 14 ms
GPU max: 33 ms
Kaldaien Apr 30, 2020 @ 9:02am 
ForceFullscreen is not compatible with flip model, that setting is to force fullscreen exclusive mode. On Windows 8.1+, a borderless flip model swapchain is preferred. Some of those settings only apply in borderless mode.

Overall, I'd say just stick with DXVK though. I've been saying since the game launched that D3D11 is a bottleneck for the engine. I did not think that translating D3D11 -> Vk is all it would take to lessen that bottleneck :P
JBeckman Apr 30, 2020 @ 9:29am 
Certain standards being enforced or supported (Like flip model presentation.) and whatever extensions are in effect as DXVK frequently adds in the newest ones.

https://github.com/doitsujin/dxvk/releases

There isn't much from 1.6.1 but the compiled version can be found via.
https://git.froggi.es/doitsujin/dxvk/-/jobs

Work for DXGI 1.6 support and the newest improvements from the Vulkan 1.2.139.0 SDK although for AMD they support up to 1.2.131 I believe on Windows with 20.4.2 and NVIDIA is using 1.1.x for their main release branch drivers of 445.98
(Vulkan branch is a bit behind the main one but I think Vulkan SDK support for that is at 1.2.135.0 now, should be merged in ready for 450.x whenever that's finalized.)

But it should still cover for the bigger gains in 1.0 and 1.1 anyway. :)
Though while I have heard and seen NVIDIA comparisons it's interesting that it still works really well for Origins and Odyssey, AMD's situation is what it is but NVIDIA has a near 40% gain for D3D11 anyway due to for one thing the driver having less CPU overhead.


Still works though and apparently really well, hopefully the recently revealed Valhalla actually utilizes D3D12 or Vulkan and with other Anvil games and Ubisoft using these chances are we'll finally get these gains naturally and other improvements from using low-level API's and gains since D3D11.x even if it's done pretty well over the years.
Last edited by JBeckman; Apr 30, 2020 @ 9:32am
Kaldaien Apr 30, 2020 @ 10:15am 
Oh, neat.

Implemented missing DXGI functionality for some SpecialK mods. (#1544)

I'm mentioned in a much more important project :)
JBeckman Apr 30, 2020 @ 10:29am 
Yeah FAR and DXVK, no idea what the game would do without the SpecialK / FAR fix for scaling but I thought D3D12 and Vulkan mostly only did "unspecified" anyway and didn't support the other ones any more.


Here's hoping whoever is porting Nier Replicant (And it's added features and improvements.) either does a good job with the PC port directly or they actually get greenlit this time to support and update it properly should there be any issues.

For Ubisoft well Valhalla using low-level API support is hopefully a thing and while I don't expect much for Odyssey or Origins patching out Denuvo would be nice whether the implementation affects performance in any way or just decreases the startup time.


Probably best as can be hoped for unless something critical comes up or they release a updated edition some years from now.
(Stadia uses Vulkan I think so that at least speaks for Valhalla and the Anvil Engine using this API which is a positive thing.)


EDIT: And HDR support but I think Ubisoft handled that pretty competently for these games and I have no idea what bleak looks like with HDR for Nier.
(Black levels, white levels what's there even to do for the gray ones.)

EDIT: Thanks Google I know what Automata looked like and there's probably more to Replicant (Daddy mode?) or Gestalt (Bro mode?) than this one outfit for Kaine...
Last edited by JBeckman; Apr 30, 2020 @ 10:34am
JBeckman Apr 30, 2020 @ 10:37am 
Back on the actual topic though I suppose the Ubisoft situation also still hinders things for support for these games and others if their idea of third party mods or utilities is that they're malicious and won't even bother with trying to get that resolved, unfortunate but it is what it is.

EDIT: Especially if Steam is doing it's +1 score tally for running bans and that situation again. Yay.
Last edited by JBeckman; Apr 30, 2020 @ 10:38am
SASUS May 8, 2020 @ 7:09am 
Hi, I installed a Special K on AC Odyssey and I stopped working DuakShock4 in the game
fray_bentos May 22, 2020 @ 4:36pm 
This post is incredible! Thank you!

While many rural parts of the game run at a fairly smooth 100+ fps on my Windows machine, some of the towns and cities crawl to an unacceptable speed (which for me is anything under ~80 fps).

Using DXVK 1.7 boosted my fps from 64 to 84 fps at one of the most CPU demanding parts of the game (Euobia, Posideon Temple sync point, straight after syncing).

64 to 84 fps!

It was like getting a free CPU upgrade on my aging (but healthily overclocked) i7 4790K! This was one of the few games giving me the twitch to upgrade, but I will now see if I can hang on until DDR5 systems launch (2022?).


Steps:
1. I downloaded DXVK 1.7 from doitsujin/dxvk/releases at Github.
2. I usd 7zip to extract d3d11.dll and dxgi.dll from the x64 folder in the download archive and dropped both of these files into the root of the game installation folder (alongside ACOdyssey.exe).
3. Ran around a bit and let Ikaros fly over the map to iron out the stutters due to shader compilation.
4. Went to Argos, Posideon Temple sync point, recorded fps reported by my GSync monitor = 84fps!
5. Running around towns is now noticably smoother and much more enjoyable.

Removing the DXVK .dll files / dropping them back into the game root directory reproducibly flicked the performance from 55 fps (standard game .dlls removed) and 84fps (DXVK 1.7 dlls present) at this demanding location. There are occassional skipped frames as my machine compiles new shaders into the cache (but this is decreasing the more that I play the game), but this is well worth it given the massive boost to performance in crowded areas. The in-game benchmark scores also increased using DXVK, but not by much; 5fps or so since the benchmark is nowhere near as CPU demanding as places such as the Posideon Temple sync point.

My specs/settings:
4790K @ 4.9 GHz (1.30 V and 64 C under load)
32 GB 2400 MHz CL10 RAM
GTX 1080Ti (driver 442.19)
1440p 165 Hz Gsync monitor
Uplay version of the game
Custom game settings
ACOdyssey.exe set to high CPU priority in Task Manager
FPS capped at 120 in Nvidia control panel.
Uplay client forced closed (not running in background)
Windows 10

It's not my 4C/8T PC that needs an upgrade, just Ubisoft need to seriously consider changing the backend of their games to reduce CPU overhead.

Hmmmm, I wonder if DXVK might help speed the original Crysis up enough to run at an "acceptable" framerate on my PC (i.e. above 100 fps for a first-person perspective game)...Edit: Crysis had a slight improvement of 3 fps, but not enough once the action heated up. GTA V, might have been given a bit of a boost by ~10%, but more testing is needed.

Once again, thank you so much!
Last edited by fray_bentos; May 23, 2020 @ 4:03pm
Kaldaien May 22, 2020 @ 5:24pm 
You know the funny thing in all of this?

The engine that Assassin's Creed uses (Anvil) is D3D12 (on Xbox) / GNM (on PS4) native. On PC they run it through a compatibility layer that runs D3D11. So we have an engine that is D3D12, translating to D3D11 and then D3D11 translated to Vk.

While all of this is going on, talking pigs are flying around remarking how unlikely the whole situation is.

You know Ubisoft's engine sucks when running it through 2 translation layers is faster than running it in its native API :)
JBeckman May 22, 2020 @ 9:23pm 
Impressive that it works well for NVIDIA too since their D3D11 driver code is pretty good but Origins already pushed the limits of what some of the D3D11 API limitations could deal with and Odyssey goes even further.

Hopefully the upcoming one will be using Vulkan or D3D12 natively and these limits and whatever limits Ubisoft added by their D3D12->D3D11 translation will be gone.
(Pretty certain Vulkan 1.1.x was developed enough to have been able to handle Odyssey while also allowing Windows 7 and Windows 8 compatibility.)


EDIT: Though part of it might be how the game also just all but requires a hexa core CPU or better otherwise the performance becomes pretty wonky especially in some areas like the cities plus you get a bunch of extra threading for how the NVIDIA driver handles command context queues I believe it's called and driver command lines what it was called again which also doesn't scale down for some reason and is just 8 I think it was.

Game itself still needs a lot from the CPU though, impressive how DXVK improves things considering it should have a bit of a CPU overhead but it might be improving average and mins even if max framerate is a tad slower but that's not as bad as lower mins or worse on average framerate plus what it does to smoothness if frame time and such is also good.
(Latency too and all that.)
Last edited by JBeckman; May 22, 2020 @ 9:27pm
fray_bentos May 23, 2020 @ 7:11am 
Originally posted by Kaldaien:
You know the funny thing in all of this?

You know Ubisoft's engine sucks when running it through 2 translation layers is faster than running it in its native API :)

Indeed! Hopefully they go native DirectX 12 for Valhalla. I gave it a shot for Crysis and only got ~ 3 extra frames (77 to 80 fps at the view over the bay at the start of the game), but still dropped too low to be playable for me once explosions started bringing walls down. GTA V *might* have given me an extra ~10 fps on each scene in the benchmark (e.g. ~100 to 110fps), but I can't be 100% certain because the game reset all of the graphical settings after putting DXVK in place, so I had to reset those from memory AND it disabled the Nvidia-specific AA implementation that I had activated previously. So GTA V requires more testing when I get time for it.
Last edited by fray_bentos; May 23, 2020 @ 7:21am
fray_bentos May 23, 2020 @ 7:19am 
Originally posted by JBeckman:

EDIT: Though part of it might be how the game also just all but requires a hexa core CPU or better otherwise the performance becomes pretty wonky especially in some areas like the cities plus you get a bunch of extra threading for how the NVIDIA driver handles command context queues I believe it's called and driver command lines what it was called again which also doesn't scale down for some reason and is just 8 I think it was.

Game itself still needs a lot from the CPU though, impressive how DXVK improves things considering it should have a bit of a CPU overhead but it might be improving average and mins even if max framerate is a tad slower but that's not as bad as lower mins or worse on average framerate plus what it does to smoothness if frame time and such is also good.
(Latency too and all that.)

You might be right about that; I didn't focus on the max framerates because I capped my fps at 120 in the Nvidia control panel for this game in the hope of smoothing things out. Indeed, I don't care about high max frame rates, but do care about performance of the minimums in busy areas.

JBeckman May 23, 2020 @ 8:15am 
From what I remember and from what Kaldaien posted back with Assassin's Creed Origins the game is pushing a lot of draw calls and updates plus for NVIDIA it utilizes an additional eight threads for CPU and GPU multi-threading but these have to go somewhere so without being able to scale down the game gets pretty CPU bound at times. :)

AMD's CPU usage varies but this also results in more uneven framerate and Odyssey in particular was almost broken on launch dropping into the teens for FPS during busier parts of the game world which for how much that game is pushing draws and all is pretty frequent.


There was also a issue with Zen and CPU scheduling but Microsoft and the newer Windows 10 updates should have improved how this is handled as should improvements to AMD's power schedule they use for Zen2 processors.

Beyond that the game itself creates a lot of worker threads upwards of I think 16 or so for what available CPU cores are available (Logical and physical with hyper threading on.) it usually isn't too terrible but it is one of the rare more recent games where a quad core can be a bit of a limit for once and it's not just about efficiency or clock speed for the primary core even if that has plenty of things going on too.


Kaldaien probably had more to say and that could have helped if Ubisoft hadn't acted on that whole malware report and just thrown a community ban without verifying those claims though at least this wrapper manages to resolve some issues which seem to work just as well on NVIDIA GPU's kinda proving there's something limiting the game pretty badly.

AMD's lack of D3D11 driver command lists and poorly multi threaded driver situation overall hinders things which NVIDIA resolved with one of their previous driver updates significantly improving DirectX 11 performance which for how these games are pushing multi-threaded rendering means there's a significant performance penalty for AMD and these games.

(And outside of D3D9 which is single threaded having this work as well as it does for NVIDIA too points at a pretty big bottleneck situation of some sort.)



Don't have a full understanding of what the engine is doing, other than pushing way above specs for D3D11 draw calls it seemed like a pretty impressive engine but it has it's issues so hopefully the next game will see these resolved.
(Guess it's incredibly unlikely Ubisoft would patch in Vulkan or D3D12 support much as it could help now that support for these two games is all but over.)



EDIT: Or just using Ghost Recon Breakpoint as a comparison also on a version of the Anvil Next engine and it's Vulkan API update while initially suffering from a memory leak it still gave a hefty 15 - 20% performance uplift plus improvements to CPU and GPU utilization overall.

Lots of text aside yeah Vulkan (Or D3D12) can really help long as the implementation is all good and stable, again it's really impressive (And a bit problematic for what's going on with the game and D3D11 then.) how it even assists on NVIDIA systems too.

There's posts confirming similar results on newer high-end processors as well so it's not just a hardware limit or CPU bottleneck either, Odyssey can be a bit finicky to get stable with DXVK apparently but Origins just seem to work and benefit nicely overall.
Last edited by JBeckman; May 23, 2020 @ 8:19am
< >
Showing 1-15 of 35 comments
Per page: 1530 50

All Discussions > Development > Topic Details