Console Dev Report #2

In today's post, we will be going over GPU time and how various factors can play their roles to reduce GPU time.

Hello everyone,

Welcome to the second edition of the Console Dev Report series!

For those who missed out the first post of this series where we touched on the “viewing spectrum and how it affects the game’s performance, feel free to check it out here: [Xbox] [PS4 ]

In today’s post, we will be going over GPU time and how various factors can play their roles to reduce GPU time.

What is GPU Time?

GPU time, simply put, is the time the GPU (Graphics Processing Unit) takes to calculate a single frame. The more GPU calculations required, the longer the GPU time will be. GPU times directly contribute towards the FPS (frames per second) you see while playing and increased GPU times can directly impact performance. There are numerous factors that affect GPU time, including the time it takes to render all the different visual elements of the game you see on-screen.

The GPU is a processor that handles computer graphics. It draws millions of pixels on the screen each frame (multiple times per second). The number of pixels contained on-screen is determined by the resolution used. The higher the resolution, the more pixels and more detail that can be shown on the image each frame, but also the more processing power required.

When comparing 4K resolution to the most commonly used 1080p resolutions, 4K has 4 times as many pixels as 1080p. That means the amount of data a GPU needs to process comparatively increases 4 times, which in turn increases the GPU time.

Dynamic Resolution

Note: The Dynamic Resolution option is currently being optimized and will be available on both PS4 and Xbox One in a future update.

Dynamic resolution is a feature in which the resolution changes dynamically according to the number of GPU calculation required. It changes the resolution from 1440p to 4K in real-time, with a variable refresh rate. In circumstances when you’re in and match and the GPU is under heavy processing load, the resolution will be lowered automatically temporarily in order to ensure stable performance.

We’d like to show you how the dynamic resolution option affects GPU times with the graph below. Please bear in mind that the graph is measuring GPU time in milliseconds, this graph is not showing frames per second. So, in this instance, lower is better.

* GPU Time shown in the graph above calculated using an Xbox One X.

A 20% improvement in processing speed for GPU times is observed with dynamic resolution turned on. A lower GPU time means the GPU can process each frame more quickly, which leads to improved and more stable performance!

GPU Instance Culling

GPU Instance Culling has been enabled since 1.0 for Xbox One X and PS4 Pro and we’ve made many improvements since its initial implementation to increase performance. We’ll be making additional improvements to GPU Instance Culling in the future, including in the next live server update. You can read more about those upcoming changes further down in this section.

Please be aware that the upcoming improvements to GPU Instance Culling are still being optimized for 1st gen PS4 as well as 1st gen Xbox One and S models and will be implemented at a later date.

You can find many dense forests in Erangel, Sanhok, and Vikendi. To achieve the best performance possible, trees with the same model are rendered using “instancing”. This reduces the processing cost of drawing a single tree, so the GPU can draw the forest shown below without waiting for additional draw calls (resource-intensive requests for the GPU to perform tasks) to be issued.

Reducing the number of draw calls by instancing as many trees with the same model within the viewing distance as possible, the overall cost for drawing the trees is reduced, leading to improved performance.

But what would happen if you scope in using a 8x scope?

Level of Detail (LOD) plays a big part in achieving the desired performance, as objects are drawn in different quality levels depending on their distance from the player. In a normal (non-scoping) state, only the closest trees within the first instance are drawn as LOD 0 (the highest object detail), but when scoping in, all instances including the targeted trees seen through the scope are drawn as LOD 0, causing GPU time to increase (lower performance) by significant amounts.

When you scope in, the viewing distance is extended so the distant trees can be viewed in higher detail. In the figure above, you will only see 3 to 7 trees through the scope, but the GPU will try to draw every instance that hits the view spectrum. Using instances in this case is a significant drawback because it will draw unnecessary trees, whereas if you didn’t use instances only 7 trees will be drawn.

The object’s level of detail (LOD) is determined by proportionate size on-screen, and the object’s cull distance decides whether the object will be rendered at all, based on distance from the player.

With some upcoming optimizations to GPU Instance Culling, our goal is to increase performance both through not rendering high level of detail objects which aren’t shown on screen and developing a smarter process to determine which objects are processed when instancing and in which order. Since the GPU is aware of all object LODs, only the low LOD models will then be chosen to be instanced, after examining all instances. Then, the rendering process is performed in front-to-back order. We call this select-and-process GPU Instance Culling.

The graph below compares GPU time when GPU Instance Culling is on and off in 4K resolution.

* GPU Time measured while scoped in using a 8x scope.
* GPU Time shown in the graph above calculated using an Xbox One X.

We see a more stable result and around a 30% improvement in GPU time with GPU Instance Culling On. Without GPU Instance Culling, you can see GPU times are longer and fluctuate considerably.

We hope you enjoyed this week’s post, and hope to see you with another edition in two weeks!

Thanks,
The PUBG Team

Discuss this article
Share this article