Comentario Original:

Me preguntaba si una cosa es el atlas y otra la cache para la página cargada del atlas, de tal modo que en un sandbox el atlas cubriria el mundo y cada pixel indicaria la página que se usa para texturizar la zona, dando la baja densidad de texels del rage.
en pc se puede configurar para usar atlas y paginas de 8096 y no se si 16k, me suena que recientemente sí. el problema es que las texturas del juego vienen demasiado comprimidas mientras que la megatextura original de epic (todas las paginas juntas) pesaba un terabyte.
las gpus de ps3 y 360 de fábrica estaban limitadas a texturas de 4096 como maximo capando esto.
veo que granite usa 32 mb para una megatextura de 32 gb (todas sus paginas juntas)
me pregunto si se usa un atlas de 16 mb y una página de 16 mb:
“One major benefit from the use of virtual texturing is that you can use much larger textures, even up to 256Kx256K. A texture of that size compressed with DXT1 would occupy 32GB of memory, and loading that texture would take minutes. With Granite, you need only 32MB of VRAM for that texture, and the loading time is unnoticeable.
One thing to take into consideration is that Virtual Texture sampling adds a small performance cost compared to regular texture sampling. We therefore limit the amount of VT textures to 16 per material and a maximum of 4 different UV coordinates to sample those textures. This way, we can make sure that the performance impact of the VT samples is almost unmeasurable in most practical scenarios (e.g., games or VR experiences).”
hablan de “thousand gigapixels” por lo que es multi megatextura, supongo que en un sandbox pasa a usar el atlas y sus páginas de la zona en la que te encuentres, ya que todo esto no deja de ser streaming.

Pues es una buena pregunta, el atlas no es más que una textura lo más grande posible que almacena todas las posibles texturas de la escena y sis mip maps (diferentes tamaños). Dado que en la generación de PS3 y Xbox 360 el tamaño de las texturas era como mucho de 4096×4096 pixeles esto significa que sin compresión de texturas este ocupaba unos 64MB con ellas unos 16MB. En las consolas actuales el tamaño máximo de las texturas es de 16384×16384 por lo que el tamaño que ocupan teniendo en cuenta la compresión de texturas son unos 256MB.

En realidad no necesitas más texturas en cada fotograma que la resolución de renderizado del mismo. En PS2 y Gamecube donde el tamaño del atlas de texturas era como mucho de 512×512 pixeles coincidia casi por completo con la resolución de pantalla pero con la aparición de la cache de texturas en las GPUs de PC por un lado y el aumento del tamaño de las texturas esta práctica desaparecio.

¿Es lo mismo la cache de texturas que el atlas de texturas? Pueden ser lo mismo pero no es lo mismo, el problema es la jerga de «cache de texturas» utilizada para cosas previas a la implementación de una cache propiamente dicha en una GPU, pero en terminos contemporaneos una cache de texturas es:

  1. Una memoria de pocos KB conectada a las unidades de texturas desde donde realizan el filtraje.
  2. Los Fragment/Pixel Shaders operan sobre los datos que se encuentran en la cache L1 manipulandolos. En realidad es necesaria una cache de texturas para que hayan Fragment/Pixel Shaders.
  3. Dicha cache es controlada por hardware y el desarrollador no ha de tocar nada del código para controlar su llenado y vacio de memoria. Es decir, su funcionamiento es transparene al desarrollador.

Tanto en la Sony PlayStation como en la Nintendo 64 se añadió una «cache de texturas» de 2K y 4KB respectivamente con tal de aumentar la tasa de texturizado por un lado y por el otro poder hacer el filtro bilineal sin impacto en la memoria principal y poder utilizar un sistema de memoria de bajo coste. En PC con las Voodoo Graphics primero no se uso cache de texturas sino una memoria muy cara para realizar el filtraje pero el PC ha sido siempre menos sensible al precio. El funcionamiento de las caches contemporaneas es que no almacenan texturas enteras sino quads (2×2 pixeles) porque es con lo que trabajan con los Fragment/Pixel Shaders pero por aquel entonces lo que se hacía era cargar la textura entera, por eso N64 con sus 4KB de texturas tenía problemas graves y en cambio las caches de texturas actuales con 16KB no tienen problemas. La evolucion de N64 fue GameCube que evoluciono la TMEM de N64 de 4KB a 1MB, pero no funciona como una cache contemporanea y sigue cargando las texturas de manera entera, lo mismo ocurre con la evolucion de la primera PlayStation a la segunda, pero en cambio la primera Xbox si que tiene una cache de texturas contemporanea y a partir de esta todas las consolas.

En realidad dichas memorias al estilo de PS2 y GameCube son scratchpads, memorias que deben ser llenadas y vaciadas manualmente desde el código del juego. La idea de tener un scratchpad enorme para almacenar las texturas del fotograma es algo que no es mala idea, simple y llanamente necesitas una memoria capaz de almacenar las texturas utilizadas en el fotograma actual. ¿Se puede hacer? Si, pero no se hace por el hecho que esto sería una cantidad increible de espacio ocupado en los procesadores que se tendría que sacrificar de otros elementos de la GPU, en todo caso la idea de una enorme cache de texturas se ha perdido. ¿Y que ventaja tiene el Atlas entonces estando la cache de texturas enorme entonces? Pues que a la hora de localizar los datos en una cache se perfectamente donde se encuentra la textura no tenemos que hacer que la GPU recorra toda la memoria generando una enorme latencia durante el tiempo de búsqueda y es que aunque las GPUs están pensadas para actuar más por ancho de banda que por latencia llega un punto en que incluso la latencia afecta al rendimiento de la GPU, sobretodo cuando esta ya no puede enmascarar más la latencia con el truco de mantener la GPU ocupada con un flujo continuado de cosas a hacer.

Aunque con la aparición de las memorias HBM, que permiten desglosar los canales de acceso, me pregunto si vamos a ver de nuevo la separación de los buses del ancho de banda, al fin y al cabo con un atlas de texturas sería más que suficiente para la gran mayoría de juegos y se ahorraría mucho en lo que a memoria se refiere, pero mucho.