Qual è la differenza tra uno Sprite e una Texture?


27

Ho un incarico per l'università e il mio compito è discutere le trame utilizzate nei videogiochi e come si sono evolute.

La mia domanda principale è: qual è la differenza fondamentale tra l'uso di uno sprite o l'uso di altri metodi di trama?

Avendo fatto un po 'di ricerche da solo, mi sembra di essere incline al fatto che gli Sprites memorizzino le immagini in un singolo file e possano essere usate per animazioni ecc. E fossero comunemente usati con i videogiochi più vecchi, generalmente usando gli sprite come tutti i loro giochi visivi. Ora, con i giochi moderni, credo che gli sprite tendano ad essere meno utilizzati poiché i progressi della tecnologia e altre trame sono disponibili come la mappatura di rilievo. Sebbene gli sprite siano ancora utilizzati oggi per ospitare funzionalità come una barra della salute o trame a lunga distanza.

Ma quali sono i principali vantaggi dell'utilizzo delle trame rispetto agli sprite?



5
Uno è un drink e l'altro no (mi scuso per questo scherzo)
CAD97

Risposte:


37

Alla fine della giornata, gli sprite e le trame sono solo immagini - blocchi di dati a colori raster (anche se a volte spingiamo un po 'i limiti per inserire dati non immagine). La distinzione è in gran parte nel modo in cui li usiamo.

Di solito chiamiamo un'immagine (o una parte di un'immagine che contiene molti pezzi separati) uno "sprite" se il suo scopo di rendering previsto deve essere disegnato direttamente sulla griglia 2D dello schermo, senza distorsione prospettica. Quindi ciò che vedi nel gioco in esecuzione è fondamentalmente quello che vedi nel file di immagine stesso (a parte la colorazione del colore / scambio di palette / effetti di trasparenza). Questo vale per le tessere di sfondo e i personaggi / oggetti interattivi nei giochi 2D, le carte "cartelloni" come particelle e gli stili più vecchi di rendering di alberi e arbusti, e anche per gli elementi e le icone dell'interfaccia utente nei giochi 3D.

Al contrario, se stiamo usando un'immagine per fornire dettagli di superficie per i poligoni di un oggetto 3D che potrebbero essere disegnati in prospettiva, di solito chiamiamo quell'immagine una "trama". Quel nome è stato trasferito ad altri usi dei dati delle immagini per modulare il rendering di qualcos'altro, anche se non riguardano più la trama nel senso che potresti sentire con la punta delle dita - cose come riflessi, mappe di distorsione, sovrapposizioni, maschere o qualsiasi l'uso generale di immagini che non pensiamo di nominare in modo più specifico tende a essere raggruppato sotto "trama" nella nostra nomenclatura libera.

Ciò rende i confini tra i due fuzzy e non particolarmente severi. Se ho un'immagine contenente una sequenza di pennacchi di fuoco e fumo da utilizzare nel disegno di particelle di cartellone per un effetto di esplosione, potrei chiamare intercambiabile uno "spriteheet" o una "trama di flipbook". O se ho un'immagine di un set di tessere comprendente tutte le tessere di sfondo per un gioco 2D, oggi potrei chiamarlo "atlante delle trame", per analogia con le trame dell'atlante sviluppate per i giochi 3D, anche se i suoi dati e l'uso nel mio gioco 2D sono indistinguibili da quello che qualcun altro chiamerebbe un foglio di calcolo. Se ho un rettangolo di geometria il cui scopo è presentare una singola immagine sullo schermo, potrei chiamarlo "quad testurizzato" o "sprite" a seconda di ciò che voglio sottolineare sul suo uso.

