Improving shadow memory with Vulkan’s sparse resources
As we mentioned at the end of the last section, we currently allocate the full memory for each cubemap for all the lights. Depending on the screen size of the light, we might be wasting memory as distant and small lights won’t be able to take advantage of the high resolution of the shadow map.
For this reason, we have implemented a technique that allows us to dynamically determine the resolution of each cubemap based on the camera position. With this information, we can then manage a sparse texture and re-assign its memory at runtime depending on the requirements for a given frame.
Sparse textures (sometimes also referred to as virtual textures) can be implemented manually, but luckily, they are supported natively in Vulkan. We are now going to describe how to use the Vulkan API to implement them.
Creating and allocating sparse textures
Regular resources in Vulkan must be bound to a single memory allocation...