Sprite (Computergrafik)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Einfacher Sprite

Ein Sprite (engl. unter anderem für ein Geistwesen, Kobold) ist ein Grafikobjekt, das von der Grafikhardware über das Hintergrundbild bzw. den restlichen Inhalt der Bildschirmanzeige eingeblendet wird. Die Positionierung wird dabei komplett von der Grafikhardware erledigt. Beispiel: Die meisten Grafikkarten stellen ein Hardware-Sprite für den Mauszeiger zur Verfügung.

Der Name rührt daher, dass ein Sprite auf dem Bildschirm „umherspukt“ und im Grafikspeicher nicht zu finden ist. Mit der Zeit hat sich der Begriff aber auch auf alle Objekte ausgedehnt, die so aussehen, auch wenn sie softwaremäßig erzeugt werden und im Grafikspeicher vorliegen.

Heute ist die echte Sprite-Technik überholt, vor allem, da Computer inzwischen schnell genug sind, ohne Probleme tausende spriteartige Objekte auf dem Bildschirm darzustellen und zugleich den Hintergrund in ursprünglicher Form wiederherzustellen. Auch der dafür nötige Speicherplatz ist weniger wichtig geworden.

Verwandte Begriffe[Bearbeiten]

Mehrere Shapes in einem Block

Oft wird der Begriff Sprite auch verallgemeinernd für Objekte benutzt, die per Software (statt Grafikhardware) über den Hintergrund eingeblendet werden. Dies ist jedoch streng genommen ein Shape, der meistens auch als „Software-Sprite“ bezeichnet wird. Gleiches gilt für ein Objekt, das mit Hilfe von Hardware-Routinen in den Grafikspeicher einkopiert wird, ohne jedoch komplett autonom von der Hardware verwaltet zu werden; hier handelt es sich um ein BOB (Blitter Object) bzw. MOB (Movable Object Block).

In 3D-Spielen wird der Begriff Sprite manchmal für flache Objekte mit einer animierten Textur verwendet. Dabei handelt es sich fast um ein Software-Sprite im klassischen Sinne, allerdings wird dieser mittels 3D-Grafikroutinen als flaches 3D-Objekt in die 3D-Szenerie eingefügt.

Funktionsweise[Bearbeiten]

Das Sprite wird von der Grafikhardware (Grafikprozessor) zum Anzeigezeitpunkt an der gewünschten Position im Bild eingefügt. Dabei wird der Inhalt des Grafikspeichers nicht verändert – im Gegensatz zum MOB bzw. BOB müssen in diesem nicht immer wieder neu Grafikdaten umkopiert werden. Durch diese Entlastung des Hauptprozessors beanspruchen Sprites kaum Systemressourcen und sind gleichzeitig einfach zu programmieren.

Die Grafikdaten für die Sprites werden nach den gleichen Verfahren wie die Grafikdaten für den normalen Bildaufbau zur Verfügung gestellt – als Beispiele seien der C64 sowie der Amiga genannt, wo dies durch DMA-Speicherzugriffe des Grafikprozessors auf spezielle Bereiche des Hauptspeichers geschieht.

Die Steuerdaten für die Sprite-Darstellung (vor allem die Bildschirmposition) werden entweder direkt in Registern der Grafikhardware vorgehalten (Beispiel: C64, Breite und Höhe der Sprites sind fest vorgegeben) oder in speziellen RAM-Bereichen, auf die diese Hardware genügend schnellen Zugriff hat. Ein Beispiel für die letztere Variante ist der Amiga, bei dem die Steuerdaten zusammen mit den Grafikdaten per DMA-Verfahren aus dem Speicher übermittelt werden. Im Gegensatz zum C64 ist die Höhe der Amiga-Sprites nicht begrenzt.

Zur Bewegung eines Sprites reicht es aus, lediglich dessen x- und y-Koordinaten in den Steuerregistern zu ändern; die komplizierte Berechnung der Adresse im Grafikspeicher entfällt, was ebenfalls den Hauptprozessor entlastet. Der Grafikprozessor fügt selbständig an den vorgegebenen Koordinaten das Sprite beim Aufbau des nächsten Bildes ein. Auch animierte Sprites sind möglich; dazu müssen nur die Daten der Sprite-Grafik im Speicher durch die des nächsten Einzelbildes ersetzt werden. Ggf. kann auch einfach ein anderer Speicherbereich für das nächste Einzelbild angegeben werden.

Ein Sprite ist prinzipiell rechteckig. Aber auch unregelmäßig geformte Sprites sind möglich, indem der Rand transparent dargestellt wird – entweder durch eine bestimmte Farbe, welche vom Grafikprozessor transparent dargestellt wird, oder durch eine Maske, die definiert, an welchen Stellen das Sprite deckend und an welchen es transparent dargestellt werden soll.

Bedeutung für Computerspiele[Bearbeiten]

