Jump to content
  • Advertisement
Sign in to follow this  

World of Tanks Multi-core Sees 41% FPS Increase

Recommended Posts

Wargaming.net collaborated with Intel to develop concurrent rendering support that allows the World of Tanks  engine to render data simultaneously on all available CPU cores, permitting data to be sent to the GPU faster. By doing so, WoT players are experiencing up to a 41% increase in average FPS for a better gameplay experience at a reduced rate of power consumption.




Bronislav Sviglo, World of Tanks rendering team lead has posted a whitepaper discussing the concurrency optimizations they made across their engine.

It includes a hefty section on Concurrent Rendering with DX12 and Vulkan as seen in this excerpt:


One of the most important performance issues on the CPU side is the limitation of engine performance on the main thread (which does main game logic, prepares work for the rendering thread, or issues rendering calls itself). The result is that even when CPU has multiple cores, and the game is able to create multiple threads for various subsystems or jobs, the main bottleneck is the single core frequency where the most work happens.

That’s why modern rendering APIs such as DirectX* 12 and Vulkan* were architected with multi-core nature in mind. That allows 3D applications to prepare and issue rendering calls from multiple threads, effectively distributing the work across available CPU cores, minimizing the bottleneck on the main thread. As World of Tanks currently uses DirectX* 11 API, however, the engineering team came up with a creative approach that allowed them to accomplish this with the existing API.

The initial version of World of Tanks used the BigWorld engine, and it’s rendering pipeline—which was a single-thread DirectX 3D* 9 application:

Figure 11. Initial rendering pipeline, c.2010.

The first step was to de-couple rendering from the rest of the game and introduce threading. The team came up with abstract rendering interface (ARI) methodology, and separated all API-specific rendering code into a separate rendering thread. Patch 0.9.15 and Core Engine 3.0 (August 2016):

Figure 12. Rendering pipeline v0.9.15, August 2016.

Around the time this work was underway, new rendering APIs—such as Mantle, DirectX 12, and Vulkan—started to appear, and the team initially architected ARI with the same metaphor. Basically, ARI gathers the render commands into the software command buffers. Then, those gathered command buffers were submitted to a render thread, which in turn was in charge of processing them and making direct calls to an appropriate graphics API (at that moment it was either DirectX* 9 or DirectX 11).

The important part of ARI is the Wgfx intermediate compiler—a faster, multicore aware alternative to DirectX 3D effect framework, with lots of under-the-hood optimizations, and a customized API. Despite the engine now having a separate render thread for processing software command buffers, ARI render commands were only issuing in the main thread, however. But even that gave up to a 30% boost in performance.


You can also learn more from recent updates at the WoT blog: https://worldoftanks.com/en/news/general-news/update-1-4-concurrency/

View full story

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!