Chapter X: going further
Warning
This chapter is future work (ETA October 2025)
This is a lazy chapter whose only aim is to provide some pointers.
A. Raytracing
B. Tesselation
C. Geometry shaders
D. Indirect rendering and GPU-side culling
E. Voxel engines
F. Device groups
Move to appropriate section
- Virtual textures: Not all textures are actually backed by physical memory. Only loaded when actually required. Indirection required for mapping virtual resources to their location in physical memory.
- Sparse textures: Textures can be bound non-contiguously to memory. For instance, we could divide textures (including mipmaps) into tiles and update a single tile at a time. Indirection required for (handled in hardware)
- Sparse virtual textures (aka megatextures) mixes the two above ideas. We split our textures (including mipmaps) into tiles (whose size match that of a page of physical memory; this is the sparse part), and we load such tiles in physical memory only when they are actually required (this is the virtual part). János Turánszki has a cool video showcasing what the result looks like in practice.
Texture arrays instead of textures: (see this stackoverflow answer)
When not to use virtual texturing? Actual performance? discussion
Vertex pulling (push vertex, generate data around it)
GPU-driven rendering, device generated commands