Guild Wars 2

On the DirectX 11 announcement

So after seeing a lot of talk about the DX11 announcement, I noticed a lot of misinformation and misconceptions — as is usually the case when it comes to GW2's performance, the engine, versions of DirectX, and related topics. Let me try to clear up some things.

First, some general facts unrelated to the DX11 announcement specifically but relevant to the topic:

  1. Guild Wars 2, like most games, and certainly online games, has a heavy main thread. This means that single-threaded performance is very important. Even more so because DirectX 9 can only utilise one thread for sending draw calls to the GPU, but more on that later.
  2. Guild Wars 2 is also multi-threaded. It can make good use of at least 6–8 threads. Utilisation of multiple threads has increased significantly over the years, as ANet has continuously off-loaded work from the (heavy) main thread to separate threads. You can easily verify this yourself by going into the task manager (Ctrl+Shift+Esc), going to the 'Details' tab, enabling the 'Threads' column if it isn't already, and inspecting Gw2.exe or Gw2-64.exe. For me, it will show between ~55 and ~95, depending on location and crowdedness (and perhaps settings). This value used to be 10–20 in 2012! (Note that these are OS threads, which the OS thread scheduler will then distribute over available CPU threads.
  3. Because of the previous point, the idea that "GW2 is very poorly optimised", still an oft-heard sentiment, is mostly bogus today. The game engine itself has been optimised quite a bit and while I'm sure there are still plenty of smaller things that could be improved, the main bottleneck today is certainly DirectX 9.

I touched on this with point 1 above, but let's look at what the issue with DirectX 9 really is.

Simply put, graphics APIs like DirectX, OpenGL and Vulkan provide a set of commands that developers can use to control the GPU in a standardized, structured way, with built-in abstractions for common use-cases. Before a frame is rendered, a game engine will do a lot of processing to set up the data that needs to be rendered. This part is multi-threaded even in DX9, no worries there. However, sending the actual rendering commands from the CPU to the GPU, knows as draw calls, is notoriously a single-threaded endeavour in DX9 and all older graphics APIs.

Now, for most games this was historically not an issue. But MMOs and some other genres like RTS universally suffer from this limitation due to the relatively high amount of things to draw. Each model on your screen adds a whole bunch of draw calls, depending on the complexity and detail of the model, and any special effects. In other words, the number of draw calls scales roughly linearly with the number of characters in view in an MMO. This is why the 'Character Model Limit' affects performance so heavily (and 'Character Model Quality' too, but a little less).

Touching on point 3 above: other MMOs suffer from this all the same, but GW2 has a relatively high baseline for settings that impact this. BDO, for example, has a notoriously low draw distance — effectively locking you into a lower value of GW2's 'Character Model Limit' setting. At least in GW2 you have the choice to take the performance hit for seeing people around you at greater distances.

DirectX 11

Many people allude to DX11's 'multi-threaded' nature. Even the official announcement does:

(…) upgrading to DX11 opens a lot of doors for improving performance—CPU multithreading for instance

This is very misleading. As I mentioned before, DirectX 9 already supports multi-threading for most of the work that is done before sending the draw calls — but more importantly, DX11 does not address the draw calls issue properly! It adds support for multi-threaded command lists (batched draw calls), but does so poorly. We can see this is the many MMOs that have added support for DX11 in addition to 9 and/or 10: the performance improvements in crowds were minimal at best — and sometimes it got worse due to the utilisation of other new effects that DX11 introduced that have a cost. But a picture is worth a thousand words, so look at these draw calls benchmarks and shudder. ("DX11ST is DX11's single-threaded command list mode, "MT" is the multi-threaded variant.)

Those benchmarks also shows why we need to move to DX12 or Vulkan if we really want to do something about the poor performance in crowds.

And make no mistake: DirectX 12 is a completely different beast from all previous versions. DX12 and Vulkan are low-level APIs, requiring an entirely different approach to building the engine. There is no upgrade path from DX9, via DX11, to DX12. If the goal is to go to DX12, for actual performance improvements down the line, spending any amount of time on a DX11 implementation is a complete waste of time. Also note how much effort it took Blizzard — with their infinite funds — to get a decent DX12 implementation.

In other words: realise that the goal of ANet is not DX12, that DX11 will not bring the improvements we need or want, and that this whole announcement is a carrot for the uninformed. Bread and circuses — Enjoy 🙂


Similar Guides

    None Found

More about Guild Wars 2

Post: "On the DirectX 11 announcement" specifically for the game Guild Wars 2. Other useful information about this game:

Top 20 NEW Medieval Games of 2021

Swords, dragons, knights, castles - if you love any of this stuff, you might like these games throughout 2021.

10 NEW Shooter Games of 2021 With Over The Top Action

We've been keeping our eye on these crazy action oriented first and third person shooter games releasing this year. What's on your personal list? Let us know!

Top 10 NEW Survival Games of 2021

Survival video games are still going strong in 2021. Here's everything to look forward to on PC, PS5, Xbox Series X, Nintendo Switch, and beyond.

You Might Also Like

Leave a Reply

Your email address will not be published. Required fields are marked *