Man sagt, der Teufel stecke im Detail.
Das wird jeder bestätigen können, der
realistische 3D-Objekte und Umgebungen
erstellt. Für ein natürlich wirkendes
Objekt müssen unendlich viele unscheinbare
Einzelheiten berücksichtigt werden.
Die Art, wie strahlendes Licht von einer
glänzenden Oberfläche reflektiert wird.
Die Art, wie sich das eigene Gesicht
in einem Messingtürgriff spiegelt. Die
feinen Schatten, die jedes Objekt durch
jede Lichtquelle wirft. Die feinen,
filigranen Strukturen von Holz, Textilien
oder Stein. Diese Details mögen unwichtig
erscheinen, aber sie fallen gerade dann
auf, wenn sie fehlen.
3D-Spiele
werden immer detailreicher. Der Aufwand
zur Berechnung der Bildpunkte einer
Szene wurde beträchtlich gesteigert.
Leider verursachen derart feine Details
so hohe Leistungseinbußen, dass sie
kaum dargestellt werden können. Mit
der einzigartigen Pixel-Tapestry-Architektur
von ATI sind nun endlich sehr detailreiche
3D-Objekte und -Umgebungen ohne Performance-Verluste
realisierbar.
PIXEL TAPESTRY™-Architektur
Die
neuen Grafikkarten von ATI verwenden
das derzeit modernste und flexibelste
Textursystem. Pixel Tapestry ist die
erste und einzige Grafik-Architektur,
die über drei unabhängige Textur-Einheiten
in jeder Rendering-Pipeline verfügt.
Mit den neuen Möglichkeiten dieser einzigartigen
Architektur können 3D-Oberflächen realistischer
und detailreicher dargestellt werden
als jemals zuvor.
Drei gefilterte Texturen je Pixel -
Bei voller Geschwindigkeit
Gegenwärtige
Grafikprozessoren verfügen nur über eine
oder zwei Textureinheiten je Rendering-Pipeline.
Sie können in einem Arbeitstakt maximal
zwei Texturen auf ein Pixel anwenden,
was bei einer Textureinheit je Pipeline
sogar zwei Rendering-Pipelines für ein
Pixel beansprucht. Damit sinkt die Füllrate
dieser Produkte glatt auf die Hälfte,
sobald zwei Texturen je Pixel verwendet
werden. Eine dritte Textur kann erst im
nächsten Arbeitstakt aufgetragen werden,
was die Füllrate nochmals um die Hälfte
reduziert. Damit brauchen die meisten
aktuellen Grafikchips für drei Texturen
je Pixel die vierfache Zeit. Selbst Produkte
mit zwei Textureinheiten je Pipeline brauchen
für drei Texturen doppelt so lange wie
für eine Textur. Die zur Ausgabe eines
Pixels benötigte Anzahl an Arbeitsschritten
wird daher für eine angemessene Grafikleistung
immer wichtiger.

Zu
den am häufigsten genannten Faktoren für
die Beurteilung der Grafikleistung zählt
die "Maximale Füllrate". Der Wert gibt
die Anzahl Pixel an, die ein Grafiksystem
maximal pro Sekunde auf dem Bildschirm
darstellen kann. Die maximale Füllrate
wird jedoch unter der Annahme bestimmt,
dass jedes Pixel mit nur einer ungefilterten
Textur versehen ist. Tatsächlich verwenden
3D-Spiele bereits heute sehr häufig gefilterte
Mehrfachtexturen. Aus diesem Grund verlieren
Grafikchips ohne vollwertiges Multi-Texturing
sehr schnell an Leistung, sobald mehrere
Texturen für einzelne Pixel eingesetzt
werden. Das folgende Diagramm veranschaulicht,
dass Grafikchips mit mehreren Textureinheiten
je Rendering-Pipeline auch bei vielen
Texturen je Pixel höchste Leistung erreichen.

Und
als ob das nicht schon schlimm genug wäre,
verschärfen Probleme mit der Speicherbandbreite
das Ganze noch weiter. Für jede zusätzliche
Textur muss ein Pixel zunächst in den
Frame-Buffer geschrieben und dann von
dort wieder gelesen werden, um es mit
der nächsten Textur versehen zu können.
Die so vergeudete Speicherbandbreite könnte
besser darauf verwendet werden, das nächste
Pixel in der Pipeline darzustellen.
Der
größte Vorteil von Pixel Tapestry ist
die Möglichkeit, auf jedes Pixel einer
Szene drei gefilterte Texturen anzuwenden,
ohne Leistung zu verschenken. Mit drei
Textureinheiten je Rendering-Pipeline
können zusätzliche Texturen im selben
Arbeitstakt auf ein Pixel angewendet werden,
ohne eine zweite Rendering-Pipeline zu
beanspruchen oder Speicherbandbreite durch
unnötige Zugriffe auf den Frame-Buffer
zu verschwenden.

