Das tecChannel 3D-Lexikon: S bis Z

15.02.2001 von Bernhard  Haluschak und MARCO SPOERL 
Wer sich mit 3D-Spielen und -Grafik beschäftigt, stolpert immer wieder über diverse Fachbegriffe. tecChannel hat für Sie die wichtigsten Begriffe aus dem 3D-Grafikbereich zusammengestellt und erklärt sie detailliert.

In diesem Beitrag haben wir folgende Begriffe rund um die 3D-Grafik alphabetisch geordnet und ausführlich erläutert:

Weitere Begriffe finden Sie unter:

tecChannel 3D-Lexikon: A bis F

Alpha-Blending / Color KeyAmbient LightAnisotropic FilteringAnti-AliasingBilineares FilteringBump MappingClippingCube Environmental MappingDepth of FieldDiffuse LightingDitheringFast WriteFillrate / Memory BandwidthFlat-ShadingFogging / Depth CueingFull Scene Anti-Aliasing / FSAA

tecChannel 3D-Lexikon: G bis R

Gouraud-ShadingKeyframe Interpolation / Vertex MorphingLens FlareMIP-MappingMotion BlurMotion CompensationPerspective CorrectionPhong-ShadingRAMDAC

Wir ergänzen das 3D-Lexikon laufend mit neuen Fachbegriffe. (hal)

SDRAM/SGRAM / DDR-SDRAM/SGRAM

Der konventionelle SDRAM- und SGRAM-Speicher nutzt nur die steigende Taktflanke zur Datenübertragung. Das Prinzip von DDR-SDRAM/SGRAM beruht auf der Nutzung beider Taktflanken. Daten werden mit steigender und fallender Flanke übertragen. Damit ergibt sich eine theoretische Verdoppelung der Bandbreite.

Bei einer GeForce-Grafikkarte mit einer Speicherbusbreite von 128 Bit und einem Speichertakt von 166 MHz (SDRAM/SGRAM) und 150 MHz (DDR-SDRAM/SGRAM) ergibt sich folgende Rechnung:

Speicherfrequenz x Busbreite = maximale Datentransferrate

Für SDRAM/SGRAM gilt: 166 MHz x 128 Bit = 20263 MBit/s = 2,47 GByte/s

Für DDR-SDRAM/SGRAM gilt: 150 MHz x 2 x 128 Bit = 36621 MBit/s = 4,47 GByte/s

Der Vorteil von DDR-SDRAM/SGRAM gegenüber herkömmlichen SDRAM/SGRAM ist in der Praxis nur bei 3D-Applikationen in hohen Auflösungen und Farbtiefen festzustellen. Dabei werden mehr zusammenhängende große Datenblöcke vom Grafikprozessor und Speicher bearbeitet als in den "kleinen" Bildmodi. Jeder Datenblock erfordert eine gewisse Initialisierungszeit, bis er umgesetzt und auf dem Bildschirm gezeichnet wird. Dieser Overhead fällt bei den kleinen Modi stärker aus und dadurch wird der Speicherbus nicht voll beansprucht. Erst bei großen Datenblöcken kann man die doppelte Speicherbandbreite des DDR-Speichers effektiv nutzen. Man spricht hier von einem balancierten System.

Shadow Mapping

Echte Schatten können eigentlich nur beim Raytracing berechnet werden und nicht beim Rendern. Heutige Spiele benutzen deshalb vor allem vorberechnete Schatten - meist bei Gebäuden und anderen statischen Gegenständen. Diese sehen zwar sehr realistisch und natürlich aus, können aber nicht mit dynamischen Lichtquellen und den Spielfiguren benutzt werden. Für solche Zwecke wie Bildung von volumetrischen Schatten wird oft der Stencil Buffer eingesetzt.

Beim Shadow Mapping dagegen wendet man einen Trick an: Die Kamera wird zuerst an die Position der Lichtquelle gestellt und anschließend eine Schattentextur mit Hilfe der Silhouette des Objekts gerendert. Danach projiziert man diese Textur von der Lichtquelle aus auf die Szene, was bei den heutigen Beschleunigern dank Hardwareunterstützung extrem schnell geschieht.

