Was ist der Unterschied zwischen einem Sprite und einer Textur?


27

Ich habe einen Auftrag für die Universität, und meine Aufgabe ist es, die in Videospielen verwendeten Texturen und ihre Entwicklung zu diskutieren.

Meine Hauptfrage ist, was ist der grundlegende Unterschied zwischen der Verwendung eines Sprites oder einer anderen Texturmethode?

Nachdem ich ein wenig nachgeforscht habe, bin ich anscheinend geneigt, dass Sprites Bilder in einer einzigen Datei speichern und für Animationen usw. verwendet werden können. Sie wurden häufig mit älteren Videospielen verwendet und verwenden im Allgemeinen Sprites als all ihre visuellen Spiele. Bei modernen Spielen werden Sprites meines Erachtens weniger häufig verwendet, da technologische Fortschritte und andere Texturen wie Bump-Mapping verfügbar sind. Obwohl Sprites auch heute noch verwendet werden, um Funktionen wie eine Gesundheitsleiste oder Texturen für große Entfernungen aufzunehmen.

Aber was sind die Hauptvorteile der Verwendung von Texturen gegenüber Sprites?



5
Einer ist ein Getränk und der andere nicht (ich entschuldige mich für diesen Witz)
CAD97

Antworten:


37

Letztendlich sind Sprites und Texturen nur Bilder - Blöcke von Rasterfarbdaten (obwohl wir manchmal die Grenzen ein wenig verschieben, um Nicht-Bilddaten darin zu platzieren). Der Unterschied liegt hauptsächlich in der Art und Weise, wie wir sie verwenden.

Wir bezeichnen ein Bild (oder einen Teil eines Bildes, der viele separate Teile enthält) normalerweise als "Sprite", wenn der beabsichtigte Rendering-Zweck darin besteht, direkt und ohne perspektivische Verzerrung auf das 2D-Raster des Bildschirms gezeichnet zu werden. Was Sie also im laufenden Spiel sehen, ist im Grunde das, was Sie in der Bilddatei selbst sehen (abgesehen von Farbtönung / Palettentausch / Transparenzeffekten). Dies gilt für die Hintergrundkacheln und Charaktere / interaktiven Objekte in 2D-Spielen, "Billboard" -Karten wie Partikel und ältere Stile des Tree & Shrub-Renderings sowie für die Elemente und Symbole der Benutzeroberfläche in 3D-Spielen.

Wenn wir umgekehrt ein Bild verwenden, um Oberflächendetails für die Polygone eines 3D-Objekts bereitzustellen, die möglicherweise perspektivisch gezeichnet werden, nennen wir dieses Bild normalerweise eine "Textur". Dieser Name hat sich auf andere Verwendungszwecke von Bilddaten übertragen, um das Rendering von etwas anderem zu modulieren, auch wenn es nicht mehr um Textur in dem Sinne geht, wie Sie es mit Ihren Fingerspitzen fühlen könnten - etwa Reflexionen, Verzerrungskarten, Überlagerungen, Masken oder Ähnliches Die allgemeine Verwendung von Bildern, die wir nicht speziell benennen möchten, neigt dazu, in unserer losen Nomenklatur unter "Textur" zusammengefasst zu werden.

Das macht die Grenzen zwischen den beiden unscharf und nicht besonders streng. Wenn ich ein Bild habe, das eine Folge von Feuer- und Rauchfahnen enthält, die zum Zeichnen von Partikeln auf Plakatwänden für einen Explosionseffekt verwendet werden sollen, kann ich das austauschbar als "Spritesheet" oder "Flipbook-Textur" bezeichnen. Oder wenn ich ein Kachelset-Bild habe, das alle Hintergrundkacheln für ein 2D-Spiel enthält, könnte ich das heute als "Texturatlas" bezeichnen, analog zu Atlas-Texturen, die für 3D-Spiele entwickelt wurden, obwohl die Daten und die Verwendung in meinem 2D-Spiel nicht zu unterscheiden sind von dem, was jemand anderes ein Spritesheet nennen würde. Wenn ich ein Rechteck mit Geometrie habe, dessen Zweck darin besteht, ein einzelnes Bild auf dem Bildschirm darzustellen, kann ich das als "texturiertes Quad" oder "Sprite" bezeichnen, je nachdem, worauf ich bei der Verwendung besonderen Wert legen möchte.

(Beachten Sie in diesem letzten Beispiel, dass "Sprite" sowohl für das Quellbildsegment in unseren Spiel-Assets als auch für die Instanz einer gerenderten Spieleinheit steht, die dieses Bildsegment verwendet - eine andere Art und Weise, wie wir diese Terminologie etwas inkonsistent verwenden.)