Die
meisten aktuellen 3D-Spiele nutzen das
Multitexturing bereits jetzt sehr intensiv.
Die eigentliche Textur eines Objekts kann
mit Light-Maps, Shadow-Maps, Reflexionen,
Bump-Maps, Specular-Maps, Detailtexturen
usw. überlagert werden. Bei den zur Zeit
leistungsstärksten Grafikprozessoren verdoppelt
jede zusätzliche Textur die Berechnungszeit.
Jede zusätzliche Textur lässt die Oberfläche
detailreicher und realistischer erscheinen,
doch mehr als ein oder zwei weitere Texturen
bremsen selbst den schnellsten Chip aus.
Mit Pixel Tapestry bedeuten dagegen auch
zwei zusätzliche Texturen keinen merklichen
Leistungsverlust.
3D-Texturen
3D-Texturen
sind eine vielversprechende neue Funktion
der Pixel Tapestry-Architektur von ATI.
Obwohl Polygone zur Darstellung von 3D-Objekten
eingesetzt werden, ist ein Polygon selbst
eine 2D-Oberfläche. Daher verwendet jede
herkömmliche Grafikhardware zweidimensionale
Texturen für diese Flächen. Diese 2D-Texturen
werden wie Aufkleber an den Polygonen
angebracht. Eine 3D-Textur ist ein Körper
aus 3D-Punkten (Texel), so wie eine 2D-Textur
eine Fläche aus 2D-Punkten (Pixel) ist.
Obwohl diese Textur theoretisch Raum beansprucht,
ist sie nur dort sichtbar, wo sie Polygone
schneidet. 3D-Texturen
sind sehr vielseitig einsetzbar, um 3D-Szenen
realistischer zu gestalten. Beispielsweise
kann eine transparente oder durchscheinende
Kugel um eine Lichtquelle gelegt werden,
um den Lichthof um eine Lampe darzustellen.
Die Textur wäre im Zentrum der Kugel am
hellsten und würde mit zunehmender Entfernung
von der Lichtquelle immer dunkler erscheinen.
Jede diese Kugel durchdringende Polygonoberfläche,
z.B. von Mauern, Objekten oder Spielfiguren,
würde entsprechend der Entfernung von
der Lichtquelle realistisch beleuchtet.
Dieses Verfahren zur Darstellung dynamischer
Lichtquellen ist wesentlich einfacher,
eleganter und flexibler als die zur Zeit
häufig eingesetzten Light-Maps. Diese
Texturen können auch ohne Weiteres in
Echtzeit verändert werden, etwa um flackernde
oder pulsierende Lichtquellen darzustellen.
Damit können auch solche Lichtquellen
genau dargestellt werden, die eine räumliche
Ausdehnung haben, also nicht punktförmig
sind. Die folgende Abbildung zeigt den
Unterschied zwischen einer mit 3D-Texturen
modellierten zylindrischen Lichtquelle
und einer punktförmigen Lichtquelle in
einer Szene. Beachten Sie die weichen
Schatten im rechten Bild:

3D-Texturen
können außerdem sehr effektvoll für dynamische
oder prozedural erzeugte Körper verwendet
werden. Stellen Sie sich einen Würfel
aus Marmor vor. Der Würfel könnte als
einfaches geometrisches Modell mit einer
würfelförmigen 3D-Textur definiert sein.
Wenn aus diesem Modell nun ein Stück herausgeschnitten
wird, wird durch die 3D-Textur die Maserung
des Marmorwürfels an den Schnittflächen
dennoch korrekt dargestellt. Mit herkömmlichen
2D-Texturen müsste man neue Texturen erzeugen
oder vordefinierte Texturen verwenden,
um diesen Effekt zu erzielen. Die folgende
Abbildung zeigt, wie diese Technik für
Visualisierungen in der Medizin eingesetzt
werden kann:

Diese
Beispiele lassen die Vorteile von 3D-Texturen
nur erahnen. Die Spieleentwickler werden
sich sicher noch ganz andere Anwendungen
für diese Funktion einfallen lassen. OpenGL®
1.2 unterstützt bereits jetzt 3D-Texturen,
und DirectX® wird diese Funktion wahrscheinlich
auch bald beherrschen.
Bump Mapping
Bump-Mapping
bezeichnet eine Reihe von Verfahren, mit
denen dreidimensionale Oberflächendetails
mit Hilfe von Multitexturing simuliert
werden, ohne die Geometrie des Objektes
zu verändern oder zusätzliche Polygone
einzusetzen. Dieser Effekt kann mit drei
verschiedenen Verfahren erreicht werden,
von denen jedes für einen bestimmten Anwendungsfall
geeignet ist. Bisherige Grafikarchitekturen
unterstützen eines oder zwei dieser Verfahren,
während die Pixel Tapestry-Architektur
von ATI alle drei beherrscht. So kann
für jede Anwendung das am besten geeignete
Verfahren gewählt werden.
Emboss
Die
einfachste und leider auch am wenigsten
realistische Methode ist das sogenannte
Emboss-Bump-Mapping. Für diesen Effekt
wird eine als "Höhenfeld" (Height-Map)
bezeichnete Textur eingesetzt. Die Farbe
jedes Texels dieses Feldes stellt die
jeweilige Bump-Höhe dar. Die Bump-Map
wird erzeugt, indem diese Textur um einen
oder mehrere Pixel gegen die Lichtquelle
verschoben und vom Original abgezogen
wird. Diese Bump-Map wird dann mit der
Ausgangstextur kombiniert. Das Emboss-Bump-Mapping
ist am einfachsten zu implementieren,
da es im Gegensatz zu anderen Verfahren
nicht den Einsatz spezieller Texturformate
erfordert.
Dot Product 3
Dot
Product 3 ist ein genaueres und flexibleres
Bump-Mapping-Verfahren. Es arbeitet mit
einer speziellen Bump-Map-Textur. Zu jedem
Pixel der Textur existiert ein 3D-Vektor,
der die Neigung der Oberfläche darstellt.
Zu jedem Pixel der Bump-Map wird dann
ein weiterer Vektor erzeugt, der auf die
Lichtquelle zeigt. Anhand des Skalarprodukts
(Dot Product) dieser beiden Vektoren wird
dann bestimmt, in welche Richtung das
Licht von der Oberfläche reflektiert wird.
Mit dieser Methode erhält man eine pixelgenaue
Bump-Map, durch die die Oberfläche bei
Lichteinfall sehr detailliert erscheint.
Environment Mapped Bump Mapping
(EMBM)
Das
detailreichste und flexibelste Verfahren
ist das Environment-Mapped-Bump-Mapping
(auch EMBM oder Perturbation Bump Mapping).
Emboss- und Dot Product 3-Bump-Mapping
sind gut geeignet für matte Objekte, können
aber kaum auf glänzende oder reflektierende
Oberflächen wie Metall, Kunststoff oder
Flüssigkeiten angewendet werden. Es ist
mit ihnen außerdem nicht möglich, die
Height-Map in Echtzeit zu verändern, um
beispielsweise Kräuselungen im Wasser
darzustellen. EMBM bietet diese Möglichkeiten,
erfordert aber mehr Rechenleistung und
weitere Texturen. Ebenso wie das Dot Product
3-Bump-Mapping verwendet EMBM spezielle
Texturen als Bump-Maps. Zusätzlich wird
eine eigene Environment Map für die Reflektionen
benötigt. Mit dieser Textur wird die Oberfläche
"gestört", bevor sie mit der eigentlichen
Textur kombiniert wird, damit sie reflektierend
und gleichzeitig uneben wirkt.
Die
folgende Abbildung zeigt einen Vergleich
der drei von Pixel Tapestry unterstützten
Bump-Mapping-Verfahren:

