[Quelle: siehe Bildergalerie]
Dieser Artikel ist im Original in der PC Games Hardware 04/2001 erschienen. Damals war 64-Bit-Farbtiefe noch Zukunftsmusik, im Gegensatz zu heute war 32-Bit-Rendering eher noch eine Neuentwicklung. Von Bits und Bytes: Wenn Sie in Spielen mit regelrechten Farblawinen bombardiert werden, dann basieren diese Effekte immer auf simplen Zahlen. Der Grafikchip muss mit vielen dieser Werte jonglieren, um ein 3D-Bild auf dem Schirm ausgeben zu können. Schließlich müssen die Position der Dreiecke, welche die Spielewelt definieren, sowie die einzelnen Farbwerte der Bildpunkte genau erfasst und berechnet werden. Je mehr Bits für diesen Zweck zur Verfügung stehen, umso exakter rechnet der 3D-Bolide - und umso weniger Bildfehler finden den Weg auf Ihren Monitor. Bei uns erfahren Sie, warum manche Spiele auf alten Voodoo-Karten schlechter aussehen als auf modernen 3D-Beschleunigern.
Bit-Fundament Mit einem Bit lassen sich zwei Zustände festhalten: 0 oder 1. Mit zwei Bits sind es deren vier und mit drei Bits bereits acht Zustände. Die Anzahl dieser Ausprägungen verdoppelt sich mit jedem zusätzlichen Bit, welches für die Datenspeicherung zur Verfügung steht. Heutige Grafikchips bieten intern mindestens Berechnungen mit 32-Bit-Genauigkeit an, womit sich 4.294.967.296 verschiedene Zustände (2 hoch 32) speichern lassen. Einige 3D-Renner, beispielsweise der VSA-100 von 3dfx und die GeForce-Serie von Nvidia, arbeiten bereits mit höheren Genauigkeiten um die 40 Bit. 32-Bit-Rendering bedeutet im übrigen nicht, dass der Bildspeicher alle 32 Bits für Farbinformationen verwenden kann. 8 dieser 32 Bit sind für Transparenzinformationen reserviert, nur die restlichen 24 Bit dürfen für Farbangaben genutzt werden. Ähnliches gilt für den Tiefenspeicher (Z-Buffer). Dieser kann zwar 32 Bit nutzen, meist werden jedoch 8 Bit für den Schablonen-Puffer (Stencil Buffer) abgezwackt, um damit volumetrische Echtzeitschatten oder andere Spezialeffekte im Spiel zu nutzen.
[index]
Eingeschränkter Außendienst Besonders ältere oder preiswertere Optik-Lieferanten wie TNT2-Platinen liefern die Bilder nur beim ungenaueren 16-Bit-Rendering schnell genug, da in diesem Modus nur die halbe Datenmenge zur Verarbeitung anfällt. 16-Bit-Rendering bedeutet jedoch nicht, dass die Chips intern ebenfalls auf 16-Bit-Berechnungen zurückgreifen. Die Innereien werkeln weiterhin mit genauen 32 Bit, doch bei allen Zugriffen auf den Speicher (Tiefenspeicher sowie Bildspeicher) werden die Daten auf 16 Bit heruntergerechnet. Je nach Einstellungen fallen auch die Texturen unter die Sparmaßnahme und müssen sich einer Umwandlung ins 16-Bit-Format unterziehen. Da hierbei die Anzahl möglicher Farbwerte bzw. Tiefenwerte vom Millionenbereich auf lediglich 65.536 verschiedene Werte limitiert wird, setzen die Entwickler beim Bildspeicher auf so genannte "Dithering-Verfahren". Mit Dithering werden aus der geschickten Farbmischung umliegender Pixel künstlich "neue" Farben simuliert. Durch das entstehende Muster vermischt unser mit beschränkter Auflösungsfähigkeit ausgestattetes Auge die einzelnen Farbwerte zu einem neuen Farbwert.
Die Grenzen von 16-Bit-Rendering Das Dithering-Konzept funktionierte in vielen Spielen recht gut, einige interessante Zusatztechnologien (erwähnt sei hier der bekannte 22-Bit-Filter bei Voodoo-Karten) konnten diesen Rendering-Modus zu neuer Blüte aufleben lassen. Doch bei modernen Spiele-Engines, wie sie in F.A.K.K. 2 oder Rune verwendet werden, stößt das Konzept an seine Grenzen. Hässliche Muster und Farbverfälschungen trüben den Spielerfrieden und verlangen nach 32-Bit-Rendering, mangels entsprechender Speicher-Leistung meist jedoch unter Opferung hoher Auflösungen. Das Problem in modernen Spielen liegt in den genutzten Multi-Pass-Effekten. Bei einem Multi-Pass-Effekt müssen die Pixel mehrfach aus dem Grafikspeicher gelesen werden, da der Pixelknecht den geforderten Effekt nicht in einem Rendering-Durchgang ausführen kann. Bump Mapping, Glanzlichter und Transparenz-Effekte wären typische graphische Leckerbissen, welche ein solches Wiederauslesen der Farbwerte aus dem Grafikspeicher erfordern. Da beim 16-Bit-Rendering diese Werte bereits "gedithert", d. h. in Rasterstruktur mit wenig Farbinformationen abgelegt sind, rechnet der Chip mit verfälschten Farbwerten weiter. Mit jedem zusätzlichen Rendering-Durchgang kommen weitere Fehler dazu, was sich in stark sichtbaren, oft mit Grünstich versehenen Rasterstrukturen bemerkbar machen kann. Eine positive Ausnahme dieses Phänomens bilden die Kyrochips (PowerVR) der Chipschmiede Imagination Technologies. Diese "Tiler"-Chips schreiben die Bildinformationen nur einmal nach Abschluss aller Berechnungen in den Grafikkartenspeicher, alle Multi-Pass- und Transparenz-Effekte werden innerhalb des Chips 32-bittig berechnet. Entsprechend gut ist die 16-Bit-Qualität dieser kleinen Pixelknechte.
[index]
64 Bit sind gefordert Eigentlich sollten die vielen verschiedenen Farbwerte des 32-Bit-Renderings ausreichen, um exakte Berechnungen durchführen zu können. Dies ist heute durchaus der Fall, aktuelle Spiele zeigen mit aktiviertem 32-Bit-Rendering keine sichtbaren Berechnungsfehler. Dennoch verlangen prominente Spieleentwickler wie John Carmack (id software) schon jetzt mehr Genauigkeit für ihre nächsten Projekte. Problematisch wird die auf 32 Bit beschränkte interne Farbtiefe, sobald sehr viele farbenprächtige 32-Bit-Texturen mit in die Berechnung einfließen sollen. Bei jeder Kombination zweier 32-Bit-Texturen gehen Informationen verloren, es schleichen sich Rundungsfehler ein. Zusammen mit den neuen programmierbaren Effektmöglichkeiten in DirectX 8 können solche Rundungsfehler schwer wiegende Folgen haben und sich im Verlaufe der Berechnung aufschaukeln. Das Resultat dieser aufsummierten Fehler wären falsche Farbdarstellungen im Endbild, speziell bei sehr grellen Lichteffekten. 64-Bit-Rendering, auch als "Overbright-Lighting" bekannt, gilt als Gegenmittel für dieses Fehlersymptom. Der Ruf nach 64-Bit-Rendering wird nicht ungehört verhallen, eine Sprecherin des Chiphauses Nvidia ließ bereits erkennen, dass künftige Grafikchips dieses Feature bieten werden. Auf einen genauen Zeitpunkt wollte sie sich jedoch nicht festlegen lassen.
Innereien Intern, also innerhalb der 3D-Pipeline des Chips, lässt sich die Berechungsgenauigkeit relativ problemlos unter Beanspruchung zusätzlicher Siliziumfläche erhöhen. Problematischer wird es, wenn die Daten auch beim Zugriff auf den Grafikkartenspeicher mit 64 Bit Farbgenauigkeit gespeichert werden sollen. Bereits heute zeigen selbst schnelle 3D-Renner Leistungsverluste, sobald die Bildpunkte in den Rendering-Schritten nicht auf 16 Bit heruntergerechnet werden (Dithering). Wird 64-Bit- statt 32-Bit-Rendering bis zum Grafikkartenspeicher genutzt, halbiert sich die Frame-Rate entsprechend.
Halbe Positionsgenauigkeit Zu beachten sind beim Thema Rendering-Genauigkeit auch die Tiefenspeicher (Z-Buffer). Wird 16-Bit-Rendering statt 32-Bit-Rendering verwendet, so werden auch die Tiefeninformationen der Pixel mit halber Genauigkeit abgelegt. Speziell bei weit entfernten Dreiecken kann dies zu falschen Verdeckungsberechnungen führen. Im Spiel erkennen Sie dies beispielsweise an schwarzen Spalten zwischen den Dreiecken oder an flackernden Texturen. Einen klugen Ansatz liefert Ati mit dem Radeon-Baustein. Die 32-bittigen Tiefenwerte werden verlustfrei komprimiert gespeichert und bei Bedarf in Echtzeit von der Hardware wieder decodiert (HyperZ-Technologie). Dies spart Datenverkehr, ohne die Nachteile der geringeren Genauigkeit in Kauf nehmen zu müssen.
Engpass ausmessen Die Speicherbandbreite, die bei bestimmten Bitgrößen auftritt, lässt sich annäherungsweise berechnen. Die Kapazität, welche auf den Straßen zu den Speicherbausteinen zur Verfügung steht, muss für alle Zugriffe des Grafikchips geteilt werden (Unified). Aktuelle Grafikchips können auf 128 Speicherstraßen (= 128 Bit) mit bis zu 230 MHz auf den Speicher zugreifen (GeForce2 Ultra) und pro Takt zwei Datenpakete übertragen (DDR). Damit lassen sich pro Sekunde im Idealfall bis zu 7,3 Gigabyte an Daten transportieren (128/8*230*2). Diese 7 GB/s werden vom Chip für Zugriffe auf die Texturen, den Tiefenspeicher der Pixel, die Dreiecksdaten sowie den Bildspeicher genutzt.
[index]
Bildergalerie zum Artikel