Quelle est la différence entre un Sprite et une Texture?

27

J'ai un devoir à faire à l'université et ma tâche est de discuter des textures utilisées dans les jeux vidéo et de leur évolution.

Ma principale question est, quelle est la différence fondamentale entre l'utilisation d'un sprite ou l'utilisation d'autres méthodes de texture?

Après avoir fait un peu de recherche moi-même, je semble être enclin à ce que les sprites stockent des images dans un seul fichier, et puissent être utilisés pour des animations, etc. Maintenant, avec les jeux modernes, les sprites, je pense, ont tendance à être moins utilisés à mesure que les avancées technologiques et d'autres textures sont disponibles, telles que la cartographie des bosses. Bien que les sprites soient encore utilisés aujourd'hui pour accueillir des fonctionnalités telles qu'une barre de santé ou des textures longue distance.

Mais quels sont les principaux avantages de l'utilisation de textures par rapport aux sprites?

jlw8
la source
8
Cette question précédente sur le chevauchement terminologique entre «feuille de sprite» et «atlas de texture» pourrait également être utile
DMGregory
5
L'un est un verre et l'autre pas (je m'excuse pour cette blague)
CAD97

Réponses:

37

À la fin de la journée, les images-objets et les textures ne sont que des images - des blocs de données de couleur raster (bien que parfois nous poussions un peu les limites pour y mettre des données non-image). La distinction réside en grande partie dans la façon dont nous les utilisons.

Nous appelons généralement une image (ou une partie d'une image qui contient de nombreuses pièces distinctes) un "sprite" si son objectif de rendu est d'être dessiné directement sur la grille 2D de l'écran, sans distorsion de perspective. Donc, ce que vous voyez dans le jeu en cours d'exécution est fondamentalement ce que vous voyez dans le fichier image lui-même (à part la teinte de couleur / le changement de palette / les effets de transparence). Cela s'applique aux tuiles d'arrière-plan et aux personnages / objets interactifs dans les jeux 2D, aux cartes "panneau d'affichage" comme les particules et les styles plus anciens de rendu d'arbres et d'arbustes, ainsi qu'aux éléments et icônes de l'interface utilisateur dans les jeux 3D.

Inversement, si nous utilisons une image pour fournir des détails de surface pour les polygones d'un objet 3D qui pourraient être dessinés en perspective, nous appelons généralement cette image une "texture". Ce nom a été transféré à d'autres utilisations des données d'image pour moduler le rendu de quelque chose d'autre, même s'il ne s'agit plus de texture dans le sens que vous pourriez ressentir du bout des doigts - des choses comme des réflexions, des cartes de distorsion, des superpositions, des masques ou tout autre l'utilisation à des fins générales d'images que nous n'avons pas envie de nommer plus spécifiquement a tendance à être regroupée sous «texture» dans notre nomenclature lâche.

Cela rend les limites entre les deux floues et pas particulièrement strictes. Si j'ai une image contenant une séquence de panaches de feu et de fumée à utiliser pour dessiner des particules de panneaux d'affichage pour un effet d'explosion, je pourrais appeler cela une "feuille de sprites" ou une "texture de flipbook" de manière interchangeable. Ou si j'ai une image de jeu de tuiles comprenant toutes les tuiles de fond pour un jeu 2D, je pourrais appeler cela un "atlas de texture" aujourd'hui, par analogie avec les textures d'atlas développées pour les jeux 3D, même si ses données et son utilisation dans mon jeu 2D sont indiscernables de ce que quelqu'un d'autre appelerait une feuille de sprites. Si j'ai un rectangle de géométrie dont le but est de présenter une seule image à l'écran, je pourrais appeler cela un "quad texturé" ou un "sprite" selon ce que je veux souligner à propos de son utilisation.

(Notez ici dans ce dernier exemple que "sprite" représente à la fois le segment d'image source dans nos ressources de jeu et l'instance d'une entité de jeu rendue qui utilise ce segment d'image - une autre façon d'utiliser cette terminologie de manière un peu incohérente)

Vous trouverez que certains moteurs et bibliothèques codent cette distinction en rendant l'intention dans leur propre nomenclature. Par exemple, dans Unity, vous pouvez choisir d'importer une ressource d'image en tant que "Sprite" - cela permet un ensemble supplémentaire d'options qui sont généralement souhaitées pour les images d'interface utilisateur ou les ressources de jeu 2D, comme le découpage et l'emballage de feuilles de sprites, et la possibilité de référencer parties de l'image en tant qu'entités discrètes dans votre scène et configuration d'objet. Dans ces cas, "Sprite" signifie souvent "une image (texture) plus des métadonnées " - mais elle est toujours restituée comme les textures ordinaires sous le capot. L'emballage supplémentaire est pratique, nous n'avons donc pas besoin de microgérer les décalages UV et similaires partout où nous voulons utiliser l'image;

DMGregory
la source
Les «textures» incluent-elles ou permettent-elles généralement des pixels transparents? Je penserais à un objet qui se comporte comme une surface plane mappée en pixels qui contient des pixels transparents comme un "sprite", que la surface soit ou non perpendiculaire à l'axe de la caméra.
supercat
2
Ils le peuvent certainement, sans renoncer à leur titre "texture". Il est courant de voir des gens se référer à une image pour le rendu, disons, des feuilles ou une clôture à mailles de chaîne, comme une "texture de feuillage" ou une "texture de clôture" même si elles sont rendues avec une transparence alpha-test / tramée ou alpha-blended . Nous pourrions également appeler le cas de feuille un "sprite de feuillage" s'il est rendu sous la forme d'un panneau d'affichage orienté vers la caméra, mais il serait inhabituel d'appliquer le nom du sprite s'il est utilisé sur la géométrie en perspective comme une clôture 3D.
DMGregory
Lors du rendu d'objets à texture mappée opaque, un moteur de rendu n'a pas à se soucier de l'apparence de l'intérieur, car la surface opaque masquera l'intérieur. Je pense que quelque chose comme un arbre ou une clôture à mailles serait mieux rendu en faisant les parties opaques et en rendant ensuite les parties partiellement transparentes comme des surfaces discrètes partiellement transparentes. Bien qu'ils puissent ne pas correspondre à ce que certaines personnes appellent des "sprites" s'ils ne font pas face à la caméra, ils ne seront pas non plus les mêmes que des objets "normaux".
supercat
C'est en effet généralement ainsi que cela se fait. La géométrie des poteaux et des troncs de clôture est rendue dans la passe opaque, puis la géométrie des portées de clôture et du feuillage / brindilles est rendue dans un test alpha ou une passe mélangée alpha par la suite.
DMGregory
1
J'entends habituellement «texture transparente» ou «texture alpha» / «texture avec alpha» - peut-être parfois «découpe» / «texture de découpe» s'il s'agit d'une transparence à bords durs / testée alpha.
DMGregory
7

Un sprite est une relique de l'histoire des jeux vidéo. Pensez à Ataris 8 bits autour de ca. 1980. Une petite image, généralement avec un masque de couverture (ou une couleur spéciale "transparente") qui a une position sur l'écran et est combinée sur l'écran d'une manière particulière. Avec des trous là où il y a des "trous" dans le sprite, selon la carte de couverture. Habituellement, d'une manière «qui fonctionne tout simplement» et d'une manière qui permet facilement l'illusion de choses qui se déplacent, généralement en enregistrant et en restaurant les pixels d'écran d'origine remplacés.

Autrefois, les sprites étaient une fonctionnalité matérielle sur les ordinateurs, autrefois vous pouviez les dessiner / dessiner avec le contenu de l'écran enregistré automatiquement, autrefois vous ne pouviez en avoir qu'un nombre très limité (et non superposés, yay!) , et l'habitude d'être qu'ils sont sacrément petits (comme 16x16) et limités.

Le curseur de la souris est ce qui se rapproche le plus d'un sprite de nos jours (et autrefois il était un sprite réel sur certains systèmes jusqu'à ce que certains ~ il y a 10-15 ans).

De nos jours, une telle chose n'existe pas vraiment, mais le mot reste. Un sprite est essentiellement une petite image 2D que vous dessinez (composite) quelque part. Habituellement, en dessinant un petit quad texturé.

Une texture, d'autre part, est le concept d'une image lisible utilisée dans les API graphiques un peu plus modernes. Ou, plus précisément, une région de mémoire ("tampon" en termes d'API modernes) avec des données supplémentaires associées telles que la taille, qui peuvent être échantillonnées via certains moyens. Habituellement, mais pas nécessairement par un shader fonctionnant sur une unité de traitement graphique. Habituellement, mais pas nécessairement, avec des coordonnées normalisées, et généralement mais pas nécessairement avec un filtrage (et un mipmapping, et un mode de bordure particulier, et, et, et ...).

Ainsi, une texture peut être la source des données que vous utilisez pour dessiner un sprite.

Damon
la source
3
Les sprites appropriés sont superposés au matériel, de sorte que les données vidéo en mémoire ne changent pas et n'ont même pas à utiliser le même mode (par exemple sur le C64, vous pouvez avoir des sprites bitmap au-dessus d'un arrière-plan de texte). Les objets rendus en enregistrant le bitmap et en remplaçant les données sont appelés BOB (Blitter OBjects).
Simon Richter
1
@SimonRichter: Je ne suis pas familier avec le C64, sauf comme jouet, mais l'Amiga en avait aussi 8, si je me souviens bien. Je ne sais pas comment cela a fonctionné au niveau matériel, mais cela pourrait aussi bien être une superposition directe (semble probable). Sur le ST, les sprites A00D/ AOOCopcode étaient certainement du genre à modifier le framebuffer draw / undraw. Oui, ça existait aussi, chose typique d'Amiga. C'était la chose la plus proche d'une texture actuelle, je suppose (n'importe quelle taille, téléchargez une fois sur le processeur graphique, dessinez plusieurs fois).
Damon
4

C'est en quelque sorte une comparaison de pommes et d'oranges. Une texture n'est qu'une image, tandis qu'un sprite est une image et comment elle est utilisée.

Nous utilisons toujours des sprites pour les jeux 2D, et ils apparaissent dans les jeux 3D avec des effets de particules. De nos jours, les sprites se réfèrent généralement à un certain type de quad texturé ou (rarement, je pense) à un seul triangle. Même les éléments de l'interface utilisateur sont souvent des quads texturés - que j'appellerais des sprites.

Autrefois, les sprites étaient préchargés en mémoire et copiés (copiés par octet par octet) sur des points à l'écran (littéralement, mémoire d'écran), comme des tampons. D'une certaine manière, nous le faisons toujours. Pour les animations de sprites, nous modifions souvent les coordonnées de l'échantillon de la texture source pour copier des segments des textures à rendre sur des quads. Les effets de shader, tels que le mappage de relief, échantillonnent à partir de textures de la même manière et sont donc toujours utilisables pour, disons, les effets de lueur dans les sprites.

Plus particulièrement aux jeux 2D, c'est un choix stylistique. On pourrait, par exemple, composer des personnages dessinés à la main ou peints dans un jeu en utilisant des sprites. Techniquement, les jeux de South Park en seraient un exemple.

Donc, vous ne pouvez pas vraiment utiliser juste une texture à la place d'un sprite.

jzx
la source
3

Voici une réponse simple et courte. Je pense généralement au sprite comme l'objet entier lui-même à côté des fonctions et des textures qui lui ont été appliquées. Quant à la texture, je la considère à peu près comme une image qui pourrait être appliquée à quelque chose.

ADuckWhat
la source