Detaillierte
Texturen sind nur der erste Schritt
zu lebensecht dargestellten Objekten.
Texturen können auf viele verschiedene
Arten auf eine Oberfläche aufgebracht
werden. Mit jeder dieser Methoden kann
ein bestimmter Effekt erreicht werden.
Diese Effekte werden mit Texturtransformationen
erreicht. Diese Transformationen verwenden
verschiedene mathematische Formeln,
um Texturkoordinaten zu erzeugen. Alle
unten aufgeführten Techniken könnten
mit reiner Software ausgeführt werden,
verschlängen aber soviel Rechenzeit,
dass die Systemleistung einbrechen würde.
Daher werden sie in aktuellen Spielen
kaum eingesetzt. Die Pixel-Tapestry-Architektur
von ATI löst dieses Problem durch ihre
Hardwarebeschleunigung für Texturtransformationen.
Mit Pixel Tapestry können diese wunderschönen
Funktionen endlich praktisch eingesetzt
werden!
Environment-Mapping
Environment-Mapping
verwendet Texturen, in denen sich die
Umgebung spiegelt. Mit diesen Texturen
kann jeder Oberfläche ein realistischer
Spiegeleffekt verliehen werden. Es gibt
mehrere Variationen dieser Technik, von
denen die gebräuchlichsten unten erläutert
werden. OpenGL® unterstützt Spherical-,
Dual-Paraboloid- und Cubic-Environment-Mapping,
während DirectX® 7 nur das Cubic-Verfahren
bietet. Pixel Tapestry von ATI bietet
Hardwarebeschleunigung für alle Arten
Environment-Mapping.
Spherical Environment Mapping
Das
Spherical Environment Mapping verwendet
eine einzige Textur als Spiegeltextur. Ein
Beispiel zur Erklärung des Verfahrens: Stellen
Sie sich vor, Sie stehen still und bewegen
nur den Kopf. Je nachdem, in welche Richtung
Sie schauen, sehen Sie ein anderes Bild.
Stellen Sie sich nun vor, Ihr Sichtbereich
würde auf eine Kugel aufgemalt, in deren
Zentrum Sie stehen. Wenn dieses Bild flach
ausgebreitet würde, wäre es wie eine Spherical-Spiegeltextur
oder eine Environment-Map. Diese Environment-Map
kann um dreidimensionale Objekte gelegt
werden, um realistische Reflexionen zu erzeugen,
wie die folgende Abbildung zeigt:

Das
größte Problem ist der zwangsläufig feste
Standort des Betrachters. Wenn der Betrachter
(in der Mitte der Kugel) sich bewegt, muss
die gesamte Textur neu berechnet werden.
Und wie bei jeder anderen Projektion einer
Kugel können sich deutliche Störungen in
der Reflexion zeigen, da die Oberfläche
einer Kugel sich nur schwierig auf eine
ebene Fläche abbilden lässt. Spherical Environment
Mapping eignet sich gut für Glanzlichter
auf unbeweglichen, glänzenden Objekten,
und es kann gut mit Environment Mapped Bump
Mapping kombiniert werden. Sein Speicherbedarf
ist von allen Environment Mapping-Verfahren
der geringste.
Dual-Paraboloid Environment Mapping
Das
Dual-Paraboloid Environment Mapping ist
komplexer als das Spherical-Verfahren und
verwendet zwei Texturen als Environment-Maps,
von denen eine die Umgebung vor dem Objekt
und die andere die Umgebung hinter dem Objekt
darstellt. Die Texturen sind quadratisch,
werden aber mathematisch in die Form einer
Halbkugel umgewandelt. Der Vorteil des Dual-Paraboloid
Environment Mapping ist seine Unabhängigkeit
vom Standort des Betrachters. Daher müssen
die Spiegeltexturen nicht neu erstellt werden,
wenn der Betrachter sich bewegt, wie dies
beim Spherical Environment Mapping der Fall
ist. Stattdessen werden die Texturkoordinaten
aktualisiert und die Textur neu aufgetragen.
Der Nachteil besteht darin, dass die Texturen
aufgrund der aufwendigen Umwandlung nicht
so schnell erzeugt und aktualisiert werden
können, wie dies beim Cubic Environment
Mapping der Fall ist. Das Dual Paraboloid-Verfahren
benötigt weniger Speicherplatz als das Cubic-Verfahren
und eignet sich daher gut für komplexe Reflexionen,
die nicht dynamisch aktualisiert werden
müssen.

Cubic Environment Mapping
Das
Cubic Environment Mapping ist das flexibelste
und gleichzeitig komplexeste Environment
Mapping-Verfahren. Es verwendet sechs Environment-Maps,
die jeweils eine Seite eines Würfels darstellen,
in dessen Zentrum sich der Betrachter befindet.
Siehe folgende Abbildung:

Dieses
Environment-Mapping-Verfahren hat einige
Vorteile. Die verwendeten Spiegeltexturen
sind einfache Quadrate und daher leicht
in Echtzeit zu erstellen und zu aktualisieren.
Das Verfahren ist ebenfalls unabhängig von
der Position des Betrachters, so dass die
Spiegeltexturen nur aktualisiert werden
müssen, wenn die Szene sich ändert. Der
Nachteil ist der hohe Speicherbedarf für
die sechs Spiegeltexturen. Jedenfalls ermöglicht
es schöne Effekte, die vorher undenkbar
waren - So können Sie beispielsweise sehen,
wie Ihr eigenes Spiegelbild über ein Objekt
wandert.
Projective-Texturen
Wie
bereits erwähnt, sind normale 2D-Texturen
wie Aufkleber auf einer Fläche aus Polygonen.
Texturtransformationen ermöglichen es nun,
Texturen auf eine Oberfläche zu projizieren,
so wie ein Diaprojektor ein Bild auf eine
Leinwand wirft. Eine Textur kann von jedem
Punkt aus "geworfen" werden und ist dann
auf den Polygonen zu sehen, auf die ihr
Bild trifft. Die folgende Abbildung verdeutlicht
den Unterschied. Beachten Sie, wie die Standardtextur
links auf den Vorhang "geklebt" wird, während
die projizierte Textur rechts quadratisch
bleibt:

