Unified texture management for arbitrary meshes

From LRDE

Abstract

Video games and simulators commonly use very detailed textures, whose cumulative size is often larger than the GPU memory. Textures may be loaded progressively, but dynamically loading and transferring this large amount of data in GPU memory results in loading delays and poor performance. Therefore, managing texture memory has become an important issue. While this problem has been (partly) addressed early for the specific case of terrain renderingthere is no generic texture management system for arbitrary meshes. We propose such a system, implemented on today's GPUs, which unifies classical solutions aimed at reducing memory transfer: progressive loading, texture compressionand caching strategies. For this, we introduce a new algorithm – running on GPU – to solve the major difficulty of detecting which parts of the texture are required for rendering. Our system is based on three components manipulating a tile pool which stores texture data in GPU memory. First, the Texture Load Map determines at every frame the appropriate list of texture tiles (i.e. location and MIP-map level) to render from the current viewpoint. Second, the Texture Cache manages the tile pool. Finally, the Texture Producer loads and decodes required texture tiles asynchronously in the tile pool. Decoding of compressed texture data is implemented on GPU to minimize texture transfer. The Texture Producer can also generate procedural textures. Our system is transparent to the userand the only parameter that must be supplied at runtime is the current viewpoint. No modifications of the mesh are required. We demonstrate our system on large scenes displayed in real time. We show that it achieves interactive frame rates even in low-memory low-bandwidth situations.


Bibtex (lrde.bib)

@TechReport{	  lefebvre.04.tr,
  author	= {Sylvain Lefebvre and J\'er\^ome Darbon and Fabrice Neyret},
  title		= {Unified texture management for arbitrary meshes},
  institution	= {INRIA-Rhone-Alpes},
  year		= 2004,
  number	= {RR-5210},
  address	= {France},
  month		= may,
  abstract	= {Video games and simulators commonly use very detailed
		  textures, whose cumulative size is often larger than the
		  GPU memory. Textures may be loaded progressively, but
		  dynamically loading and transferring this large amount of
		  data in GPU memory results in loading delays and poor
		  performance. Therefore, managing texture memory has become
		  an important issue. While this problem has been (partly)
		  addressed early for the specific case of terrain rendering,
		  there is no generic texture management system for arbitrary
		  meshes. We propose such a system, implemented on today's
		  GPUs, which unifies classical solutions aimed at reducing
		  memory transfer: progressive loading, texture compression,
		  and caching strategies. For this, we introduce a new
		  algorithm -- running on GPU -- to solve the major
		  difficulty of detecting which parts of the texture are
		  required for rendering. Our system is based on three
		  components manipulating a tile pool which stores texture
		  data in GPU memory. First, the Texture Load Map determines
		  at every frame the appropriate list of texture tiles (i.e.
		  location and MIP-map level) to render from the current
		  viewpoint. Second, the Texture Cache manages the tile pool.
		  Finally, the Texture Producer loads and decodes required
		  texture tiles asynchronously in the tile pool. Decoding of
		  compressed texture data is implemented on GPU to minimize
		  texture transfer. The Texture Producer can also generate
		  procedural textures. Our system is transparent to the user,
		  and the only parameter that must be supplied at runtime is
		  the current viewpoint. No modifications of the mesh are
		  required. We demonstrate our system on large scenes
		  displayed in real time. We show that it achieves
		  interactive frame rates even in low-memory low-bandwidth
		  situations.}
}