🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

World of Tanks Multi-core Sees 41% FPS Increase

Started by
0 comments, last by khawk 5 years, 2 months ago

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.

FB-1.jpg

FB-2.jpg

FB-3.jpg

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:

Quote

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:

webops11623-fig11-initial-render-pipeline-2010-750.jpg
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):

webops11623-fig12-render-pipeline-2016-750.jpg
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

Admin for GameDev.net.

This topic is closed to new replies.

Advertisement