Projective-Texturen
funktionieren wie Spotlights, verfügen aber
über alle Eigenschaften von Texturen, u.
a. können sie gefiltert und animiert werden.
So kann man sich beispielsweise einen Projektor
vorstellen, der einen als animierte Textur
oder als Videotextur vorliegenden Film an
eine Wand projiziert. Wenn nun eine Spielfigur
zwischen der Wand und dem Projektor hindurchgeht,
erscheint ein Teil des Films auf der Figur
und die Figur wirft einen Schatten an die
Wand. Zu den interessantesten Anwendungsfällen
für Projective-Texturen zählt das Shadow-Mapping,
das weiter unten erläutert wird.
Priority Buffers
Die
Unterstützung für Priority-Puffer ist eine
weitere Innovation der Pixel-Tapestry-Architektur.
Ein Priority-Puffer sortiert Polygone und/oder
Objekte nach der Entfernung vom Standort
der Spielfigur. Ein sehr nahes Objekt oder
Polygon erhält die Nummer 1, das nächste
die Nummer 2 usw. Dieses Verfahren ähnelt
dem eines Z-Puffers oder Tiefenpuffers,
mit dem Unterschied, dass die Objektanordnung
dort wichtiger ist als die Entfernung vom
Betrachter. Priority-Pufferung kann per
Software ausgeführt werden, was aber für
komplexe 3D-Szenen zu langsam wäre. Pixel
Tapestry ist die erste Grafik-Architektur
mit Hardwarebeschleunigung für Priority-Puffer.
Priority-Puffer können vielseitig eingesetzt
werden. Sehr nützlich sind sie vor Allem
in Kombination mit Projective-Texturen für
den Einsatz von Shadow-Mapping. Diese brandaktuelle
Funktion wird im Folgenden beschrieben.
Shadow Mapping
Schatten
sind ein sehr wichtiger Bestandteil eines
3D-Bildes. Sie lassen Lichteffekte realistischer
erscheinen und verleihen einen gewissen
Tiefeneindruck. Die Erzeugung korrekter
3D-Schatten kann, vor allem in dynamischen
Umgebungen mit vielen beweglichen Objekten
und Lichtquellen, sehr schwierig sein.
Aktuelle
Spiele verwenden in der Regel höchstens
vorberechnete Schatten. Diese sehen sehr
realistisch und natürlich aus, haben aber
den Nachteil, dass sie nicht mit beweglichen
Lichtquellen oder variierenden Charaktermodellen
eingesetzt werden können. Einige Spiele
verwenden ein moderneres Verfahren zur Erzeugung
volumetrischer Schatten. Dazu müssen zusätzliche
Polygone erzeugt werden, die hinter einem
Charakter oder einem Objekt einen Schattenumriss
bilden. Aus diesem Schattenumriss wird dann
mit einen Stencil-Puffer ein dynamischer
Schatten erzeugt. Diese Schatten sind deutlich
flexibler als vorberechnete Schatten, haben
aber einige Nachteile. Jeder Schatten erzeugt
zusätzliche Polygone, die transformiert
und verarbeitet werden müssen und so die
Grafikleistung beeinträchtigen. Sehr komplexe
Sonderfälle wie Objekte, die Schatten auf
sich selbst werfen, etwa der Arm einer Figur,
der einen Schatten auf den eigenen Körper
wirft, oder Oberflächen mit Rundungen können
mit diesem Verfahren praktisch nicht berücksichtigt
werden.
Shadow
Mapping ist eine wesentlich einfachere und
elegantere Lösung, die mit Hilfe von Priority-Puffern
umgesetzt werden kann. Die Szene wird aus
Sicht der Lichtquelle so im Priority-Puffer
abgebildet, dass das dem Licht am nächsten
gelegene Objekt die höchste Priorität bekommt,
das nächste Objekt die zweithöchste usw.
Die niedrigste Priorität erhalten Hintergrundobjekte,
die keinen Schatten werfen. In der Reihenfolge
des Priority-Puffers werden dann für alle
Objekte Schattentexturen erstellt, indem
der Umriss der Objekte gerendert wird. Die
Schattentextur wird schließlich von der
Lichtquelle in die Szene projiziert und
ergibt dann zusammen mit Light-Maps und
den eigentlichen Texturen der Oberflächen
das endgültige Bild. Dieser Vorgang wird
in der folgenden Abbildung verdeutlicht:

Das
Shadow Mapping hat gegenüber herkömmlichen
Verfahren viele praktische Vorteile. Es
erfordert wesentlich weniger Rechenleistung
als volumetrische Schatten, da es statt
vieler Polygone nur eine Textur je Lichtquelle
benötigt. Mit hardwarebeschleunigten Texturtransformationen
sind mehrere bewegliche Lichtquellen kein
Problem mehr und die Schatten sind auch
auf anderen Objekten zu sehen. Mit dem Priority-Puffer
ist es auch wesentlich einfacher, Objekte
zu schaffen, die auch auf sich selbst Schatten
werfen.
Range-Based Fog (entfernungsabhängiger
Nebel)
Nebel
ist ein schöner und sehr vielseitig einsetzbarer
Effekt. Die meisten Grafikchips verwenden
ein vereinfachtes Verfahren, bei dem die
Dichte des Nebels direkt von der Tiefe des
Objektes abhängt, also der Entfernung von
der "Ebene" des Betrachters. Die Pixel-Tapestry-Architektur
stellt Nebel realistischer dar, indem sie
die Dichte des Nebels von der Entfernung
des Objekts abhängig macht, also der direkten
Entfernung zwischen dem Betrachter und dem
Objekt. Die folgende Abbildung veranschaulicht
die Vorteile von entfernungsabhängigem Nebel:

Verbesserte Anisotropische
Filterung
Die
Texturfilterung ist eine wichtige Technik,
die in den letzten Generationen der 3D-Grafikbeschleuniger
eingeführt wurde. Obwohl 3D-Objekte aus
Polygonen aufgebaut sind und somit beliebig
vergrößert werden können, handelt es sich
bei den auf den Oberflächen verwendeten
Texturen um Bitmaps mit einer festen Auflösung.
Ohne Filterung wird die Farbe eines Pixels
der Oberfläche aus einem einzelnen Texel
bestimmt. Dieses Verfahren wird als Point
Sampling bezeichnet. Je näher man einer
mit Point Sampling texturierten Oberfläche
in einer 3D-Umgebung kommt, desto mehr verliert
die Textur an Details. Die Oberfläche erscheint
eckig und unschön. Das erste Filterverfahren,
mit dem versucht wurde, dieses Problem zu
lösen, war die bilineare Filterung. Dabei
werden jeweils 2 vertikal und 2 horizontal
benachbarte Texel, also insgesamt 4 Texel,
anhand eines gewichteten Mittelwerts überblendet,
um die Farbe eines Pixels zu bestimmen.

