Path of Exile - Upcoming Video Memory Utilisation Improvements

Grinding Gear Games is currently working on a new patch for Path of Exile that should improve the game's video memory utilization and as a result, alleviate at least some of the issues stemming from the oft-maligned texture streaming feature. Here's more on that, along with a tentative time frame for this upcoming update:

In the near future, we'll be making some improvements to how Path of Exile utilises your video memory. This post explains what impact that will have on your gameplay and when to expect the patch.

Graphics cards have a certain amount of Video RAM (VRAM), which is used to hold the various assets that we are rendering for the current game scene. If you run out of VRAM while playing under DirectX 11, our default renderer, the game will still work but your frame rate will drop as it has to render assets that reside in system memory. The graphics driver would also move assets back and forth between main memory and VRAM, further slowing things down. For users without enough VRAM, performance under DirectX11 is pretty terrible.

While the Vulkan rendering API has all sorts of performance benefits, it doesn't have the default-to-system-memory fallback that was present under DirectX 11, and its default behaviour is to just crash when out of memory. When we initially released the Beta version of our Vulkan renderer, some users would experience crashes during memory-intensive gameplay.

As either crashes or significantly degraded performance are both bad for game experience, it's important that a game engine manages what assets are in memory by unloading ones that haven't been used recently and aren't expected to be used again soon. Over the past year, we have added a system that unloads assets that the game expects to not need in the near future, and keeps VRAM usage at a conservative level. This has eliminated crashes and slowdown due to excessive VRAM usage but has unfortunately introduced other issues related to the lifecycle of assets in memory.

With assets now being loaded and unloaded dynamically during gameplay, we retooled the engine so that the assets could be loaded asynchronously without stalling rendering. Previously it would have been a stuttery mess, as the engine used to completely freeze until a new asset was entirely loaded.

However, what do you display when a texture is not yet loaded? In order to not display an entirely black texture, we added a technique called texture streaming where we have the lowest mip levels (i.e. low-detail versions) of each texture always in memory so that we can display something approximately correct more quickly. This is more desirable than the alternatives of having significant frame rate drops or nothing drawn at all. While texture streaming is a harmless visual optimisation, it is often incorrectly attributed to problems that are actually to do with the fact that the game unloaded an asset that it really shouldn't have.

A few paragraphs ago, we described our VRAM usage under this system as conservative. That means that our current implementation doesn't aggressively use all of your VRAM, and this causes players to get frustrated by assets being unnecessarily unloaded too early (for example, when you notice some items looking blurry for a short time).

Our engine team has been working on a better implementation that aggressively uses as much VRAM as it can to store as many assets as will fit. This is a good thing because users with mid-range or better graphics cards will experience assets being unloaded far less often than they currently do. It depends on how much VRAM you have, of course, but the issues that are currently attributed to resource unloading/texture streaming will be largely eliminated for many users. And of course, all of the above changes mean that users with low-end graphics cards don't experience crashes or frame rate drops when they run out of VRAM.

Our initial plan was to deploy this update in the next engine patch, which was previously scheduled for a week or two before 3.15's deployment in July. However we're very unhappy with the current situation so we are working towards pulling out this feature for deployment in the near future (ideally in the coming week, but we'll update this estimate as testing continues).

This change isn't a panacea for every single graphical/performance issue in the game, but is certainly going to have a large impact on making things feel a lot better for most users. Our engine team will continue to hunt down further problems and solve them. As always, thanks for your ongoing feedback and reports.