En los primeros días de OpenGL y DirectX, se requería que los tamaños de textura fueran potencias de dos. Esto significaba que la interpolación de los valores flotantes se podía hacer muy rápidamente, utilizando desplazamiento y tal.
Desde OpenGL 2.0 (y anterior, a través de una extensión) se han admitido dimensiones de textura sin potencia de dos.
¿Las texturas de potencia de dos tienen ventajas de rendimiento en las GPU modernas integradas y discretas? ¿Qué ventajas tienen las texturas sin potencia de dos?
¿Tiene una población importante de computadoras de escritorio tarjetas que admitan texturas sin potencia de dos?
opengl
textures
performance
Será
fuente
fuente
Respuestas:
¿Existen ventajas de rendimiento al apegarse a las texturas de potencia de dos en las GPU modernas integradas y discretas?
La mayoría de las GPU modernas admiten texturas sin potencia de dos (NPOT) y las manejan bien. La caída del rendimiento es bastante pequeña. Pero hay pocos problemas a considerar:
Cuando se usa la textura NPOT, se necesita más espacio en la RAM, al igual que la textura POT del siguiente tamaño. Técnicamente solo desperdicias el espacio que podría usarse para poner algo allí;
Las texturas NPOT pueden manejarse notablemente más lentamente (en OpenGL 2.1 tuve una caída de rendimiento de hasta el 30%) en comparación con POT del siguiente tamaño;
Las GPU más antiguas y las GPU integradas / en chip no son tan avanzadas, a menudo admiten texturas NPOT, pero el soporte es bastante lento y torpe;
Incluso las GPU más antiguas pueden negarse a aceptar / mostrar texturas NPOT;
Podría haber artefactos de bordes causados por la interpolación de mip-map, su textura de 25x25 podría tener una franja negra donde se agregaron píxeles para rellenarla en un tamaño de 32x32.
PD: No estoy seguro acerca de los dispositivos móviles, podría haber aún más restricciones con respecto a las texturas POT.
¿Qué ventajas tienen las texturas sin potencia de dos, si las hay?
Hasta donde sé, solo hay 2 ventajas:
¿Hay grandes poblaciones de usuarios de escritorio que no tienen tarjetas que admitan texturas sin potencia de dos?
Hasta donde yo sé y probado en PC - Sí. Eso incluye un porcentaje mayor de GPU de errores de caída de velocidad / menor y un porcentaje menor de tarjetas que no manejarán NPOT en absoluto.
fuente
Un uso común de las texturas sin potencia de dos es para 'tamaño de pantalla' o 'tamaño de media pantalla' (y así sucesivamente) para representar texturas de destino utilizadas para efectos de postprocesamiento.
En estos casos, no se necesitan mapas MIP, el búfer siempre está descomprimido, por lo que los tamaños de textura extraños causan menos problemas aquí
fuente
Hubo limitaciones para las texturas NPOT en hardware antiguo. Como se mencionó en este wiki de OpenGL , algunos equipos antiguos requieren que las NPOT no tengan mapas MIP, las texturas comprimidas requieren una alineación de píxeles 4x4, pero el hardware nuevo debe manejarlo perfectamente.
En mi experiencia, incluso algunos equipos relativamente nuevos experimentan un gran rendimiento si usa texturas NPOT en lugar de POT. No sé cuál es el problema; Es posible que en alguna combinación de estados de renderizado, el renderizado se realice realmente en software. Por lo tanto, a menos que tenga buenas razones, le recomiendo que intente utilizar los POT tanto como sea posible.
En cuanto a por qué usar NPOT en lugar de POT: si tiene imágenes que son de dimensiones NPOT, digamos, por ejemplo, 1600x1200, usar 2048x2048 píxeles de superficie desperdiciará mucha memoria de video.
fuente
la potencia de 2 texturas aumenta el rendimiento en aproximadamente un 30% para cualquier tipo de GPU, no solo las GPU antiguas (un 30% más rápido es la diferencia entre una GPU de gama alta y una promedio), toman un 30% más de memoria ram pero se necesita menos vram, aumentan la calidad en proporcionando un tamaño de textura adecuado para una distancia específica, funciona como suavizado para texturas. Los artefactos de línea oscura deben ser manejados por motores de juegos y los motores aaa los manejan bien
fuente
Mi programador de arte es solo del tamaño correcto.
Sin duda, simplifica mi lógica de visualización saber que si quiero establecer una textura en la parte superior izquierda de la pantalla, puedo configurar 0,0 como la parte superior izquierda de la textura y ver toda la textura allí en la ubicación correcta, mientras que si tuviera que agregar 0alpha padding, posicionar la textura contra el borde de la pantalla sería más complejo. Además, por supuesto, que 0alpha todavía tiene que ser alfa mezclado, y si estoy mirando texturas opacas, prefiero no tener un canal alfa.
fuente