Mit
der Bilinearen Filterung kann die Bildqualität
bereits deutlich verbessert werden, solange
die verwendeten Texturen zumindest annähernd
quadratisch sind. Dieses Verfahren ist allerdings
weniger geeignet für Oberflächen, die in
einem steilen Blickwinkel zum Betrachter
stehen. In diesem Fall muss die Textur in
eine Richtung gestreckt werden, was die
Auflösung der Textur in dieser Richtung
gegenüber der anderen stark reduziert. Das
führt dazu, dass die Textur in der Nähe
des Betrachters scharf und detailliert erscheint,
während weiter entfernte Bereiche unscharf
wirken. Die Lösung für diese Situation bietet
eine modernere Art der Filterung, die anisotropische
Filterung. Im Gegensatz zur bilinearen Filterung
werden dabei mehr Texel für die Richtung
ausgewertet, in die die Textur gestreckt
wurde, um keine Details zu verlieren.

Die
Wirkung einer anisotropischen Filterung
wird bestimmt durch die maximale "Anisotropie",
die sie zulässt. Dieser Wert bestimmt, wie
weit eine Textur gestreckt werden kann,
ohne dass die Bildqualität abnimmt. Die
Pixel-Tapestry-Architektur lässt erstmals
ein Anisotropieverhältnis von 16:1 zu und
damit wesentlich mehr als jedes andere Grafikprodukt.
Dadurch bleiben Texturen immer scharf und
klar, egal in welchem Winkel der Betrachter
sie sieht. Besonders wichtig ist dies bei
Text, wie die folgenden Beispiele verdeutlichen:

Antialiasing-Effekte
In
letzter Zeit wurden Antialiasing-Effekte
wie Full-Scene-Antialiasing, Bewegungsunschärfe,
Feldtiefe oder weiche Reflektionen oft als
Weg zu realistischeren 3D-Szenen gesehen.
Alle Effekte nutzen dafür einen Akkumulationspuffer,
in dem Teile der Szene weichgezeichnet oder
geglättet werden. Diese Effekte sind zwar
der Grafikleistung abträglich, aber für
einige Anwendungen wie niedrigauflösende
Displays und 3D-Schnitte sowie begrenzte
Spezialeffekte durchaus von Interesse. Daher
unterstützt die Pixel-Tapestry-Architektur
von ATI alle diese Effekte.
Full-Scene-Antialiasing
Der
Begriff "Antialiasing" beschreibt einige
visuelle Phänomene, die durch niedrigauflösende
Anzeigegeräte verursacht werden. Dazu zählen
die zackigen "Treppeneffekte" an Objektkanten
sowie Durchscheinen und Aufblitzen bei schmalen
Objekten, die aus der Ferne betrachtet werden.
Je geringer die Auflösung der Ausgabe, desto
stärker sind diese Effekte ausgeprägt. Als
räumliches Antialiasing bezeichnet man eine
Reihe von Verfahren zur Beseitigung dieser
Effekte. Viele der derzeitigen Grafik-Chips
wenden eine begrenzte Form des räumlichen
Antialiasing - das sogenannte "Edge Antialiasing"
- an, bei der über einen Algorithmus versucht
wird, in einer Szene stark betonte Kanten
zu finden und diese zu glätten. Leider erfordert
diese Methode einen beträchtlichen Aufwand
an Vorberechnungen und Sortieren von Polygonen,
so dass sie für die meisten Anwendungen
nicht in Frage kommt.
Besser
eignet sich die effektive und flexible Technik
des Full-Scene-Antialiasing. Statt durch
Erkennung der stark betonten Kanten in einer
Szene werden hierbei Aliasing-Artefakte
durch das sogenannte Supersampling verringert
und beseitigt. Die Szenen werden in einer
höheren Auflösung als der Ausgabeauflösung
berechnet. Danach wird das Bild gefiltert
und auf die gewünschte Auflösung skaliert.
Das Ergebnis ist eine größere Detailgenauigkeit
im ausgegebenen Bild, wodurch die Aliasing-Artefakte
vermindert oder beseitigt werden.
Diese
Methode verbessert zwar die Qualität von
3D-Bildern mit niedriger Auflösung, allerdings
müssen immer mehrere Versionen eines Bildes
gerendert werden (Erhöhung der Füllratenanforderungen
um das vierfache oder mehr), wodurch das
Verfahren für höhere Auflösungen unbrauchbar
wird. Die diesjährigen Grafik-Chips werden
3D-Spiele mit glatten hochwertigen Bildern
bei Auflösungen von 1280x1024 und höher
ermöglichen. Bei diesen Auflösungen ist
es jedoch schwer, Aliasing-Artefakte zu
erkennen und viele Benutzer ziehen daher
eine verbesserte Bildschärfe und -qualität
einem geglätteten Bild mit niedriger Auflösung
vor.
Bewegungsunschärfe
Es gibt einen großen Unterschied zwischen
bewegten, in Echtzeit gerenderten, 3D-Bildern
und bewegten Bildern, die über eine Videokamera
auf Film aufgenommen werden. Im Falle der
Videokamera wird ein Bild erzeugt, indem
eine Blende in einem Objektiv für kurze
Zeit geöffnet und das Filmmaterial belichtet
wird. Bewegt sich ein Objekt vor der geöffneten
Blende, erzeugt diese Bewegung auf dem Film
einen Unschärfeeffekt. In den einzelnen
Bildern des Films ist diese Unschärfe klar,
jedoch ist sie nicht zu sehen, wenn der
Film auf einer Leinwand oder einem Fernseher
abgespielt wird. In gerenderten 3D-Bildern
erscheinen bewegte Objekte nicht unscharf.
Egal wie schnell sie sich bewegen, sie bleiben
immer scharf. Durch die Unschärfe wirken
Bewegungen auf Fernsehern und Leinwänden
glatter und flüssiger als auf einem PC-Monitor.
Die Monitore müssen dies durch wesentlich
höhere Frame-Raten ausgleichen (mindestens
60 Bilder pro Sekunde, verglichen mit 24
Bildern pro Sekunde bei einem Filmprojektor).
Der
weiche Übergang zwischen den Bildern kann
ohne eine Erhöhung der Frame-Rate nur durch
die sogenannte Bewegungsunschärfe (auch
temporäres Antialiasing) simuliert werden.
Hierbei werden Kopien aufeinanderfolgender
Bilder in einem Akkumulationspuffer gespeichert
und zu einem Einzelbild zusammengefügt,
in dem das bewegte Objekt in Bewegungsrichtung
weichgezeichnet wird. Je mehr Kopien gespeichert
werden, desto besser der Effekt. Die Abbildung
unten zeigt, wie bei der Pixel-Tapestry-Architektur
von ATI von den drei Textureinheiten ein
Bewegungsunschärfeeffekt von 4 Frames erzeugt
wird.

