Qual é a diferença entre um Sprite e uma Textura?

27

Tenho uma tarefa prevista para a Universidade, e minha tarefa é discutir as texturas usadas nos videogames e como elas evoluíram.

Minha principal pergunta é: qual é a diferença fundamental entre usar um sprite ou usar outros métodos de textura?

Depois de fazer uma pequena pesquisa, pareço estar inclinado a que os Sprites armazenem imagens em um único arquivo e possam ser usados ​​para animações, etc. Agora, nos jogos modernos, os sprites, acredito, tendem a ser menos usados ​​à medida que os avanços tecnológicos e outras texturas estão disponíveis, como o mapeamento de resposta. Embora os sprites ainda sejam usados ​​hoje para acomodar recursos como uma barra de saúde ou texturas de longa distância.

Mas quais são as principais vantagens do uso de texturas em vez de sprites?

jlw8
fonte
5
Um é uma bebida e o outro não (peço desculpas por esta piada) #
9797

Respostas:

37

No final do dia, sprites e texturas são apenas imagens - blocos de dados de cores raster (embora às vezes forçamos um pouco os limites para inserir dados que não são de imagem). A distinção está amplamente em como as usamos.

Normalmente, chamamos uma imagem (ou parte de uma imagem que contém muitas peças separadas) de "sprite" se o objetivo de renderização pretendido for desenhado diretamente na grade 2D da tela, sem distorção de perspectiva. Então, o que você vê no jogo em execução é basicamente o que você vê no próprio arquivo de imagem (além dos efeitos de tonalidade / troca de paleta / transparência). Isso se aplica aos blocos de fundo e aos personagens / objetos interativos em jogos 2D, cartões "outdoor" como partículas e estilos antigos de renderização de árvores e arbustos, e também aos elementos e ícones da interface do usuário nos jogos 3D.

Por outro lado, se estivermos usando uma imagem para fornecer detalhes de superfície para os polígonos de um objeto 3D que possa ser desenhado em perspectiva, geralmente chamamos essa imagem de "textura". Esse nome foi transferido para outros usos de dados de imagem para modular a renderização de outra coisa, mesmo que não sejam mais sobre textura no sentido em que você pode sentir com as pontas dos dedos - coisas como reflexões, mapas de distorção, sobreposições, máscaras ou qualquer O uso geral de imagens que não desejamos nomear de maneira mais específica tende a ser agrupado sob "textura" em nossa nomenclatura frouxa.

Isso torna os limites entre os dois confusos e não particularmente rigorosos. Se eu tiver uma imagem contendo uma sequência de plumas de fogo e fumaça para desenhar partículas de outdoor para causar um efeito de explosão, eu poderia chamar isso de "folha de sprites" ou "textura de flipbook" de forma intercambiável. Ou, se eu tiver uma imagem de conjunto de peças que inclua todos os blocos de plano de fundo de um jogo 2D, eu poderia chamar isso de "atlas de textura" hoje, por analogia com as texturas de atlas desenvolvidas para jogos 3D, mesmo que seus dados e uso no meu jogo 2D sejam indistinguíveis do que alguém chamaria de planilha. Se eu tenho um retângulo de geometria cujo objetivo é apresentar uma única imagem na tela, posso chamar isso de "quad texturizado" ou "sprite", dependendo do que quero enfatizar sobre seu uso.

(Observe aqui neste último exemplo que "sprite" representa o segmento de imagem de origem em nossos ativos de jogo e a instância de uma entidade de jogo renderizada que usa esse segmento de imagem - outra maneira de usarmos essa terminologia um pouco inconsistentemente)

Você encontrará alguns mecanismos e bibliotecas que codificam essa distinção ao tornar a intenção em sua própria nomenclatura. Por exemplo, no Unity, você pode optar por importar um recurso de imagem como um "Sprite" - isso permite um conjunto extra de opções geralmente desejadas para imagens de interface do usuário ou recursos de jogos 2D, como fatiar e compactar planilhas, e a capacidade de referenciar partes da imagem como entidades discretas na cena e na configuração do objeto. Nesses casos, "Sprite" geralmente significa "uma imagem (textura) mais metadados " - mas ainda é renderizado da mesma maneira que as texturas comuns sob o capô. A embalagem extra é uma conveniência, por isso não precisamos microgerenciar as compensações UV e afins em todos os lugares em que queremos usar a imagem;

DMGregory
fonte
As "texturas" geralmente incluem ou permitem pixels transparentes? Eu pensaria em um objeto que se comporta como uma superfície plana mapeada por pixels que contém pixels transparentes como um "sprite", independentemente de a superfície ser ou não perpendicular ao eixo da câmera.
Supercat #
2
Eles certamente podem, sem abrir mão do título de "textura". É comum ver que as pessoas se referem a uma imagem para renderizar, digamos, folhas ou uma cerca de arame, como uma "textura de folhagem" ou "textura de cerca", mesmo se forem renderizadas com transparência alfa-teste / pontilhado ou alfa-misturado . Também podemos chamar o caso de folha de "sprite de folhagem" se for renderizado como um outdoor voltado para a câmera, mas seria incomum aplicar o nome do sprite se ele for usado na geometria de perspectiva como uma cerca 3D.
DMGregory
When rendering opaque texture-mapped objects, a rendering engine need not worry about how the inside of them will appear since the opaque surface will hide the inside. I would think that something like a tree or chain-link fence would be best rendered by doing the opaque portions and then rendering the partially-transparent parts as discrete partially-transparent surfaces. While they might not match what some people would call "sprites" if they don't face the camera, they wouldn't be the same as "normal" objects either.
supercat
De fato, geralmente é assim que é feito. A geometria dos postes e troncos da cerca é renderizada na passagem opaca e, em seguida, a geometria da extensão da vedação e da folhagem / galhos é renderizada posteriormente em um teste alfa ou passagem mista alfa.
DMGregory
11
Normalmente, ouço "textura transparente" ou "textura alfa" / "textura com alfa" - talvez às vezes "recorte" / "textura de recorte" se for uma transparência com bordas duras / testada por alfa.
DMGregory
7