Ein einfaches C64-Spiel mit mehreren Sprites

Das Aufkommen von Sprites in den 80er Jahren revolutionierte die Möglichkeiten von Computerspielen, da damals die Prozessorleistung nicht ausreichte, um komplexe Grafikdaten auf dem Bildschirm zu verschieben (siehe auch Heimcomputer, z. B. C64, Amiga). Die Sprites wurden durch Shapes (C16) abgelöst oder ergänzt (C128) bzw. um BOBs (Amiga) ergänzt.

Eine weitere Verbesserung für Computerspiele war die Sprite-Sprite-Kollisionserkennung. Sobald der Grafikprozessor beim Erstellen des Bildes erkennt, dass sich zwei Sprites überlappen, wird dies der Software per Interrupt, Flag oder Event mitgeteilt. Damit sind die meisten Computerspiele vergleichsweise einfach zu programmieren, weil sich das Programm nicht um die Kollisionserkennung kümmern muss und für diese keine Rechenleistung verbraucht. Eine vernünftige Kollisionserkennung ist in beinahe allen Grafikprozessoren vorhanden, welche auch BOBs oder Sprites beherrschen.

Sprites sind mit Tiles, welche auch Kachelgrafik genannt werden, verwandt. In sehr vielen 2D-Spielen wie Jump' n' Runs werden beide Techniken parallel eingesetzt. Tiles sind ebenfalls kleine Grafikelemente. Aus ihnen wird die Spielewelt zusammengesetzt und sie bilden Wände und Plattformen, verharren also immer auf dem gleichen Platz. Auf diese Weise wird Arbeitsspeicher gespart, da sich wiederholende Muster nur einmal in kleinen Tilegrafiken gespeichert werden müssen, welche entsprechend einer Tilemap angeordnet werden.

Software-Sprites[Bearbeiten]

Die „Software-Sprites“ oder „Shapes“, die keine echten Sprites sind, haben in der Regel nur zwei Dinge mit echten Sprites gemeinsam: Erstens sind es Rastergrafiken, die über den Bildschirm bewegt werden, zweitens besitzen sie nicht-rechteckige Umrisse, also eine Maske bzw. transparente Bereiche.

Die Vorteile echter Sprites, wie etwa die geringe Prozessorbelastung oder die automatische Kollisionserkennung, fallen weg. Dafür erhält man als Vorteil, dass die hardwaremäßigen Einschränkungen für die Zahl und die Größe der Sprites wegfallen, wobei diese Grenzen durch die verfügbare Rechenzeit für die Umsetzung in Software neu gesetzt werden.

Im Gegensatz zu echten Sprites muss der Hintergrund, auf dem die Shapes gezeichnet werden, immer wieder nachgezeichnet werden. Am schnellsten geht das, indem man den kompletten Hintergrund der Szene im Speicher zwischenspeichert und immer wieder über das letzte Bild kopiert, allerdings braucht das zusätzlichen Speicherplatz. Speicherplatzschonend wäre, wenn man den Hintergrund immer wieder für jedes Bild neu erstellt, dazu waren frühere Computer aber zu langsam. In Fällen, bei denen sich auch der Hintergrund für jedes Bild ändern kann, fallen diese Betrachtungen natürlich weg. Allenfalls gewisse Optimierungen bei rollenden Szenerien sind denkbar.

Es gibt verschiedene Verfahren für die Speicherung und Anzeige von Softwaresprites. Sie unterscheiden sich in der benötigten Rechenzeit für die Darstellung der Sprites sowie dem zusätzlichen Speicherbedarf für die Kennzeichnung von transparenten Bildpunkten:

  • Beim ersten Verfahren wird neben dem Bild eine binäre Maske definiert. Mit dieser Maske verknüpft wird praktisch wie bei echten Sprites nur dann ein Pixel des Shapes gezeichnet, wenn an der entsprechenden Stelle in der Maske ein Bit gesetzt ist.
  • Man kann aber auch mittels der Maske ein „Loch“ in dem Bild, das im Grafikspeicher liegt, erzeugen und kopiert dann transparent das Bild des Sprites hinein. „Transparent“ bedeutet hier, dass im Bildspeicher nur gelöschte Bits (0) durch gesetzte Bits (1) des Shapes ersetzt werden, bereits gesetzte Bits werden nicht gelöscht. Deshalb muss man ein „Loch“ erzeugen, in dem alle Bits im Grafikspeicher gelöscht (0) sind, wo später das Bild des Shapes hin soll. Andernfalls würden sich die gesetzten Bits von Hintergrund und Shape vermischen.
  • Die „moderne“ Variante ist das Definieren einer transparenten Farbe (was allerdings spätestens bei den Hardware-Sprites des C64 verfügbar war). Beim Zeichnen ersetzt jedes Pixel des Shapes den Untergrund; nur wo in dem Shape die transparente Farbe benutzt wird, wird nichts gemacht, der Hintergrund bleibt also unverändert. Dieses Verfahren hat vor allem den Nachteil, dass man eine Farbe bei einem Shape nicht nutzen kann, was zu den Zeiten, wo man nur 16 Farben oder weniger gleichzeitig zur Verfügung hatte, eine gewisse Einschränkung darstellte. Außerdem war der dafür nötige Code aus Performance-Gründen am besten in Assembler zu programmieren. Bei den frühen PCs war entsprechende Hardware-Unterstützung für solche fortgeschrittenen Bit-Blit-Operationen (siehe Blitter) eher selten vorhanden.
  • Für den 256-Farben-Modus, der bei PCs in den 1990er Jahren üblich war, wurde für Sprites meist eine komprimierte Speicherung der Bilddaten verwendet. Es folgen abwechselnd ein Zähler für die transparenten Punkte und anschließend die anzuzeigenden Bilddaten. Danach wieder der Transparenzzähler usw. Die Vorteile dieser Methode sind ein verringerter Speicherbedarf und eine beschleunigte Generierung der Anzeige, da keine zusätzliche Maske benötigt wird und transparente Bildpunkte einfach übersprungen werden können. Es geht auch keine Farbe „verloren“, da die Transparenz unabhängig von den Bilddaten gespeichert wird.

