He oído que las GPU recientes admiten texturas sin potencia de 2 y todas las funciones simplemente funcionan. Sin embargo, no entiendo cómo funcionaría el mapeo mip en tal escenario. Alguien puede explicar?
La regla es que para calcular el siguiente tamaño de mipmap, se divide por dos y se redondea hacia abajo al entero más cercano (a menos que se redondea a 0, en cuyo caso, es 1 en su lugar). Por ejemplo, una imagen de 57x43 tendría mapas MIP como:
level 0: 57x43
level 1: 28x21
level 2: 14x10
level 3: 7x5
level 4: 3x2
level 5: 1x1
El mapeo UV, la selección de LOD y el filtrado funcionan de la misma manera que para los tamaños de textura de potencia de dos.
Generar mips de buena calidad para una textura sin potencia de dos es un poco más complicado, ya que no puede simplemente promediar una caja de píxeles de 2x2 para reducir la muestra en todos los casos. Sin embargo, un filtro de caja de 2x2 no era tan bueno para empezar, por lo que se recomienda usar un mejor filtro de disminución de resolución como Mitchell-Netravali, independientemente del tamaño de la textura.
Una forma de pensar en esto es que las tarjetas gráficas a menudo implementan texturas sin potencia de 2 simplemente rellenándolas hasta que tengan una potencia de 2 en cada dirección. Esto hace que la mayoría de las cosas "simplemente funcionen": mosaico y filtrado de hardware, por ejemplo. Lo único que necesita cambiar es la conversión de coordenadas de textura a coordenadas de imagen.
Si se implementa así, es obvio cómo hacer mipmapping: nada cambia. Incluso si tiene una GPU que admite texturas sin potencia de 2 sin relleno, los niveles de mipmap terminarían con "relleno". Por ejemplo, una textura 3x3 tendría una textura 2x2 como lod 1.
fuente