Um sprite é uma relíquia da história dos jogos de computador. Pense em Ataris de 8 bits em torno de ca. 1980. Uma pequena imagem, geralmente com uma máscara de cobertura (ou uma cor especial "transparente") que tem uma posição na tela e é combinada na tela de alguma maneira específica. Com buracos onde existem "buracos" no sprite, conforme o mapa de cobertura. Geralmente de uma maneira "simplesmente funciona" e de uma maneira que permite facilmente a ilusão de coisas em movimento, geralmente salvando e restaurando os pixels da tela original substituídos.

Costumava ser que os sprites eram um recurso de hardware nos computadores; costumava-se desenhar / não desenhá-los com o conteúdo da tela sendo salvo automaticamente; costumava-se ter apenas um número muito limitado deles (e sem sobreposição, sim!) , e costumavam ser muito pequenos (como 16x16) e limitados.

O cursor do mouse é o que mais se aproxima de um sprite hoje em dia (e costumava ser que era um duende real em alguns sistemas até que algum ~ 10-15 anos).

Hoje em dia, tal coisa realmente não existe, mas a palavra permanece. Um sprite é basicamente uma pequena imagem 2D que você desenha (composta) em algum lugar. Geralmente desenhando um pequeno quadrilátero texturizado.

Uma textura, por outro lado, é o conceito de uma imagem legível usada em APIs gráficas um pouco mais modernas. Ou, mais precisamente, uma região de memória ("buffer" em termos de APIs modernas) com alguns dados extras associados, como tamanho, que podem ser amostrados por alguns meios. Geralmente, mas não necessariamente por um shader executado em uma unidade de processamento gráfico. Geralmente, mas não necessariamente, com coordenadas normalizadas, e geralmente mas não necessariamente com filtragem (e mipmapping, e algum modo de borda específico, e, e, e ...).

Assim, uma textura pode ser a fonte dos dados que você usa para desenhar um sprite.

Damon
fonte
3
Sprites apropriados são sobrepostos no hardware, para que os dados de vídeo na memória não mudem e nem precisem usar o mesmo modo (por exemplo, no C64, você pode ter sprites de bitmap acima de um plano de fundo do texto). Objetos que são renderizados ao salvar o bitmap e substituir dados são chamados BOBs (Blitter OBjects).
Simon Richter
11
@ SimonRichter: Eu não estou familiarizado com o C64, mas soube que o Amiga também tinha, 8 deles, se bem me lembro. Não tenho certeza de como funcionou no nível do hardware, mas pode ter sido uma sobreposição direta (parece provável). No ST, os sprites A00D/ AOOCopcode eram certamente do tipo de modificação de buffer de quadro draw / undraw. BOBs, sim, isso também existia, coisa típica de Amiga. Essa foi a coisa mais próxima de uma textura atual, eu acho (qualquer tamanho, faça o upload para o processador gráfico uma vez, desenhe várias vezes).
Damon
4

É uma espécie de comparação de maçãs e laranjas. Uma textura é apenas uma imagem, enquanto um sprite é uma imagem e como é usada.

Ainda usamos sprites para jogos 2D, e eles aparecem em jogos 3D em efeitos de partículas. Atualmente, sprites geralmente se referem a um certo tipo de quad texturizado ou (raramente, acho) a um único triângulo. Mesmo os elementos da interface do usuário ainda são quads texturizados - o que eu chamaria de sprites.

Costumava ser o caso de sprites serem pré-carregados na memória e misturados (copiados por bytes), em pontos da tela (literalmente, memória da tela), como carimbos. De certa forma, ainda fazemos isso. Para animações de sprite, geralmente alteramos as coordenadas de amostra da textura de origem para copiar segmentos das texturas a serem renderizadas em quadríceps. Os efeitos de sombreador, como o mapeamento de relevo, são amostrados de texturas da mesma maneira e, portanto, ainda são úteis para, por exemplo, efeitos de brilho em sprites.

Mais particular aos jogos 2D, é uma escolha estilística. Pode-se, por exemplo, compor personagens desenhados à mão ou pintados em um jogo usando sprites. Os jogos de South Park seriam um exemplo disso, tecnicamente.

Portanto, você não pode realmente usar apenas uma textura no lugar de um sprite.

jzx
fonte
3

Aqui está uma resposta simples e curta. Normalmente, penso no sprite como o próprio objeto inteiro, ao lado de quaisquer funções e texturas que tenham sido aplicadas a ele. Quanto à textura, considero apenas uma imagem que pode ser aplicada a algo.

ADuckWhat
fonte