Alle Verfahren für Softwaresprites haben gemein, dass der Untergrund wiederhergestellt werden muss, da er durch die Softwaresprites zerstört wird.

Die einfachste Methode zur Lösung des Problems ist das Zwischenspeichern des kompletten Hintergrundes oder nur der Stelle, an die das Shape soll, sowie das nachfolgende Zurückkopieren, wenn eine neue Szene gezeichnet werden soll. Der Hintergrund darf sich während dieser Zeit nicht ändern. Für das Sichern und Wiederherstellen von mehreren Shapes über Ausschnitte muss beim Wiederherstellen die umgekehrte Reihenfolge des Sicherns benutzt werden. Würde man dies nicht tun, könnte es zu Artefakten kommen, wenn sich einzelne Shapes überschneiden. Derartige Artefakte sind unter anderem von Mauszeigern auf Fenster-basierten Plattformen bekannt, wenn diese nicht als echte Sprites realisiert wurden und eines der auf dem System laufenden Programme ein Problem hat.

Spriteanimation[Bearbeiten]

Spriteanimation eines Fechters aus dem Spiel Wesnoth

Seit Beginn der Benutzung von Sprites wurde aus Realismusgründen angestrebt, zumindest menschliche Spielfiguren und weitere Lebewesen wie Gegner, Monster etc. weiter zu animieren. Gerade bei der Darstellung eines menschlichen Heldens ist es wichtig, dass sich bei der Fortbewegung nach rechts oder links auf einem zweidimensionalen Bildschirm die Beine bewegen. Deshalb besteht eine solche Figur in moderneren Spielen aus mehreren Sprites, die wie bei einem Zeichentrickfilm schnell hintereinander dargestellt werden, um einen fließenden Bewegungseindruck zu erzeugen. Zur Erzeugung dieser Animationssprites wurde in früheren Jahren gerne die Software Deluxe Paint (Amiga) verwendet. Heute gibt es für diesen Zweck Nachfolgeprogramme, wie z.B. Cosmigo Pro Motion. Zu Beginn der Computerspielezeit gab es daneben auch andere Techniken. So verwendete Atari Basketball Ende der 1970er Jahre den sehr grob dargestellten seitlichen Umriss einer gerade stehenden Person als Spielfigur. Beim "Laufen" blinkte in regelmäßigen Abständen ein abgestrecktes Bein (Linie) auf, welches an den Figursprite kopiert wurde.

CSS-Sprites[Bearbeiten]

Hauptartikel: CSS-Sprites

Im Webdesign wird der Begriff Sprites als Bezeichnung für Grafikdateien verwendet, welche aus mehreren kleinen Einzelgrafiken bestehen. Diese Sprites werden per CSS derart in Webseiten eingebunden, dass vom Webbrowser jeweils die benötigten entsprechend zugeschnittenen Teilgrafiken angezeigt werden. Zweck dieser Technik ist einerseits die Verringerung der Gesamtladezeit einer Webseite durch Reduzierung der Serveranfragen und andererseits das Verhindern von Verzögerungen, die durch Nachladen – beispielsweise bei Hovereffekten – entstehen würden[1][2].

Einzelnachweise[Bearbeiten]

  1. CSS Sprites - Einsparung an HTTP-Requests durch Kombination von Hintergrund-Bildern
  2. Verschiedene Verweistypen mit CSS-Sprites kennzeichnen

Weblinks[Bearbeiten]

 Commons: Sprites – Sammlung von Bildern, Videos und Audiodateien