Bewegungsunschärfe
So
wie Full-Scene-Antialiasing zur Qualitätsverbesserung
niedrigauflösender Bilder verwendet wird,
können mit der Bewegungsunschärfe niedrige
Frame-Raten ausgeglichen werden. Je höher
die Frame-Raten, desto weniger fallen die
Unschärfeeffekte ins Auge. Bei Raten von
60 und mehr Frames pro Sekunde fängt das
menschliche Auge sogar ganz automatisch
an, einen unscharfen Übergang von aufeinanderfolgenden
Bildern wahrzunehmen. Auch hier ziehen die
meisten Benutzer eine durch hohe Frame-Raten
gewährleistete genaue Steuerung und schnelles
Ansprechen den niedrigen Frame-Raten mit
Bewegungsunschärfe vor.
Weiche Reflektionen und weiche
Schatten
Unterschiedliche
Materialien haben verschiedenste Reflektionseigenschaften
von matt (keine Reflektion) bis spiegelnd
(fast vollständige Reflektion). Viele Materialien
wie Kunststoffe oder lackierte Oberflächen
reflektieren zwar, erzeugen aber nur ein
unscharfes Teilbild der Umgebung. Zur realistischen
Reproduktion dieses Effekts können die Reflektionen
geglättet oder weichgezeichnet werden. Das
Ergebnis ist eine "weiche" Reflektion. Ebenso
produzieren die meisten Lichtquellen keine
Schatten mit scharfen Kanten. Mit Hilfe
des Antialiasing lassen sich auch realistischere
Schatteneffekte erzielen.

Diese
Effekte verwenden einen Akkumulationspuffer,
in dem mehrere Kopien der Reflektion oder
des Schattens eines Objektes gespeichert
werden, die dann zum endgültigen Bild zusammengefügt
werden. Wie auch bei den anderen Glättungseffekten
gilt auch hier: je mehr Kopien, desto besser
das endgültige Bild. Allerdings müssen dafür
geringere Leistung und niedrigere Frame-Raten
in Kauf genommen werden. Genau betrachtet
sorgen diese unscheinbaren Effekte für eine
deutlich bessere 3D-Qualität bei akzeptablen
Frame-Raten.
Feldtiefe und Fresnel-Effekte
Eine
weitere Glättungsanwendung ist das sogenannte
fokussierte Antialiasing, bei der die Unschärfe
in Teilen des Bildes von der Entfernung
des Betrachters abhängt. Dadurch lassen
sich Tiefenschärfeneffekte simulieren. Auch
der Fresnel-Effekt lässt sich reproduzieren.
Hierbei erscheint ein Bild als betrachte
man es durch Mattglas.
Programmierbare Pixelschattierung
Wie
sie an der Menge der bisher beschriebenen
Themen erkennen können, ermöglicht die Pixel-Tapestry-Architektur
von ATI die Anwendung einer ganzen Reihe
von Effekten auf 3D-Oberflächen, um diese
realistischer und detailreicher erscheinen
zu lassen. Mit dem RADEON-Grafikprozessor
werden alle diese Funktionen auf Echtzeit
beschleunigt, damit die maximale Leistung
erzielt werden kann. Doch die Spieleentwickler
sind sehr kreative Köpfe und es wachsen
ständig neue Ideen für neue grafische Methoden
für einen gewünschten visuellen Effekt.
In der Vergangenheit konnten die neuen Techniken
nicht per Hardware beschleunigt werden,
ohne dass ein neuer Grafik-Chip entwickelt
wurde. Daher mussten Spieleentwickler oft
unbeschleunigte Software-Routinen schreiben,
wenn sie ihre neuen Techniken verwenden
wollten. Eine solche Lösung erfordert ein
so hohes Maß an Leistung, dass die Umsetzung
daran scheitert. Manche Entwickler sahen
sich gezwungen, die Funktion gänzlich aus
dem Spiel herauszulassen und zu hoffen,
sie in der nächsten Spielversion unterbringen
zu können, sobald den Anwendern schnellere
Hardware zur Verfügung stehen würde.
Durch
programmierbare Pixelschattierung erhalten
die Spieleentwickler neue Freiheiten bei
der Gestaltung anspruchsvoller visueller
Effekte. Hierbei wird durch eine einfache
Routine die Farbe eines Pixels auf der Basis
einer Reihe von Eingangswerten (Basismaterial,
Farbe, Lichtfarbe, Reflektionsverhalten
der Oberfläche, Unebenheit, Transparenz
usw.) bestimmt. Die Pixel-Tapestry-Architektur
ermöglicht die Programmierung solcher Pixelschattierungen
direkt im Grafikprozessor, so dass diese
Routinen von der Hardware beschleunigt werden
können.
Die
Pixel-Tapestry-Architektur unterstützt bis
zu drei Stufen mathematischer Operationen
mit je bis zu drei Eingangswerten, die pro
Szene auf jedes Pixel angewendet werden
können. Jede Stufe der Schattierungsroutine
kann die Ergebnisse einer vorangegangenen
Stufe als Eingangswert verwenden. Dabei
können eine Reihe von Berechnungen wie Addition,
Subtraktion, Multiplikation, Alpha-Blending
und Dot-Product durchgeführt werden. Die
folgende Abbildung veranschaulicht die Flexibilität
der Pixelschattierungs-Hardware im RADEON
Grafikprozessor:

Leistung
Schöne Bilder sind nur
ein Teil von realistischen und fesselnden
3D-Welten. 3D-Spiele sind interaktive Anwendungen.
Ganz gleich wie detailgenau eine 3D-Umgebung
dargestellt wird, die Illusion der Realität
bröckelt, wenn die nahtlose und sofortige
Reaktion auf Ihre Aktionen ausbleibt. Wenn
Sie in Wirklichkeit Ihren Kopf drehen, ändert
sich das von Ihren Augen gelieferte Bild
schließlich auch sofort. Es gibt weder
Verzögerungen, Flackern noch plötzliche
Sprünge von einem Bild zum nächsten.
Die sanften Bewegungen und das sofortige
Feedback ist den Entwicklern von 3D-Spielen
so wichtig, dass sie zu Gunsten eines reibungslosen
Spielverlaufs auf einem Standardsystem lieber
Detailgenauigkeit und Bildqualität
verringern.
Sofortiges Feedback und flüssige
Bewegungen in einer 3D-Anwendung erfordern,
dass Software und Hardware das dargestellte
Bild so oft mit neuen Informationen aktualisieren,
dass das menschliche Auge keinen Übergang
bemerkt. Auf niedrigauflösenden Fernsehern
oder Leinwänden werden dazu lediglich
30 oder gar nur 24 Bilder pro Sekunde benötigt.
Für hochauflösende Monitore und
Flachbildschirme sind jedoch 60 Bilder pro
Sekunde erforderlich. Bei schnellen Action-Spielen
mit plötzlichen Bewegungen, Reaktionen
in Bruchteilen von Sekunden und hoher erforderlicher
Zielgenauigkeit ist dies sehr wichtig.
Messung der Grafikleistung
Die Zahl, die am ehesten einen
brauchbaren Wert für die relative Leistung
eines Grafikprozessors bietet, ist die Füllrate.
Die Füllrate ist jedoch leider kein
eindeutiger Begriff, der in Statistiken
unterschiedliche Bedeutungen haben kann.
Wie z. B.:
- Pixel-Füllrate: Die Anzahl der
Pixel, die der Grafikprozessor pro Sekunde
verarbeiten kann. Diese Zahl errechnet
sich aus der Taktrate des Grafik-Controller
multipliziert mit der Anzahl von Render-Pipelines
und wird in Megapixel pro Sekunde (Mpix/s)
gemessen.
- Texel-Füllrate: Die Anzahl der
Texel (ein Texel entspricht einem Bildpunkt
eines Textur-Bitmaps), auf die der Grafikprozessor
pro Sekunde zugreifen kann. Diese Zahl
errechnet sich aus der Taktrate des
Grafik-Controller multipliziert mit
der Gesamtzahl der Textureinheiten.
Dieses Produkt wird mit der Anzahl der
Musterfilter multipliziert, auf die
pro Takt für jedes Pixel zugegriffen
werden kann (1 für Punktmuster
oder ungefiltert, 4 für bilineare
Filterung, 8 für trilineare Filterung
usw.). Dieser Wert wird üblicherweise
in Gigatexel pro Sekunde (Gtex/s) angegeben.
- Effektive Füllrate: Wenn in der
Werbung von Füllrate gesprochen
wird, ist meistens die effektive Füllrate
gemeint. Diese entspricht der Anzahl
der Pixel, die ein Grafik-Chip pro Sekunde
verarbeiten kann, multipliziert mit
der maximalen Anzahl von Texturen, die
innerhalb eines Taktes auf ein Pixel
angewendet werden können (bestimmt
durch die Anzahl der Textureinheiten).
Dieser Wert wird üblicherweise
in Megatexel oder Gigatexel angegeben
(1 Gigatexel = 1000 Megatexel). Jedoch
beschreiben die Füllratenwerte
nur die maximale "theoretische"
Leistung eines Grafikprozessors. Sie
setzen voraus, dass der Prozessor immer
mit 100 % Effizienz arbeiten kann, unbeeinflusst
von anderen Faktoren wie der Speicherbandbreite,
der Bandbreite des AGP-Bus oder der
Prozessortaktung. Bei der echten Anwendung
können diese Werte so gut wie nie
erreicht werden.
Die Frame-Raten einer 3D-Anwendung
werden von vielen Faktoren beeinträchtigt.
Normalerweise gibt es immer einen Engpass,
der die Leistung am meisten schmälert.
Das Erfolgsrezept für echte Geschwindigkeitssteigerung
ist also das Aufspüren und Beseitigen
dieser Engpässe. Als beispielsweise
der PCI-Bus zu einem Engpass für grafische
Anwendungen wurde, wurde zu dessen Überwindung
der AGP-Bus entwickelt. Durch die Einführung
des AGP-Busses wurde die CPU zur neuen Schwachstelle.
Diese Entwicklung wurde seither dadurch
kompensiert, dass viele der grafischen Berechnungen
wie Dreiecksberechnungen und Beleuchtungseffekte
nicht mehr von der CPU sondern vom Grafikprozessor
durchgeführt werden. Heutzutage stellt
die CPU also keine Beschränkung für
die Grafikleistung mehr dar. Für die
neueste Generation der Grafik-Hardware ist
nun die Speicherbandbreite zur primären
Geschwindigkeitsbremse geworden.
Bei immer komplexeren Szenen
in 3D-Anwendungen steigen die Datenmengen,
die es zum Darstellen dieser Szene aufzubauen
und zu rendern gilt, exponentiell an. Die
Geschwindigkeit, mit der die Grafik-Chips
Daten verarbeiten können, ist so schnell
angewachsen, dass die Kapazitäten der
heutigen hochentwickelten Speichertechnologien
bereits überschritten werden. Die Grafik-Chips
speichern häufig verwendete Daten zwischen,
so dass sie nicht bei jedem Zugriff aus
dem externen Speicher geholt werden müssen.
Aus Kostengründen werden diese Cache-Bausteine
jedoch recht klein bemessen. Ohne eine reelle
Lösung zu diesem Hauptproblem erinnern
erhöhte Taktraten der Grafikprozessoren
oder viele parallele Render-Pipelines an
die durchdrehenden Räder eines festgefahrenen
Autos. Bis von den Speicherentwicklern völlig
neue Wege zur Leistungssteigerung vorgestellt
werden, muss also eine andere Lösung
gefunden werden.
HyperZ™
Technologie
ATI begegnet dem Problem der
begrenzten Speicherbandbreiten mit dem RADEON-Chip
auf eine neue Weise. Die innovative HyperZ-Technologie
verbessert die Speicherbandbreite ohne den
nötigen Zusatzaufwand für exotische
eingebettete oder herstellergebundene Speicher.
Durch die Ausschaltung dieses zentralen
Engpasses ist die letzte Hürde auf
dem Weg zu realistischem 3D in Echtzeit
genommen.
Die maximale Füllrate,
die ein Grafik-Chip erreichen kann, steht
und fällt mit Geschwindigkeit und Art
des begleitenden Speichers. In der folgenden
Tabelle sehen Sie, wie HyperZ die maximale
Anzahl von 32-Bit-Farbpixeln, die ein Grafik-Chip
pro Sekunde rendern kann, erhöht, wenn
verschiedene Frame-Pufferspeicher verwendet
werden. Speichergeschwindigkeit und -art
Maximale Füllrate (Mpix/s) Maximale
Füllrate mit HyperZ (Mpix/s)