Der Vorteil dieser Technik ist zum einen, dass nur eine einfache Textur pro Lichtquelle benötigt wird, anstelle von Polygonen bei volumetrischen Schatten. Zum anderen ist es damit sehr viel einfacher, Schatten zu berechnen, die ein Objekt auf sich selber wirft.

Specular Lighting

Specular Lighting, das auch als Shininess Lighting bezeichnet werden kann, ist neben Ambient und Diffuse Light die dritte Komponente bei Beleuchtungsmodellen. Dieses Licht kommt aus einer bestimmten Richtung und wird von Oberflächen in eine vordefinierte Richtung reflektiert.

Ein Laserstrahl, der von einem Spiegel abprallt, hat einen hohen Specular-Anteil. Blankes Metall und Plastik haben ebenfalls einen hohen Wert, stumpfe oder matte Materialien wie Holz dagegen haben einen niedrigen Specular-Wert. Specular Lighting lässt den Betrachter auf dem Gegenstand ein helles Glanzlicht (Specular Highlight) sehen, weil das Licht in Richtung des Betrachters reflektiert wird.

Zur korrekten Berechnung muss die Position der Kamera bekannt sein, um die Highlights angemessen darzustellen. Dementsprechend bewegen sich diese Glanzlichter auch relativ zum Betrachter.

Stencil Buffer

Der Stencil Buffer - Stencil steht für Maske oder Schablone - ist ein zusätzlicher Speicherbereich, mit dem einem Pixel weitere Informationen angehängt werden können. Genauer gesagt ist der Stencil Buffer ein Anhang des Z-Buffers. Das Stenciling ist ein zusätzlicher per-pixel Test, der eng mit dem Tiefentest verbunden ist. Ist der Stencil Buffer nur ein Bit groß, so benutzt dieser nur Information zur Maskierung einer Szene, wie sie zum Beispiel beim Cockpit einer Flugsimulation zum Einsatz kommt. Hier werden nur die Szenen dargestellt, die durch die Fenster sichtbar sind.

Ein 8-Bit-großer Stencil Buffer ist für eine Vielzahl von Effekten zu gebrauchen, darunter volumetrische Schatten in Echtzeit, weiche Schatten und Reflexionen. Angesprochen werden kann der Stencil Buffer mit OpenGL und DirectX ab Version 6.

T-Buffer

Der T-Buffer ist Bestandteil des VSA-100 Grafikprozessors von 3dfx. Sein Haupteinsatzgebiet ist die Verbesserung der Bildqualität. Vereinfacht erklärt ist der T-Buffer eine adaptierte und modifizierte Version einer aufwendigen Technik beim Echtzeitrendering, dem sogenannten Accumulation Buffer. Dieser wurde aus den Nicht-Echtzeit-Techniken des Raytracing entwickelt. Im T-Buffer wird jedes Bildelement mehrmals gerendert und kombiniert, um durch diese Überlagerung die gewünschten Effekte im endgültigen, zusammengesetzten Bild zu erreichen.

Mit dem T-Buffers lassen sich mehrere visuelle Verbesserungen in Echtzeit erreichen. Dazu gehören:

Textur

Eine Textur ist ein Bitmap, das mittels eines Verfahrens namens Texture Mapping auf ein 2D- oder 3D-Objekt aufgebracht wird, um eine realitätsnahe Szene zu erzeugen. In Anlehnung an den Pixel wird ein Punkt der Texturemap als Texel bezeichnet. Der Vorteil einer Textur ist, dass verschiedene Details einer Szene nicht mehr mit vielen einzelnen Flächen dargestellt werden müssen, sondern ein detailliertes Bild über ein einziges Polygon gespannt wird.

