We’re back with another installment of the Console Dev Report! This week, we’ll be diving into an explanation of multiple LOD types, what LOD means and why it’s important for performance.
LOD stands for Level of Detail and there are different LODs for many objects in PUBG. Depending on the circumstance, a more or less detailed LOD is used to strike the optimal balance between performance and quality visuals for the best gameplay experience possible. PUBG generally uses 3 different LOD levels depending on the situation – LOD 2, LOD 1, or LOD 0 which is the most detailed of the 3. The higher detailed LOD used, the higher the performance cost. While performance is important, it’s also very important we work hard to not negatively impact gameplay wherever possible by using a less detailed LOD.
One instance you’ve likely seen LODs in action is the “playdough” look of some buildings when viewing them in the distance while parachuting. This is the first and least detailed LOD displayed. At the beginning of a match, buildings closeby can look like this too, as there are so many different objects to process all at once. These will increase to LOD 0 (highest detail) as soon as possible, but the speed of this process is heavily dependant on the hardware you’re using.
Three different LOD types are also applied to characters: Mesh LOD, Bone LOD and AnimNode LOD. First, we’ll explain some details about both Mesh LOD and Bone LOD briefly, before diving into the focus of this Console Dev Report, AnimNode LOD.
Mesh LOD and Bone LOD
Mesh LOD determines the character model LOD. When a character is close to you, it is rendered as LOD 0 (highest detail) and the further you move away from a character, the lower detail LOD that character model will rendered as. This happens in stages, with LOD 2, LOD 1 and LOD 0. You generally won’t notice the transitions that occur, because they happen at a distance where the characters are very small on screen.
Bone LOD works in the same way, but determine the number of bones activated during character animations. This means that at great distances, your game doesn’t need to process detailed animations which would decrease performance. A lesser LOD means there are fewer vertex and less bone data to be processed. This leads to big performance improvements compared to not having optimized LODs.
Having additional LOD levels (3, 4 etc.) would definitely increase performance, by reducing the performance cost on the CPU, but unfortunately the extra strain caused to memory, IO, etc. is very high for console hardware and not something that can be implemented effectively at this stage.
Animations also have LODs called AnimNode LODs, but we can’t apply them to such a wide degree as we can for Mesh LOD or Bone LOD, as the visual changes are very noticeable.
Animations such as running, looking to the side, or the animation of aiming down your weapon sights are all skeletal control of your character. The animations related to the character skeleton are all calculated on a per limb basis, requiring independent calculations and animations to be performed for the arms, legs, neck, etc.
We developed an additional LOD method based on the character model size proportionate to the whole screen. Then, we set parameters to automatically and dynamically select a less detailed AnimNode LOD for character models only when they’re at a distance where you wouldn’t notice the visual change. This means increased performance without negatively impacting gameplay or visual experience to any noticeable degree.
Please bear in mind that for the visual examples shown further down in this Dev Report, AnimNode LOD changes take effect at very close distances to give you a better understanding of how it works. When playing PUBG, AnimNode LOD only takes effect at great distances.
Here is the first example of how AnimNode LOD works in-game:(The image used above is from a development environment and for illustrative purposes, AnimNode LOD is only disabled at great distances while playing PUBG)
In the image above, you can see the differences between having AnimNode LOD enabled and disabled.
When AnimNode LOD is completely disabled, animations performed by the character are disabled and not reflected by the model, which results in better performance. However, when a player is crouched, the lower body must have AnimNode LOD enabled, otherwise the player would appear to be standing.
For the next example, in our development environment we’ve set AnimNode LOD to be disabled when the character model fills 10% of the whole screen to further help you understand what’s happening when AnimNode LOD is disabled.
When in-game, AnimNode LOD would only be disabled when the character model would look too small for you to see these changes.
(Images used above are from a development environment and for illustrative purposes, AnimNode LOD is only disabled at great distances while playing PUBG)
You may also be wondering “What happens when I scope in on an enemy far away?”
When you scope in on a player far away, the character model you’re looking at will fill more of the screen and AnimNode LOD will be turned on dynamically based on the character model size proportionate to your whole screen, ensuring there is no negative impact to gameplay.
Below is a visual example of AnimNode LOD being used in our development environment coded to disable when the character model takes up 10% of the whole screen, to give you a clearer example of what’s happening.
(Image used above are from a development environment and for illustrative purposes, AnimNode LOD is only disabled at great distances while playing PUBG)
Again, while actually playing PUBG, these changes only take effect when the character model is very far away and taking up a small portion of the whole screen, where you won’t be able to notice the changes.
AnimNode LOD Performance
The graph below measures AnimNode LOD enabled (blue) vs. AnimNode LOD disabled (red) when there are 10 characters around. Around a 10% performance improvement is achieved with AnimNode LOD disabled.
* Graph results measured using an Xbox One X.
The more character models in the area which can have AnimNode LOD disabled, the higher performance gain compared to having AnimNode LOD enabled.
To summarize this section, some animation effects of character models are disabled or dialed back when they’re at such a distance that you wouldn’t notice the change take effect. This results in less resources being used and an increase in performance.
Thanks for reading! See you all in the next addition of the Console Dev Report.
The PUBG Console Team