Esto puede parecer estúpido, pero me molesta. Por lo que entiendo, la multitextura solo usa más de 1 textura por sombreador (generalmente para mezclarlos de alguna manera). Entonces, en lugar de crear 1 textura, creo 2 o más, lo cual es ... ¡bastante obvio!
¿Por qué hay un término especial para eso? ¿Hay algo más que simplemente "usar más de 1 textura"? ¿Me estoy perdiendo de algo?
Respuestas:
El término especial tiene que ver con la evolución de las tarjetas gráficas y las API de gráficos en tiempo real en lugar de ser tan especial. Por ejemplo, el procesamiento de imágenes y la representación de gráficos sin conexión tenían esta característica mucho antes de que estuviera disponible en API de gráficos en tiempo real y hardware de nivel de consumidor.
Desde OpenGL 1.1 (funcionalidad fija), la multitextura se introdujo como un nuevo estado en la API. En lugar de solo unir una textura, le dio la capacidad de unir varias texturas; uno para cada unidad de textura y luego mezclar entre ellos usando uno de los parámetros del entorno de textura, mezclar, modular ... etc. 1
Luego se introdujeron los combinadores de texturas , que le dieron la capacidad de combinar un conjunto de texturas utilizando operaciones más flexibles, al darle una forma de pasar parámetros a un conjunto fijo de operaciones (piense en ello como sombreadores pero con un conjunto fijo de parámetros), esto fue más flexible que los "combinadores" originales.
Con la introducción de sombreadores, los combinadores anteriores se volvieron redundantes hasta que quedaron oficialmente en desuso. Finalmente, se volvió trivial (a medida que el hardware y, en consecuencia, las API evolucionaron) pasar una muestra de textura al sombreador y dejar que la GPU ejecute operaciones arbitrarias (su sombreador) en sus texturas, mucho más flexible que antes.
El punto aquí; incluso si se volvió trivial, el término sobrevivió como un término genérico para cualquier operación que describe el muestreo y la convolución de múltiples texturas.
1 Estoy usando mi memoria para recuperar la funcionalidad fija de OpenGL, corrígeme si me perdí algo.
fuente
La razón histórica es que "multitexturing" fue una palabra de moda de marketing como "hardware TnL" alguna vez. Como era una característica distintiva de las nuevas tarjetas, tenía que haber una palabra para venderlas.
La razón técnica es que la multitextura no es solo crear y usar dos texturas en lugar de una. Si simplemente usó dos texturas (o tres, o cualquier número), podría usar solo una textura, ya que solo hay un fragmento de salida. Eso no haría ninguna diferencia (cualquiera que sea la entrada, la salida solo puede ser una u otra), por lo que no sería nada especial.
La diferencia no es que puede crear varias texturas, sino que combina dos o más texturas. Por ejemplo, puede combinarlos en función de alfa o en algunos factores de mezcla interpolados por vértice, o puede agregarlos o algo diferente.
La cantidad de configurabilidad / programabilidad ha evolucionado mucho en la última década, pero la gran diferencia sigue siendo que de alguna manera puede combinar dos o más entradas en una salida.
fuente
Al principio había luz
La iluminación de OpenGL, para ser específicos, especificaba ciertas operaciones matemáticas para aplicar a un fragmento, que luego se combinaban con texturas para obtener un color final.
Y luego estaba Quake
Quake no usó este tipo de iluminación para muchos de sus objetos. En su lugar, utilizó una segunda textura para representar la iluminación, que se multiplicó por (o "moduló con) la textura del objeto para obtener un color final.
Sin embargo, el hardware de la época no admitía esto en una sola operación. Entonces Quake necesitaba dibujar sus objetos de escena dos veces:
Esto, por supuesto, fue lento; no solo era necesario transformar y recortar toda la geometría dos veces (lo que en aquellos días era una operación de CPU), sino que cada píxel en pantalla terminaba siendo tocado dos veces durante el renderizado.
Introduzca multitextura
Multitexture fue la solución a esto, y originalmente fue expuesto a través de la extensión GL_SGIS_multitexture, que solo existía en ciertas tarjetas 3DFX de consumo. Originalmente solo permitía mezclar dos texturas (y con un conjunto limitado de modos de fusión).
Para citar el archivo léame original de GLQuake :
Es importante recordar que en este momento los efectos como el mapeo normal, cualquier otro tipo de iluminación por píxel, incluso sombreadores, etc., simplemente no existían (bueno, sí, pero principalmente solo en trabajos académicos y proyectos de investigación, y no se consideraron viables para su uso en renderizado en tiempo real).
Y así hasta el presente
A partir de aquí es más o menos como se describe en las otras respuestas. La multitextura se convirtió en una característica estándar con el tiempo, con más modos de mezcla disponibles, que finalmente dieron paso a un código de sombreador arbitrario.
Pero lo que es importante para los fines de su pregunta es esto: al principio, la funcionalidad estándar era solo poder usar una textura a la vez al renderizar. Poder usar más de uno era una funcionalidad adicional que solo soportaba hardware de alta gama, por lo que necesitaba un nombre. Ese nombre podría haber sido "texturizado dual" (ya que las primeras implementaciones solo admitían dos texturas) pero con un ojo puesto en el futuro se eligió el nombre "multitexture".
Más información sobre la historia de todo esto está disponible aquí , y una buena reseña histórica (del contexto más amplio, y la parte que desempeñó la multitextura en él) en esta respuesta de Programadores . SE.
fuente