¿Cuál es la diferencia entre un Sprite y una textura?

27

Tengo una tarea pendiente para la universidad, y mi tarea es discutir las texturas utilizadas en los videojuegos y cómo han evolucionado.

Mi pregunta principal es, ¿cuál es la diferencia fundamental entre usar un sprite o usar otros métodos de textura?

Después de haber investigado un poco, me parece inclinado a que Sprites almacene imágenes en un solo archivo, y pueda usarse para animaciones, etc. y se usara comúnmente con videojuegos más antiguos, generalmente usando sprites como todos sus elementos visuales del juego. Ahora, con los juegos modernos, creo que los sprites tienden a usarse menos a medida que avanza la tecnología y otras texturas están disponibles, como el mapeo de relieve. Aunque los sprites todavía se usan hoy para acomodar características como una barra de salud o texturas de larga distancia.

Pero, ¿cuáles son las principales ventajas de usar texturas sobre los sprites?

jlw8
fuente
55
Uno es una bebida y el otro no (me disculpo por esta broma)
CAD97

Respuestas:

37

Al final del día, los sprites y las texturas son solo imágenes, bloques de datos de color de trama (aunque a veces empujamos un poco los límites para ponerles datos que no sean de imagen). La distinción está en gran medida en cómo los usamos.

Por lo general, llamamos a una imagen (o una parte de una imagen que contiene muchas piezas separadas) un "sprite" si su propósito de representación se debe dibujar directamente a la cuadrícula 2D de la pantalla, sin distorsión de perspectiva. Entonces, lo que ves en el juego en ejecución es básicamente lo que ves en el archivo de imagen en sí mismo (aparte del teñido de color / intercambio de paleta / efectos de transparencia). Esto se aplica a los mosaicos de fondo y personajes / objetos interactivos en juegos 2D, tarjetas de "cartelera" como partículas y estilos más antiguos de representación de árboles y arbustos, y también a los elementos e iconos de la interfaz de usuario en juegos 3D.

Por el contrario, si estamos usando una imagen para proporcionar detalles de superficie para los polígonos de un objeto 3D que se pueden dibujar en perspectiva, generalmente llamamos a esa imagen una "textura". Ese nombre se ha transferido a otros usos de los datos de imagen para modular la representación de otra cosa, incluso si ya no se trata de la textura en el sentido que podría sentir con la punta de los dedos: cosas como reflejos, mapas de distorsión, superposiciones, máscaras o cualquier otro. El uso de uso general de imágenes que no sentimos como nombrar más específicamente tiende a agruparse bajo "textura" en nuestra nomenclatura suelta.

Eso hace que los límites entre los dos sean difusos y no particularmente estrictos. Si tengo una imagen que contiene una secuencia de columnas de fuego y humo para usar en el dibujo de partículas con carteles para un efecto de explosión, podría llamarlo indistintamente una "hoja de sprites" o una "textura de flipbook". O si tengo una imagen de conjunto de mosaicos que comprende todos los mosaicos de fondo para un juego en 2D, podría llamarlo hoy un "atlas de texturas", por analogía con las texturas de atlas desarrolladas para juegos en 3D, a pesar de que sus datos y uso en mi juego en 2D son indistinguibles de lo que alguien más llamaría una hoja de sprites. Si tengo un rectángulo de geometría cuyo propósito es presentar una sola imagen en la pantalla, podría llamarlo un "quad texturizado" o un "sprite" dependiendo de lo que quiero enfatizar sobre su uso.

(Tenga en cuenta aquí en este último ejemplo que "sprite" representa tanto el segmento de imagen de origen en nuestros activos de juego como la instancia de una entidad de juego renderizada que usa este segmento de imagen; otra forma en que usamos esta terminología de manera un poco inconsistente)

Encontrarás que algunos motores y bibliotecas codifican esta distinción al representar la intención en su propia nomenclatura. Por ejemplo, en Unity, puede optar por importar un recurso de imagen como un "Sprite"; esto permite un conjunto adicional de opciones que comúnmente se desean para las imágenes de la interfaz de usuario o los activos del juego 2D, como el corte y empaque de hojas de sprites, y la capacidad de referenciar partes de la imagen como entidades discretas en su escena y configuración de objetos. En estos casos, "Sprite" a menudo significa "una imagen (textura) más metadatos ", pero sigue siendo igual que las texturas ordinarias debajo del capó. El empaque adicional es una conveniencia, por lo que no necesitamos microgestión de compensaciones UV y similares en todos los lugares donde queremos usar la imagen;

DMGregory
fuente
¿Las "texturas" generalmente incluyen o permiten píxeles transparentes? Pensaría en un objeto que se comporta como una superficie plana mapeada de píxeles que contiene píxeles transparentes como un "sprite", ya sea que la superficie sea o no perpendicular al eje de la cámara.
supercat
2
Ciertamente pueden, sin renunciar a su título de "textura". Es común ver que las personas se refieren a una imagen para representar, por ejemplo, hojas o una cerca de eslabones de cadena, como una "textura de follaje" o "textura de cerca", incluso si se procesan con transparencia alfa-test / dithered o alpha-blended . También podríamos llamar a la caja de la hoja un "sprite de follaje" si se representa como una valla publicitaria orientada a la cámara, pero sería inusual aplicar el nombre del sprite si se usa en geometría de perspectiva como una valla 3D.
DMGregory
Al renderizar objetos mapeados con textura opaca, un motor de renderizado no necesita preocuparse por cómo aparecerá su interior ya que la superficie opaca ocultará el interior. Pensaría que algo como un árbol o una valla de alambre se representaría mejor haciendo las partes opacas y luego renderizando las partes parcialmente transparentes como superficies discretas parcialmente transparentes. Si bien podrían no coincidir con lo que algunas personas llamarían "sprites" si no miran a la cámara, tampoco serían lo mismo que los objetos "normales".
supercat
De hecho, así es como se hace. La geometría de los postes y troncos de la cerca se representa en el paso opaco, y luego la geometría de los tramos de la cerca y el follaje / ramitas se representa en un paso de prueba alfa o mezclado alfa después.
DMGregory
1
Por lo general, escucho "textura transparente" o "textura alfa" / "textura con alfa", tal vez a veces "textura recortada" / "textura recortada" si se trata de una transparencia de bordes duros / prueba alfa.
DMGregory
7

