¿La multitextura es realmente "usando más de una textura"?

10

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?

NPS
fuente
En un momento, especialmente en gráficos 3D en tiempo real, era muy común usar una textura (mapa difuso). Por lo tanto, el nombre se usó para sugerir que está utilizando más de una textura. No veo el problema. Muy parecido a los subprocesos múltiples
AturSams
Pero el subprocesamiento múltiple requiere una API especial, un diseño de programa completamente diferente, etc. Difiere en muchos aspectos. Mi pregunta surge del hecho de que la textura múltiple no parece tener nada diferente, excepto el recuento de texturas. Y no es un problema, solo una pregunta.
NPS
No tiene que requerir una API especial. Eso dependería de la implementación. Utilizo algunas herramientas que tratan la multitextura de la misma manera que "unitexture";)
AturSams
@concept ¿Qué parte? ¿El título?
Anko

Respuestas:

16

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.

concepto3d
fuente
5

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.

Damon
fuente
2

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:

  • Dibuje todo una vez para establecer las texturas base.
  • Establecer un modo de mezcla modular.
  • Dibuja todo por segunda vez para aplicar las texturas de iluminación.

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 :

GL_SGIS_multitexture La
compatibilidad con múltiples texturas permite que cierto hardware represente el mundo de una sola vez en lugar de dos. GLQuake usa dos pases, uno para las texturas del mundo y el segundo para los mapas de luz que se mezclan en las texturas. En algunos equipos, con una implementación de OpenGL compatible con GL_SIGS_multitexture, esto se puede hacer de una sola vez. En el hardware que admite esto, obtendrá un aumento del 60% al 100% en la velocidad de fotogramas. Actualmente, solo las tarjetas 3DFX duales TMU (como la Obsidian 2220) son compatibles con esta extensión, pero pronto seguirá otro hardware.

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.

Maximus Minimus
fuente