Recientemente agregué un empaquetador de texturas a mi proyecto que empaquetará una cierta cantidad de texturas en una sola, como esta:
Entonces, por ejemplo, este tiene un tamaño de 582x1023 píxeles. El objetivo de agregar estas texturas empaquetadas obviamente era mejorar el rendimiento, por lo que quería buscar el tamaño de textura óptimo para las texturas OpenGL (usando LWJGL). Lo que encontré fue que un tamaño de textura máximo ampliamente admitido parece ser 1024x1024, de acuerdo con esto, por ejemplo. Esto me parece extraño porque obviamente muchas texturas por sí solas serían más grandes que eso, entonces, ¿qué pasa con esas? Estoy bastante seguro de que la mayoría de las tarjetas gráficas admiten texturas más grandes que eso. ¿Puedo esperar razonablemente que la mayoría de las tarjetas gráficas manejen, por ejemplo, texturas 4096x4096 (o tal vez incluso más grandes que eso)?
Para llegar a mi segundo punto (espero que esto cuente como una pregunta, pero esencialmente se reduce al mismo problema): ¿Deberían las texturas dimensionarse a una potencia de 2 (256x256, 512x512, 1024x1024, 2048x2048, ..) y deberían ¿Rellené texturas más pequeñas que esa a la siguiente potencia de 2? De acuerdo con esta pregunta de 2011, no es un requisito, pero puede mejorar el rendimiento y evitar errores menores, y este de 2012 dice que definitivamente debe rellenar las texturas. Así que me doy cuenta de que estas preguntas se han hecho antes, pero están razonablemente fechadas para que las respuestas hayan cambiado y, además, cada una de ellas solo responde parcialmente a mi pregunta. ¿Cómo otros proyectos / manejan esto?
TL; DR: ¿Qué tamaños de texturas puedo esperar que manejen la mayoría de las tarjetas gráficas? ¿Cuáles son los tamaños óptimos de textura (o hay)? ¿Debo rellenar el ancho de las texturas a la siguiente potencia de 2?
fuente
Respuestas:
Voy a tratar de responder esto, aunque YMMV. Utilizo el Steam Hardware Survey ( http://store.steampowered.com/hwsurvey?platform=pc ) para determinar cuál es la RAM de video (VRAM) disponible en la mayoría de las computadoras. Mirando los resultados a partir del 2015-10-13 (hoy), casi el 85% de las personas tienen 1024 MB de VRAM.
Su pregunta es muy amplia, ya que no indica el hardware de destino (consola, PC, computadora de mano, dispositivos móviles?) Voy a hablar sobre las PC y puede extrapolar para otras plataformas en función de las especificaciones de hardware.
Suponiendo 32 bits de color + alfa por píxel, es decir, 4 bytes por píxel, 1 GB de VRAM puede contener un máximo de ~ 256 millones de píxeles. Esto equivale a 256 texturas de 1K por 1K. Esto supone (incorrectamente) que solo desea mantener texturas en su VRAM, mientras que habrá una gran cantidad de otras cosas (por ejemplo, datos de malla, si está trabajando en 3D) para las que necesita dejar espacio. Probablemente también desee permitir más espacio para el mapeo MIP de texturas, que generalmente funciona mejor si sus texturas son potencias de dos.
Las consolas modernas (XBOX One y PS4) tienen 4-8 GB de RAM unificada, la mayoría de las computadoras de mano y dispositivos móviles tienen 1 - 2 GB de RAM unificada, con restricciones sobre cuánto puede asignar como VRAM.
Por lo general, crearía texturas 2K para que funcionara en la mayoría de las PC, permitiendo la opción de reducir la escala para dispositivos de gama baja. Si está escribiendo un juego 2D y desea apuntar a pantallas de mayor resolución (4K, iPad retina, etc.), puede usar texturas 4K para el fondo, pero para la mayoría de las otras partes, puede ser excesivo.
Espero que esto haya ayudado y no haya enturbiado las aguas.
fuente