Un sprite es un relicto de la historia de los juegos de computadora. Piensa en Ataris de 8 bits alrededor de ca. 1980. Una pequeña imagen, generalmente con una máscara de bits de cobertura (o un color "transparente" especial) que tiene una posición en la pantalla y se combina en la pantalla de alguna manera particular. Con agujeros donde haya "agujeros" en el sprite, según el mapa de cobertura. Por lo general, de una manera "simplemente funciona", y de una manera que permite fácilmente la ilusión de cosas que se mueven, generalmente al guardar y restaurar los píxeles sobrescritos de la pantalla original.

Solía ​​ser que los sprites eran una característica de hardware en las computadoras, solía ser que podías dibujarlos / dibujarlos con el contenido de la pantalla guardado automáticamente, solía ser que solo podías tener un número muy limitado de ellos (y no se superponían, ¡sí!) , y solía ser que son bastante pequeños (como 16x16) y limitados.

El cursor del mouse es lo que más se acerca a un sprite hoy en día (y solía ser que era un sprite real en algunos sistemas hasta hace unos 10-15 años).

Hoy en día, tal cosa no existe realmente, pero la palabra permanece. Un sprite es básicamente una pequeña imagen 2D que dibujas (compuesta) en alguna parte. Por lo general, dibujando un pequeño quad con textura.

Una textura, por otro lado, es el concepto de una imagen legible utilizada en API de gráficos algo más modernas. O, más precisamente, una región de memoria ("búfer" en términos de API modernas) con algunos datos adicionales asociados, como el tamaño, que se pueden muestrear de alguna manera. Por lo general, pero no necesariamente por un sombreador que se ejecuta en una unidad de procesamiento de gráficos. Usualmente, pero no necesariamente, con coordenadas normalizadas, y usualmente pero no necesariamente con filtrado (y mipmapping, y algún modo de borde particular, y, y, y ...).

Por lo tanto, una textura puede ser la fuente de los datos que utiliza para dibujar un sprite.

Damon
fuente
3
Los sprites adecuados se superponen en el hardware, por lo que los datos de video en la memoria no cambian, y ni siquiera tiene que usar el mismo modo (por ejemplo, en el C64, puede tener sprites de mapa de bits sobre un fondo de texto). Los objetos que se representan guardando el mapa de bits y reemplazando los datos se denominan BOB (Blitter OBjects).
Simon Richter
1
@SimonRichter: No estoy familiarizado con el C64, excepto como juguete, pero el Amiga también los tenía, 8 de ellos si no recuerdo mal. No estoy seguro de cómo funcionó a nivel de hardware, pero bien podría haber sido una superposición directa (parece probable). En el ST, los sprites A00D/ AOOCopcode eran ciertamente del tipo de modificación del framebuffer draw / undraw. BOB, sí, eso también existía, cosa típica de Amiga. Eso fue lo más parecido a una textura actual, supongo (cualquier tamaño, subir al procesador de gráficos una vez, dibujar muchas veces).
Damon
4

Es una especie de comparación de manzanas y naranjas. Una textura es solo una imagen, mientras que un sprite es una imagen y cómo se usa.

Todavía usamos sprites para juegos en 2D, y aparecen en juegos en 3D con efectos de partículas. Hoy en día, los sprites generalmente se refieren a un cierto tipo de quad con textura, o (rara vez, creo) un solo triángulo. Incluso los elementos de la interfaz de usuario a menudo son quads texturizados, lo que yo llamaría sprites.

Solía ​​ser el caso de que los sprites se precargaban en la memoria y se borraban (byte por byte mem-copiado) a puntos en la pantalla (literalmente, memoria de pantalla), como sellos. En cierto modo, todavía hacemos eso. Para las animaciones de sprites, a menudo modificamos las coordenadas de muestra de la textura de origen para copiar segmentos de texturas que se renderizarán en quads. Los efectos de sombreado, como el mapeo de relieve, toman muestras de las texturas de la misma manera y, por lo tanto, todavía son utilizables para, por ejemplo, los efectos de brillo en los sprites.

Más particular a los juegos 2D, es una opción estilística. Uno podría, por ejemplo, componer personajes dibujados a mano o pintados en un juego usando sprites. Los juegos de South Park serían un ejemplo de eso, técnicamente.

Por lo tanto, no puedes usar solo una textura en lugar de un sprite.

jzx
fuente
3

Aquí hay una respuesta simple y corta. Por lo general, pienso en el sprite como el objeto completo junto con las funciones y texturas que se le han aplicado. En cuanto a la textura, lo considero una imagen que podría aplicarse a algo.

ADuckWhat
fuente