Alle modernen 3D-Grafikchips unterstützen Texture Mapping in Hardware, was einen immensen Geschwindigkeitsvorteil hat. Viele Spiele nutzen heute das Multitexturing, bei dem mehrere Texturen übereinander gelegt werden, um den Einfluss von Licht zu simulieren (Lightmaps), spiegelnde Oberflächen darzustellen (Environmental Mapping) oder Einschusslöcher zu zeigen (Decals). Während eine solche Szene früher mehrmals hintereinander gerendert werden musste, können die heutigen 3D-Chips mehrere Texturen parallel verarbeiten. In alten 3D-Spielen wie Doom erschienen die Texturen oft sehr grobkörnig. Dies ist auf das simpelste aller Texture-Mapping-Verfahren, das Point Sampling, zurückzuführen. Hier werden die einzelnen Texel einfach vergrößert, wenn die Textur in ihrer Ausgangsgröße kleiner als die zu mappende Fläche ist. Heute sind daher verschiedene Verfahren der Texturfilterung wie Bilinear, Trilinear und Anisotrop in Gebrauch, die durch verschiedene Interpolationsverfahren die Textur vergrößern und verkleinern können.

Texturkompression

Texturkompression ist ein Verfahren, um den Speicherbedarf von Texturen in Spielen zu verkleinern. Erstmals von S3 mit S3TC (S3 Texture Compression) eingeführt, bringt die Verkleinerung des benötigten Speicherplatzes für Texturen viele Vorteile.

Bei einer Größe von 2048x2048 Punkten bei einer Farbtiefe von 32 Bit würde eine Textur normalerweise 16384 KByte - also etwa 16 MByte - Speicher belegen. Nach einer Kompression mit S3TC verringert sich dieser Bedarf durchschnittlich im Verhältnis 6:1. Bei einer Farbtiefe von 16 Bit beträgt die Kompressionsrate noch 4:1 und bei 8 Bit 2:1. Der größte Nutzen ist, neben einer Verringerung des benötigten Datendurchsatzes, dass sich die maximale Texturgröße deutlich erhöhen lässt. Die bisher gebräuchlichen Texturen mit einer Größe von 256x256 Pixel erscheinen in den Spielen oft verwaschen und undeutlich, wohingegen eine 2048x2048 Punkte große Textur deutlich schärfer ist.

Das von S3 benutzte Kompressionsverfahren teilt eine Textur in 4x4 Punkte große Teile auf, wobei jeder Texel bei undurchsichtigen Texturen mit einem 2-Bit-Code dargestellt wird. Für jeden 4x4 Punkte großen Texelblock gibt es zwei repräsentative Farben im Format RGB565. Mit diesen beiden Farben werden zwei weitere Farben durch gleichmäßige Interpolation bestimmt, woraus sich letztendlich eine 4-Farben-große Look-up-Tabelle ergibt. Jedes Bit des Texelblockes wird anschließend mit dieser Tabelle codiert, woraus sich für die 16 Texel ein Speicherbedarf von 64 Bit ergibt. Wenn die Textur transparente Bereiche enthält, wird ein Eintrag in der Tabelle als Indikator dafür verwendet und die interpolierte Farbe ist einfach der Durchschnitt der Repräsentativfarben. Das Dekodieren erfolgt sehr schnell, weil für jeden mit 2 Bit codierten Texel der entsprechende Wert in der Tabelle gesucht wird.

S3TC ist von Microsoft als DXTC (DirectX Texture Compression) seit DirectX 6 fester Bestandteil der API. 3dfx hat ebenfalls ein Verfahren zur Texturkompression mit Namen FXT1 entwickelt, das deren kommende Chips - neben DXTC - in Hardware unterstützten soll. S3TC und DXTC laufen hardwaremäßig derzeit auf den verschiedenen Savage-Chips von S3 und NVIDIAs GeForce 256. FXT1 bietet Kompressionsraten von etwa 8:1.

Transform and Lighting / T&L

Im Welt-Koordinaten-System einer virtuellen Umgebung sind alle Parameter wie Positionen einzelner Gegenstände, Lichtquellen, Blickwinkel der Kamera, verdeckte Objekte und Schatten festgehalten. Die Aufgabe der Transform-Engine besteht darin, alle diese Daten in das Display-Koordinaten-System umzurechnen. Das heißt, die virtuelle 3D-Welt möglichst realistisch auf den zweidimensionalen Bildschirm zu transformieren. Dies geschieht durch komplexe Matrix- und Vektoroperationen.