Einige Engines und Bibliotheken kodieren diese Unterscheidung, indem sie Intent in ihre eigene Nomenklatur umwandeln. In Unity können Sie beispielsweise festlegen, dass ein Bild-Asset als "Sprite" importiert werden soll. Dies ermöglicht eine Reihe zusätzlicher Optionen, die häufig für Benutzeroberflächen-Images oder 2D-Spiel-Assets gewünscht werden, z Teile des Bildes als diskrete Einheiten in Ihrer Szenen- und Objekteinrichtung. In diesen Fällen bedeutet "Sprite" oft "ein Bild (eine Textur) plus Metadaten " - aber es wird immer noch wie gewöhnliche Texturen unter der Haube gerendert. Die zusätzliche Verpackung ist praktisch, sodass wir UV-Offsets und ähnliches nicht überall dort verwalten müssen, wo wir das Bild verwenden möchten.


Enthalten "Texturen" normalerweise transparente Pixel oder lassen sie diese zu? Ich würde mir ein Objekt vorstellen, das sich wie eine pixelabgebildete flache Oberfläche verhält, die transparente Pixel als "Sprite" enthält, unabhängig davon, ob die Oberfläche senkrecht zur Kameraachse ist oder nicht.
Supercat

2
Sie können sicherlich, ohne ihren "Textur" -Titel aufzugeben. Es ist üblich, dass sich Leute auf ein Bild beziehen, um es zu rendern, zum Beispiel Blätter oder einen Maschendrahtzaun, als "Laubtextur" oder "Zauntextur", selbst wenn sie mit Alpha-Test- / Dither- oder Alpha-Mischtransparenz gerendert werden . Wir könnten das Blattgehäuse auch als "Laub-Sprite" bezeichnen, wenn es als kamerabewusste Werbetafel gerendert wird. Es wäre jedoch ungewöhnlich, den Sprite-Namen anzuwenden, wenn er für perspektivische Geometrien wie einen 3D-Zaun verwendet wird.
DMGregory

Beim Rendern von Objekten mit undurchsichtigen Texturzuordnungen muss sich ein Renderingmodul keine Gedanken darüber machen, wie das Innere der Objekte aussehen wird, da die undurchsichtige Oberfläche das Innere verdeckt. Ich würde denken, dass so etwas wie ein Baum oder ein Maschendrahtzaun am besten gerendert werden kann, indem die undurchsichtigen Bereiche und dann die teilweise transparenten Teile als diskrete, teilweise transparente Oberflächen gerendert werden. Sie stimmen möglicherweise nicht mit denen überein, die manche als "Sprites" bezeichnen, wenn sie nicht in die Kamera schauen. Sie sind jedoch auch nicht mit "normalen" Objekten identisch.
Supercat

Das ist in der Tat normalerweise so. Die Geometrie für die Zaunpfosten und -stämme wird im undurchsichtigen Durchgang gerendert, und anschließend wird die Geometrie für die Zaunfelder und die Blätter / Zweige in einem Alpha-Test oder einem Alpha-Mischdurchgang gerendert.
DMGregory

1
Normalerweise höre ich "transparente Textur" oder "Alpha-Textur" / "Textur mit Alpha" - vielleicht manchmal "Ausschnitt" / "Ausschnitt-Textur", wenn es sich um eine hartkantige / Alpha-getestete Transparenz handelt.
DMGregory

7

Ein Sprite ist ein Relikt aus der Geschichte der Computerspiele. Denken Sie 8-Bit-Ataris um ca. 1980. Ein kleines Bild, normalerweise mit einer Deckungsbitmaske (oder einer speziellen "transparenten" Farbe), die eine Position auf dem Bildschirm hat und auf eine bestimmte Weise auf dem Bildschirm kombiniert wird. Mit Löchern, in denen "Löcher" im Sprite vorhanden sind, wie auf der Abdeckungskarte angegeben. Normalerweise auf eine Art und Weise, die "nur funktioniert" und auf eine Art und Weise, die leicht die Illusion von sich bewegenden Dingen ermöglicht, normalerweise durch Speichern und Wiederherstellen der überschriebenen ursprünglichen Bildschirmpixel.

Früher waren Sprites eine Hardwarefunktion auf Computern, früher konnten Sie sie mit automatisch gespeicherten Bildschirminhalten zeichnen / entzeichnen, früher konnten Sie nur eine sehr begrenzte Anzahl von ihnen haben (und nicht überlappend, yay!) Früher waren sie verdammt klein (wie 16x16) und limitiert.