(Nota qui in questo ultimo esempio che "sprite" sta sia per il segmento di immagine di origine nelle nostre risorse di gioco, sia per l'istanza di un'entità di gioco renderizzata che utilizza questo segmento di immagine - un altro modo in cui usiamo questa terminologia in modo un po 'incoerente)

Alcuni motori e librerie codificano questa distinzione nel rendere l'intento nella propria nomenclatura. Ad esempio, in Unity puoi scegliere di importare una risorsa immagine come "Sprite" - questo abilita una serie extra di opzioni che sono comunemente desiderate per le immagini dell'interfaccia utente o le risorse di gioco 2D, come lo splicing e l'imballaggio dello spritesheet, e la possibilità di fare riferimento parti dell'immagine come entità discrete nella scena e nella configurazione degli oggetti. In questi casi "Sprite" spesso significa "un'immagine (trama) più metadati " - ma è ancora resa uguale alle normali trame sotto il cofano. L'imballaggio extra è una comodità, quindi non è necessario eseguire la micromanage di offset UV e simili ovunque desideriamo utilizzare l'immagine;


Le "trame" di solito includono o consentono pixel trasparenti? Penserei a un oggetto che si comporta come una superficie piatta mappata a pixel che contiene pixel trasparenti come uno "sprite" indipendentemente dal fatto che la superficie sia perpendicolare o meno all'asse della telecamera.
supercat

2
Certamente possono, senza rinunciare al titolo di "trama". È comune vedere la gente fare riferimento a un'immagine per il rendering, diciamo, foglie o una recinzione a maglie di catena, come una "trama di fogliame" o "trama di recinzione" anche se sono renderizzati con trasparenza alfa test / retinata o miscelata alfa . Potremmo anche chiamare il caso delle foglie uno "sprite del fogliame" se è reso come un cartellone rivolto verso la telecamera, ma sarebbe insolito applicare il nome dello sprite se usato sulla geometria prospettica come una recinzione 3D.
DMGregory

Durante il rendering di oggetti mappati a trama opachi, un motore di rendering non deve preoccuparsi di come apparirà l'interno poiché la superficie opaca nasconderà l'interno. Penserei che qualcosa come una recinzione ad albero o un collegamento a catena sarebbe meglio renderizzato facendo le porzioni opache e quindi rendendo le parti parzialmente trasparenti come superfici discrete parzialmente trasparenti. Anche se potrebbero non corrispondere a quelli che alcune persone chiamerebbero "sprite" se non affrontano la fotocamera, non sarebbero uguali agli oggetti "normali".
supercat

Di solito è così che viene fatto. La geometria per i pilastri e i tronchi di recinzione viene renderizzata nel passaggio opaco, quindi la geometria per le campate di recinzione e il fogliame / ramoscelli viene successivamente renderizzata in un passaggio alfa-test o alfa-miscela.
DMGregory

1
Di solito sento "trama trasparente" o "trama alfa" / "trama con alfa" - forse a volte "ritaglio" / "trama ritagliata" se si tratta di una trasparenza dai bordi duri / testata alfa.
DMGregory

7

Uno sprite è un relitto della storia dei giochi per computer. Pensa ad Ataris a 8 bit intorno a ca. 1980. Una piccola immagine, di solito con una maschera di bit di copertura (o uno speciale colore "trasparente") che ha una posizione sullo schermo e viene combinata sullo schermo in un modo particolare. Con buchi in cui ci sono "buchi" nello sprite, secondo la mappa di copertura. Di solito in un modo "semplicemente funzionante" e in un modo che consente facilmente l'illusione di cose che si muovono, di solito salvando e ripristinando i pixel dello schermo originale sovrascritto.

In passato gli sprite erano una funzionalità hardware sui computer, in passato si potevano disegnare / rielaborarli con i contenuti dello schermo salvati automaticamente, in passato si poteva avere solo un numero molto limitato di essi (e non si sovrappongono, yay!) e un tempo erano piuttosto dannatamente piccoli (come 16x16) e limitati.

Il cursore del mouse è ciò che oggi si avvicina di più a uno sprite (e in passato era un vero e proprio sprite su alcuni sistemi fino a circa 10-15 anni fa).

Al giorno d'oggi, nulla di simile esiste davvero, ma la parola rimane. Uno sprite è fondamentalmente una piccola immagine 2D che si disegna (composito) da qualche parte. Di solito disegnando un piccolo quad testurizzato.

Una trama, d'altra parte, è il concetto di un'immagine leggibile utilizzata nelle API grafiche un po 'più moderne. O, più precisamente, una regione di memoria ("buffer" in termini di API moderne) con alcuni dati aggiuntivi associati come le dimensioni, che possono essere campionati da alcuni mezzi. Di solito, ma non necessariamente da uno shader in esecuzione su un'unità di elaborazione grafica. Di solito, ma non necessariamente, con coordinate normalizzate, e di solito ma non necessariamente con filtri (e mipmapping, e alcune modalità di bordo particolari, e, e, e ...).

Pertanto, una trama può essere la fonte dei dati che usi per disegnare uno sprite.


3
Gli sprite corretti sono sovrapposti nell'hardware, quindi i dati video in memoria non cambiano e non devono nemmeno usare la stessa modalità (ad esempio sul C64, è possibile avere sprite bitmap sopra uno sfondo di testo). Gli oggetti che vengono renderizzati salvando la bitmap e sostituendo i dati sono chiamati BOB (Blitter OBjects).
Simon Richter,

1
@SimonRichter: non ho familiarità con il C64, eseguito come giocattolo, ma anche l'Amiga ne aveva, 8 se ricordo bene. Non sono sicuro di come abbia funzionato a livello hardware, ma potrebbe anche essere stato overlay diretto (sembra probabile). Sulla ST, gli sprite A00D/ AOOCopcode erano certamente del tipo che modifica / disegna il framebuffer. BOB, sì, anche quello esisteva, cosa tipica dell'Amiga. Questa era la cosa più vicina a una trama attuale, immagino (qualsiasi dimensione, carica una volta sul processore grafico, disegna molte volte).
Damon,

4

È una specie di confronto tra mele e arance. Una trama è solo un'immagine, mentre uno sprite è un'immagine e come viene usata.

Usiamo ancora gli sprite per i giochi 2D e vengono visualizzati nei giochi 3D con effetti particellari. Al giorno d'oggi, gli sprite in genere si riferiscono a un certo tipo di quad testurizzati o (raramente, credo) a un singolo triangolo. Persino gli elementi dell'interfaccia utente sono spesso quadrupli con texture, che definirei sprite.

In passato, gli sprite venivano precaricati in memoria e trasferiti (byte-per-byte mem copiato) ai punti sullo schermo (letteralmente, memoria dello schermo), come i timbri. In un certo senso, lo facciamo ancora. Per le animazioni sprite, spesso alteriamo le coordinate di esempio della trama di origine per copiare segmenti da trame da renderizzare su quad. Gli effetti shader, come il bump mapping, campionano le trame allo stesso modo e quindi sono ancora utilizzabili, per esempio, effetti di bagliore negli sprite.

Più particolare ai giochi 2D, è una scelta stilistica. Si potrebbe, ad esempio, comporre personaggi disegnati a mano o dipinti in un gioco usando gli sprite. I giochi di South Park ne sarebbero un esempio, tecnicamente.

Quindi, non puoi davvero usare solo una trama al posto di uno sprite.


3

Ecco una risposta semplice e breve. Di solito penso allo sprite come all'intero oggetto stesso accanto a qualsiasi funzione e trama abbia applicato ad esso. Per quanto riguarda la trama, la considero praticamente solo un'immagine che potrebbe essere applicata a qualcosa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.