BEI DER DARSTELLUNG VON DREIDIMENSIONALEN GRAFIKEN WIRD MIT ALLEN TRICKS GEARBEITET

04.12.1996
3D-Grafik hat eine einfache Aufgabe, die schwer zu erfüllen ist: Realität möglichst perfekt nachzubilden. Doch mit der Perfektion hapert es derzeit selbst noch bei den High-end-Maschinen, sobald die Realität in Echtzeit nachzubilden ist und Interaktion des Anwenders möglich sein soll. Die Anforderungen an ein optimales System sind möglichst hohe Auflösung, Farbtiefe und Bildwechselrate (Framerate). Technisch sind aber nur Kompromisse möglich, da sich die Rechenleistung schließlich nicht beliebig erhöhen läßt. Alle Algorithmen haben damit letztendlich das Ziel, unzureichende Grafikleistungen zu kompensieren und dem Auge ein Bild zu bieten, daß es als realistisch akzeptiert.Der eigentliche Trick besteht nun darin, die Unterscheidbarkeit einzelner Bildpunkte zu minimieren, ohne einen übermäßigen Eindruck von Unschärfe zu vermitteln. Da die Forderung nach Interaktion Bewegung bedingt und die ohnehin nicht "scharf" wahrgenommen wird, ist ein gewisses Maß an Unschärfe zulässig.

3D-Grafik hat eine einfache Aufgabe, die schwer zu erfüllen ist: Realität möglichst perfekt nachzubilden. Doch mit der Perfektion hapert es derzeit selbst noch bei den High-end-Maschinen, sobald die Realität in Echtzeit nachzubilden ist und Interaktion des Anwenders möglich sein soll. Die Anforderungen an ein optimales System sind möglichst hohe Auflösung, Farbtiefe und Bildwechselrate (Framerate). Technisch sind aber nur Kompromisse möglich, da sich die Rechenleistung schließlich nicht beliebig erhöhen läßt. Alle Algorithmen haben damit letztendlich das Ziel, unzureichende Grafikleistungen zu kompensieren und dem Auge ein Bild zu bieten, daß es als realistisch akzeptiert.Der eigentliche Trick besteht nun darin, die Unterscheidbarkeit einzelner Bildpunkte zu minimieren, ohne einen übermäßigen Eindruck von Unschärfe zu vermitteln. Da die Forderung nach Interaktion Bewegung bedingt und die ohnehin nicht "scharf" wahrgenommen wird, ist ein gewisses Maß an Unschärfe zulässig.

Ein klassisches und stark vereinfachtes Beispiel wäre etwa der Gang durch einen Korridor mit gekachelten und schmutzigen Wänden - ein Szenario, daß viele 3D-Spiele im Programm haben. Der Korridor läßt sich in die drei Bestandteile Geometrie, Beleuchtung und Oberflächen zerlegen. Die Geometrie ist noch der einfachste Datenblock, da sie sich in Koordinaten in einem dreidimensionalen Gitter ausdrücken läßt. Die Oberflächen bergen hingegen schon Gemeinheiten in sich. Unregelmäßigkeiten von Oberflächen, die wir gewohnheitsmäßig erwarten, lassen sich in Koordinatensystemen nur mit extrem hohem Aufwand erreichen, und ohne diese Unregelmäßigkeiten empfinden wir eine Oberfläche als künstlich. Die Lösung liegt im sogenannten Texture-Mapping. Eine Textur (engl. Texture) stellt eine einfache zweidimensionale Fläche beziehungsweise Grafik dar, die der lotrechten Sicht auf die Oberfläche bei gleichmäßiger Beleuchtung entspricht. Bei der perspektivischen Darstellung muß diese Oberfläche auf die entsprechenden Koordinaten projiziert werden. Und hier wird's schwierig: Durch die Perspektive verkürzen oder verlängern sich die Kanten der Oberfläche und die ursprünglich in rechteckigem Format gespeicherte Oberfläche muß in dieser verzerrten Form neu berechnet werden. Ein ungefiltertes Texture-Mapping würde Details verschlucken und bei Bewegung flimmernde Bildpunkte erzeugen. Das bi-lineare Filtern beseitigt bereits einen Teil dieser Effekte durch Korrekturen anhand der in der Textur benachbarten Bildpunkte. Das tri-lineare Filtern geht einen Schritt weiter und berechnet schon vor dem eigentlichen Mapping eine Textur, die der geforderten Auflösung näher kommt und damit im Ergebnis weniger fehlerbehaftet erscheint. Für einen realistischen Eindruck ist zudem eine perspektivische Korrektur beim Texture-Mapping notwendig, da die einfache Projektion auf die Koordinaten sichtbare Fehler erzeugen kann, die den perspektivischen Eindruck stören.

Last but not least spielt die Beleuchtung eine wesentliche Rolle. Zu berücksichtigen sind dabei sowohl Lichtquellen - Bildpunkte in ihrer Umgebung müssen aufgehellt werden - und unsere Gewohnheit, weiter entfernte Objekte dunkler wahrzunehmen. Beim strahlend blauem Himmel ist es hingegen umgekehrt - der wird zum Horizont hin heller.

Algorithmen wie das fogging etwa verschaffen uns den Eindruck eines dunstigen Raumes, in dem dargestellte Bildpunkte in Abhängigkeit von ihrer Entfernung zum Betrachter mit einem hellen Grauton vermischt werden.

Hier kommt dann auch der Z-Buffer ins Spiel, der mit einem Unterschied eine Kopie des sichtbaren Bildes darstellt: Statt der Farbwerte im Bildspeicher, speichert der Z-Buffer die Entfernung eines Pixels vom Betrachter. Typischerweise ist der Z-Buffer genauso groß wie der Bildspeicher.

Ein kleiner Trick für flüssige Animationen besteht darin, einen zweiten Bildspeicher zu verwenden. In diesem wird das nächste darzustellende Bild aufgebaut und dann nahezu verzögerungsfrei gegen das vorher dargestellte Bild ausgetauscht. Der erste und zweite Bildspeicher wird auch als Front- und Back-Buffer bezeichnet. Selbstverständlich ist der Back-Buffer genauso groß wie der Front-Buffer.

Bei 640 x 480 Bildpunkten und 16 Bit Farbtiefe stellt sich das dann so dar: 3 Buffer mit je 307.200 Bildpunkten und 614.400 Bytes Speicherbedarf. Für jedes darzustellende Bild müssen 614.400 Punkte (Back- und Z-Buffer) berechnet und meistens zwischen 10 und 30 Texturen gemappt werden. Für eine flüssige Animation sollte ein 3D-Prozessor mindestens 24 Bilder pro Sekunde berechnen können.

Zur Startseite