
Hallo liebe Leserinnen
und Leser,
willkommen bei unserer
Grundlagenserie zum Thema Grafikkarten.
Habt ihr euch nicht schon oft gefragt,
wie eine GPU aufgebaut ist und wie
sie Bilder berechnet? Oder wolltet
ihr schon immer mal wissen, wie
Anti-Aliasing oder diverse Texturfilter
funktionieren? In unserer Grundlagenserie
zum Thema Grafikkarten werden wir
versuchen, euch all das in einfacher
und verständlicher Art und
Weise zu erklären.
Grundlagen Grafikkarten:
Teil 1
In unserem ersten
Teil zum Grundlagenwissen werden
wir euch die Funktionsweise von
komplexen Grafikprozessoren näher
bringen.
Der Grafikprozessor,
oder kurz "GPU" (Graphic
Processing Unit), ist das Kernstück
jeder modernen Grafikkarte. Sie
ist maßgebend für das
Potential der gesamten Grafikkarte,
allerdings nicht immer auch für
die Leistungsfähigkeit. So
kann ein DirectX8 Chip schneller
sein als ein DirectX9 Chip, wenn
letzterer durch niedrigen Takt oder
der Hardwareumgebung ausgebremst
wird. Andererseits kann ein DirectX8
Chip auch keinen DirectX9 Shader
berechnen, selbst wenn er noch so
stark ist.
Früher waren
Grafikarten nicht mehr als Hilfsarbeiter
der CPU, deren Funktionen kaum programmierbar
waren. Heute lassen sich Grafikkarten
dagegen immer besser programmieren.
Die Programmierbarkeit ist abhängig
von der Schnittstelle (DirectX oder
OpenGL) . So sind Pixelshader und
Vertexshader erst ab DirectX 8 Grafikkarten
programmierbar. Die Schnittstellenversionen
werden deshalb den Grafikkarten
zugeteilt:
| Schnittstelle |
GPU
|
Features |
| DirectX
6 |
Voodoo
1, Riva TNT und Rage 128 |
Multitexturing |
| DirectX
7 |
GeForce
256, Radeon |
Hardware
T&L |
| DirectX
8 |
ab
GeForce 3 und Radeon 8500, GeForce
4Ti |
Pixel-
und Vertex-Shader Version 1.0
und 1.1 |
| DirectX
9b |
ab
Radeon 9500 Pro, GeForce FX
58xx |
Pixel-
und Vertex-Shader Version 2.0 |
| DirectX
9c |
GeForce
6 & 7 & Radeon X1000
Serie |
Pixel-
und Vertex-Shader Version 3.0 |
Kommen wir nun zur
Beschreibung der Shadereinheiten.
Shadereinheiten sind Funktionseinheiten
innerhalb einer GPU, welche einen
großen Beitrag zur eigentlichen
Geschwindigkeit in 3D Anwendungen
leisten. Sie werden in zwei Einheiten
unterteilt, so dass man ausgehend
von den Arbeiten, die sie durchführen,
von Vertex- oder Fragmentshader
spricht. Shadereinheiten sind also
wie Produktionsabschnitte an einem
Fließband.
Anmerkung:
Fragmentshader werden
auch als Pixelshader bezeichnet,
da hier Berechnungen auf Pixelebene
durchgeführt werden. Einige
Programme in der DirectX Schnittstelle
werden aber auch als Pixelshader
bezeichnet, welches zu Verwechslungen
führen kann. Im OpenGL Jargon
werden diese Hardwareeinheiten einer
GPU als Fragmentshader bezeichnet,
wodurch dieser Verwechslung vorgebeugt
wird.
Welchen Weg muss nun
eine zu berechnende Datei durchlaufen
um auf den Bildschirm zu gelangen?
Grob
zusammengefaßt müssen
dazu folgende Schritte durchlaufen
werden:
Vertexshader
-> Triangle Setup -> Rasterization
-> Fragment-Shader -> ROPs
Als erstes werden
über eine "Vertex Fetch
Unit" Eckdaten (Vertizes; Mehrzahl
von Vertex) für den Vertexshader
eingelesen. Die Vertex Fetch Unit
dient nur zum Lesen und Zwischenspeichern
dieser Eckdaten. Der Vertexshader
wendet auf diese Eckpunkte spezielle
Programme (Vertexprogramme) an.
Mit diesen Programmen
kann u.a. die Form eines Polygons
verändert werden. Dazu werden
einfach die Koordinaten eines Vertex
verändert. Anschließend
werden diese Eckpunkte zu so genannten
"Primitiven" zusammengefaßt.
Primitive sind in der Regel Dreiecke
können aber auch Punkte oder
Linien sein. Diese Primitive stellen
so das geometrische Grundgerüst
dar, mit denen die GPU ihre Berechnungen
durchführt. In den Vertexeinheiten
werden aber auch Koordinaten zur
späteren Beleuchtung von Objekten
berechnet.
Anmerkung:
Ein Vertex beschreibt
den Eckpunkt eines Polygons. In
der Mathematik wird das als Vektor
bezeichnet. In der 3D Technik enthält
ein Vertex neben den Punktkoordinaten
zusätzlich noch Transparenzwerte
und Farbwerte. Mehrere Vertizes
können also auch Koordinaten
für Texturen darstellen.
|
Zum
Vergrösssern ins Bild
klicken
|
|
|