Die Lighting-Engine ist mit ähnlichen mathematischen Funktionen versehen wie ihr Transform-Pendant. Sie berechnet in einer 3D-Szene die Länge und Richtung von Vektoren ausgehend von einer Lichtquelle hin zu einem Objekt, sowie die Vektorparameter vom angeleuchteten Objekt hin zu den Augen des Betrachters. Aus den Informationen der Vektoren lassen sich die Lichteffekte auf der Oberfläche des Objekts berechnen.

Beide Vorgänge erfordern rechenintensive Fließkomma-Operationen, die früher die CPU übernehmen musste und die jetzt der Grafikprozessor erledigt.

Trilineares Filtering

Trilineares Filtering, auch als Trilinear MIP-Mapped Interpolation bekannt, ist neben dem bilinearen Filtering ein weiteres Verfahren zur Texturfilterung. Immer mehr Grafikkarten unterstützen diese Funktion hardwarebeschleunigt auch in einen einzigen Renderdurchgang.

Als Grundlage dient bei diesem Verfahren das MIP-Mapping. Dieses löst zwar das Problem des Depth-Aliasing, führt aber wiederum zu einem neuen Artefakt, dem MIP Banding. Es tritt auf, wenn zwei unterschiedlich große MIPMaps der selben Textur aneinander grenzen, was vor allem bei Boden- und Wandtexturen der Fall ist. Die Übergänge zwischen den einzelnen Texturen sind nicht sehr weich und fallen dementsprechend störend auf.

Die trilineare Filterung wurde entwickelt, um den negativen Effekten des MIP-Mapping wie MIP-Banding entgegenzuwirken. Im Grunde entspricht der Algorithmus dem des bilinearen Filtering, nur das zusätzlich noch die nächstgrößere und nächstkleinere MIPMaps in Betracht gezogen werden. Dabei müssen zwar doppelt so viel Daten verarbeitet werden wie bei der normalen bilinearen Filterung, als Ergebnis erhält man dafür aber weiche Übergänge sowohl auf den Texturen selbst als auch zwischen den verschiedenen MIPMaps.

Vertex Skinning

Eine Technik zur Animation von Charakteren in der Computergrafik ist das Vertex Skinning oder Skeletal Animation. Dabei werden die Modelle durch eine hierarchische Folge von Bones definiert, über die ein Basismesh, die Skin, gespannt wird. Wenn die Bones bewegt werden, dann werden die angebrachten Vertices dementsprechend mit bewegt und so das gesamte Drahtgitter verformt.

Diese Berechnungen erfolgten bisher in Software - die gesamte Rechenarbeit bleibt also an der CPU hängen. Die nächsten Generationen der Grafikbeschleuniger, allen voran ATIs Radeon 256, unterstützen diese Operationen in Hardware. Wenn dann noch mehrere der benutzten Deformationsmatrizen pro Bone möglich sind, wird die Illusion immer realistischer.

Z-Buffering / Depth Buffer

Z-Buffering ist ein Algorithmus, bei dem bestimmt wird, welche Objekte - oder Teile davon - sichtbar sind oder davon verdeckt werden. Dafür speichert die Grafikkarte den Z-Wert eines Pixels in einen eigenen Speicher, dem Z-Buffer, auch Depth Buffer genannt.

Die Idee dahinter ist einfach: Liegen mehrere Pixel übereinander und ist der aktuelle Pixel der bisher am Nähesten am Betrachter, dann wird er im Buffer gespeichert. Nur dieses Objekt wird anschließend dargestellt. Je größer der Z-Buffer (8, 16, 24 oder 32 Bit), desto exakter arbeitet der Algorithmus.

Ein weit verbreiteter Irrtum ist die Annahme, dass Z-Buffering die Darstellung beschleunigt, indem es die Anordnung der Polygone überwacht. Das ist deshalb falsch, weil Z-Buffering Pixeldaten vergleicht und nicht Polygondaten. Das letztgenannte fällt in den Bereich des Hidden Surface Removal.