Der Mauszeiger ist heutzutage das, was einem Sprite am nächsten kommt (und war auf manchen Systemen bis vor ca. 10-15 Jahren ein tatsächliches Sprite).

Heutzutage gibt es so etwas nicht wirklich, aber das Wort bleibt. Ein Sprite ist im Grunde ein kleines 2D-Bild, das Sie irgendwo zeichnen (zusammensetzen). Normalerweise durch Zeichnen eines kleinen strukturierten Quadrats.

Eine Textur ist dagegen das Konzept eines lesbaren Bildes, das in etwas moderneren Grafik-APIs verwendet wird. Oder genauer gesagt, ein Speicherbereich ("Puffer" im Sinne moderner APIs) mit einigen zugehörigen zusätzlichen Daten, wie z. B. der Größe, aus dem mit bestimmten Mitteln Daten abgetastet werden können. In der Regel, jedoch nicht unbedingt von einem Shader, der auf einer Grafikverarbeitungseinheit ausgeführt wird. Normalerweise, aber nicht unbedingt, mit normalisierten Koordinaten und normalerweise, aber nicht unbedingt, mit Filtern (und Mipmapping sowie einem bestimmten Randmodus und und und ...).

Daher kann eine Textur die Quelle der Daten sein, die Sie zum Zeichnen eines Sprites verwenden.


3
Richtige Sprites werden in der Hardware überlagert, sodass sich die Videodaten im Speicher nicht ändern und nicht einmal denselben Modus verwenden müssen (z. B. können Bitmap-Sprites auf dem C64 über einem Texthintergrund angezeigt werden). Objekte, die durch Speichern der Bitmap und Ersetzen von Daten gerendert werden, werden als BOBs (Blitter OBjects) bezeichnet.
Simon Richter

1
@ SimonRichter: Ich bin mit dem C64, der als Spielzeug ausgeführt wird, nicht vertraut, aber der Amiga hatte auch diese, 8 davon, wenn ich mich richtig erinnere. Ich bin mir nicht sicher, wie es auf der Hardwareebene funktioniert hat, könnte aber genauso gut eine direkte Überlagerung gewesen sein (scheint wahrscheinlich). Auf der ST, die A00D/ AOOCwaren Opcode Sprites sicherlich der Zug- / undraw Framebuffer-modifizierende Art. BOBs, ja, das gab es auch, typische Amiga-Sache. Das war meiner Meinung nach die nächste Annäherung an eine heutige Textur (jede Größe, einmal in den Grafikprozessor hochladen, mehrmals zeichnen).
Damon

4

Es ist eine Art Vergleich zwischen Äpfeln und Orangen. Eine Textur ist nur ein Bild, während ein Sprite ein Bild ist und wie es verwendet wird.

Wir verwenden weiterhin Sprites für 2D-Spiele und sie werden in 3D-Spielen in Partikeleffekten angezeigt. Heutzutage beziehen sich Sprites im Allgemeinen auf eine bestimmte Art von texturiertem Quad oder (selten, glaube ich) auf ein einzelnes Dreieck. Sogar UI-Elemente sind oft noch texturierte Quads - was ich Sprites nennen würde.

Früher wurden Sprites in den Speicher geladen und auf Punkte auf dem Bildschirm (buchstäblich Bildschirmspeicher) wie Stempel übertragen (Byte für Byte kopiert). In gewisser Weise machen wir das immer noch. Bei Sprite-Animationen ändern wir häufig die Beispielkoordinaten der Quelltextur, um Segmente von Texturen zu kopieren, die auf Quads gerendert werden sollen. Shader-Effekte wie Bump-Mapping werden auf die gleiche Weise aus Texturen abgetastet und können daher beispielsweise für Glow-Effekte in Sprites verwendet werden.

Insbesondere für 2D-Spiele ist dies eine stilistische Wahl. Man könnte zum Beispiel mit Sprites handgezeichnete oder gemalte Charaktere in einem Spiel komponieren. Die South Park-Spiele wären technisch ein Beispiel dafür.

Sie können also nicht wirklich nur eine Textur anstelle eines Sprites verwenden.


3

Hier ist eine einfache und kurze Antwort. Normalerweise stelle ich mir das Sprite als das gesamte Objekt neben den Funktionen und Texturen vor, die darauf angewendet werden sollen. Textur halte ich eigentlich nur für ein Bild, das auf etwas angewendet werden könnte.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.