Alle heutigen 3D-Anwendungen
verwenden einen Tiefenpuffer, um zu verfolgen,
welche Objekte für den Betrachter sichtbar
sind. Die am häufigsten verwendete
Art von Tiefenpuffer ist der Z-Puffer. Es
kommen jedoch auch andere Arten wie der
W-Puffer zum Einsatz. Bei der derzeitigen
Grafik-Hardware nehmen die Lese- und Schreibvorgänge
des Tiefenpuffers mehr als die Hälfte
der Speicherbandbreite in Anspruch. Durch
HyperZ wird die hierfür verwendete
Bandbreite deutlich verringert, ohne dabei
die Bildqualität zu beeinträchtigen.
HyperZ kombiniert drei Verfahren und steigert
so die 3D-Leistung auf neue Höhen.
Diese Verfahren sind Hierarchical Z, Z Compression
und Fast Z Clear.
Hierarchical
Z
Ein Hauptproblem, mit dem
die Entwickler von 3D-Spielen bei der Erschaffung
ihrer 3D-Welten zu kämpfen haben, ist
das sogenannte Overdraw. Stellen Sie sich
eine 3D-Szene vor, in der Sie durch ein
kleines Fenster in den dahinter liegenden
Raum sehen. Einige der Wände und Objekte
in diesem Raum sind durch das Fenster sichtbar
und andere nicht. Die meisten Grafikprozessoren
können vor dem Rendern nicht feststellen,
welche Teile der Szene sichtbar und welche
Teile verdeckt sind. Die Prozessoren müssen
dann für jedes Pixel den Tiefenpuffer
prüfen und entscheiden, ob dieses darzustellen
ist oder nicht. Bei diesem Vorgang werden
viele Pixel in den Frame-Puffer geschrieben
und dann durch Pixel von Objekten, die näher
am Betrachter sind, wieder überschrieben.
Overdraw bezeichnet dieses Überschreiben
von Pixeln im Frame-Puffer. Das Overdraw
in einer Szene wird als Tiefenkomplexität
bezeichnet. Diese entspricht dem Verhältnis
von insgesamt gerenderten Pixeln zu sichtbaren
Pixeln. Hat eine Szene beispielsweise eine
Tiefenkomplexität von 3, wurden dreimal
mehr Pixel gerendert als später tatsächlich
auf dem Bildschirm sichtbar sind. Dies bedeutet
weiterhin, dass zum Darstellen der Szene
bei einer bestimmten Frame-Rate eine dreimal
so hohe Füllrate benötigt wird,
als dies ohne Overdraw der Fall wäre.
Overdraw stellt also die Hauptursache
für Ineffizienz bei 3D-Spielen dar.
Je nach Inhalt einer Szene kann die Tiefenkomplexität
zwischen 1 und 10 schwanken. In den meisten
Fällen liegt sie jedoch zwischen 2
und 3. Hierarchical Z bietet einen neuen
und effizienteren Weg im Umgang mit Overdraw
bei Grafik-Chips. Die Szenen werden vor
dem Rendern daraufhin untersucht, welche
Pixel sichtbar sein werden und welche nicht.
Alle nicht sichtbaren Pixel werden verworfen
und gar nicht erst gerendert. So wird das
Overdraw massiv reduziert und die effektive
Füllrate deutlich gesteigert. Folglich
wird auch die Gesamtleistung verbessert.
Z-Komprimierung
Die Komprimierung von Daten
ist ein allgemein verbreitetes Verfahren
bei der Übertragung einer großen
Datenmenge über ein Medium mit begrenzter
Bandbreite. Der Z-Puffer ist hierfür
ein gutes Beispiel. Da die Übertragung
zum und vom Z-Puffer einen so großen
Teil der Speicherbandbreite benötigt,
sollten die Daten also offensichtlich komprimiert
werden. HyperZ verwendet einen hochentwickelten
und verlustfreien Komprimierungsalgorithmus,
um die bei Lese- und Schreibvorgängen
des Z-Puffers zu übertragende Datenmenge
zu verkleinern. Sowohl Komprimierung als
auch Dekomprimierung werden in Echtzeit
vorgenommen, so dass zusätzliche Speicherbandbreite
gewonnen werden kann, ohne die Bildqualität
zu beeinträchtigen.
Fast Z
Clear
Nach der Fertigstellung eines
jeden Frame muss der dieser Szene zugeordnete
Tiefenpuffer gelöscht werden, bevor
er für Daten des nächsten Frame
zur Verfügung steht. Herkömmliche
Grafikprozessoren löschen den Puffer
durch Überschreiben der Daten mit Nullwerten.
Dieser Vorgang stellt jedoch auch einen
Schreibvorgang in den Z-Puffer dar, so dass
auch dadurch mehr Speicherbandbreite in
Anspruch genommen wird als zum Rendern der
Szene nötig wäre. Durch HyperZ
kann der Z-Puffer sehr schnell gelöscht
werden (ca. 64x schneller als herkömmliche
Architekturen), ohne dabei etwas in den
Z-Puffer zu schreiben. So wird keine unnötige
Speicherbandbreite verbraucht und die Leistung
weiter gesteigert.
ati.com
zurück
|