Was macht eine Grafikkarte?
am Freitag, 24. August 2007, 20:36
Hmm ja... Das sind doch diese Dinger die man in den Computer steckt und erstmal nicht viel bemerkt.... Bis man ein Spiel startet. Das sieht auf einmal wunderbar aus. Aber wieso um Himmelsgottswillen? Der Computer ist ja noch gleich schnell, oder?
Um das zu erklären machen wir einen kurzen Abstecher in die Geschichte und Technik von 3D, keine Angst, ich werde versuchen mich einfach auszudrücken. Und wenn ihr nur Bahnhof versteht guckt euch doch kurz den Artikel Ganz simpel an, okay? ^^
Also: Zuerstmal hatten Computer keine Grafik, sondern nur Drucker. Irgendwann kam dann mal einer auf die Idee das ein Fernseher doch Ideal währe. Aber einen Bildschirm zu beschreiben ist gar nicht so einfach, dazu muss nähmlich das Signal erst in ein Format gewandelt werden das ein Bildschirm anzeigen kann. Und dieses Bild will auch generiert werden...
Dazu hat man erstmal einen Speicher. Dieser wird von einer Art Konverter ausgelesen und dann auf den Bildschirm übertragen. Jetzt gibt es eigentlich zwei Möglichkeiten was man in diesen Speicher schreiben kann: Entweder man schreibt in diesen Speicher direkt ein Zeichen. Dazu gibt es ein spezielles System, das ASCII System. Dabei wird jedem Zeichen eine Zahl zugeordnet, also eine Einheit mit der ein Computer umgehen kann. Eigentlich kann man damit nicht wirklich Zeichnen, sondern nur Buchstaben Ausgeben. Aber damals war Speicher teuer und so konnte man ihn sehr gut sparen, denn in einem Byte (acht Nullen oder Einsen) kann man locker einen solchen Buchstaben unterbringen. Und die Tabelle welche Zahl welcher Buchstabe ist konnte man auf Festspeicher unterbringen, die kann man nicht beschreiben sind aber sehr viel billiger. Und vom beschreibbaren Speicher braucht man nicht viel, damals konnte man sowieso meist nur 40 Zeichen auf dem Bildschirm... Also 40 Bytes Speicher.
Aber was hat das jetzt mit 3D zu tun? Nun es gibt auch noch ein anderes System, das Bitmapping: Dabei wird bei jedem Pixel (Punkt auf dem Bildschirm) ein eigener Speicher festgelegt in dem gespeichert ist was dieses Pixel denn jetzt tun soll. Am Anfang machte man das noch so das man ein Bit pro Pixel nutzte. Auf gut Deutsch: War ein Bit auf eins, war das entsprechende Pixel weiss, war das Bit auf 0 war es schwarz. Dadurch brauchte man nicht soviel Speicher, der wie gesagt seht teuer war.
Okay das ist noch immer kein 3D, aber wir kommen der Sache näher: Als Speicher billiger wurde benutze man immer mehr Speicher benutzt um Farbe darzustellen, das heisst da die Zahl jetzt eine Farbe angibt. So sind mit einem Byte pro Pixel schon 256 Farben möglich. Das wurde mit der Zeit als Speicher immer billiger wurde immer mehr ausgweitet. Heute sind 32 Bit, also 4 Bytes normal. Das ergibt dann stolze 16.8 Millionen Farben.
Und jetzt komme ich zu 3D, ehrlich ;)
Die Idee hinter einer Grafikkarte ist folgende: In dieser Karte wird im Prinzip eine 3D Landschaft erzeugt und dann auf den Bildschirm projiziert. Dazu gebe ich der Grafikkarte Koordinaten wo meine Punkte zu stehen haben, und zwar in den drei Dimensionen: Breite, Höhe und Tiefe. Dazu sage ich noch wie man diese Punkte verbinden soll, also zb eine Linie zwischen zwei Punkten oder ein Dreieck zwischen Dreien. Ausserdem gebe ich noch eine Farbe für die Flächen an.
Ich habe das jetzt also in die Grafikkarte geschmissen... Und jetzt? Jetzt fängt die Grafikkarte an zu rechnen, wir haben nämlich noch einige Probleme:
1. Wir haben das ganze aus einer bestimmten Position festgelegt, man will sich aber bewegen können.
2. Die Flächen haben eigentlich noch keine Farben.
3. Das Zeugs muss auf den Bildschirm.
4. Ein Objekt ist hinter einem anderen, was mache ich jetzt?
Also: In dieser Karte wird eine 4x4 Matrix erzeugt. WARTET, nicht abschalten, ich erklärs ja ;). Eine 2x2 Matrix kann man sich als eine Fläche mit vielen Feldern vorstellen. Jede dieser Flächen hat eine Koordinate. Damit kann man dieses Feld ansteuern. Bei einer 3x3 Matrix kommt noch eine Dimension dazu, jetzt haben wir also die üblichen Koordinaten Tiefe, Höhe und Breite. Versucht euch nicht eine 4x4 Matrix vorzustellen, das geht in der realen Welt nicht. Man kann einfach sagen das in dieser vierten Dimension gerechnet wird, alles andere wird zu kompliziert....
Naja jedenfalls ist das auch schon der erste Grund wieso man eine Grafikkarte braucht: Bis dahin waren Grafikkarten Hauptsächlich dieser Speicher. Nun wurde etwas neues erfunden: Der GPU (Grafic Prozessing Unit). Dieser ist auf solche Matrix-Rechnungen spezialisiert und ist darin rund 30(!) mal schneller als ein normaler Prozessor!
Jetzt kommt der nächste Schritt: Farbe! Das ist zugleich auch der dritte...
Und das geht so: Da wir die Formen jetzt in einer Matrix haben kann man auch einfach die Position der "Kamera" bestimmen, indem man sie auch einfach in die Matrix legt. Also wissen wir jetzt wie viel dieser Formen sichtbar ist. Diese werden jetzt Pixel für Pixel in die entsprechende Farbe gewandelt.
Und jetzt noch der letzte Punkt: Was passiert wenn eine Form überdeckt wird? Dazu hat jeder Pixel neben den üblichen Farbangaben noch einen zusätzlichen Speicher in dem sozusagen die Entfernung zur Kamera gespeichert ist. Damit lässt sich einfach feststellen was vorne und was hinten ist.
Soweit sogut, aber was mache ich wenn ich z.b. einen Bildschirm (also im Bild ^^)? Nun dieser ganze Vorgang oben spielt sich in einem Buffer, also einem Speicher ab der dann ausgelesen wird. Und was man jetzt macht ist das man einfach mehrere Buffer anlegt. Das heisst das man meist für ein normales Bild zwei Buffer hat: Im einen ist das aktuelle Bild, im anderen wird das neue Zusammengesetzt. Wenn das neue komplett ist werden die Buffer vertauscht und das neue Bild angezeigt. Das macht eine moderne Grafikkarte teilweise hundertmal in der Sekunde, selbst bei Spielen wie FEAR....
An dieser Technik gibt es auch ein Nachteil: Der Bildschirm 2 würde auch in Echtzeit berechnet, das heisst es bräuchte die doppelte Power.... Das ist auch der Grund wieso das Spiegelung und ähnliches Zeug auch heute noch nicht ganz echt wirkt.
So das wars mal wieder, bis denne
Euer Fanatik
Um das zu erklären machen wir einen kurzen Abstecher in die Geschichte und Technik von 3D, keine Angst, ich werde versuchen mich einfach auszudrücken. Und wenn ihr nur Bahnhof versteht guckt euch doch kurz den Artikel Ganz simpel an, okay? ^^
Also: Zuerstmal hatten Computer keine Grafik, sondern nur Drucker. Irgendwann kam dann mal einer auf die Idee das ein Fernseher doch Ideal währe. Aber einen Bildschirm zu beschreiben ist gar nicht so einfach, dazu muss nähmlich das Signal erst in ein Format gewandelt werden das ein Bildschirm anzeigen kann. Und dieses Bild will auch generiert werden...
Dazu hat man erstmal einen Speicher. Dieser wird von einer Art Konverter ausgelesen und dann auf den Bildschirm übertragen. Jetzt gibt es eigentlich zwei Möglichkeiten was man in diesen Speicher schreiben kann: Entweder man schreibt in diesen Speicher direkt ein Zeichen. Dazu gibt es ein spezielles System, das ASCII System. Dabei wird jedem Zeichen eine Zahl zugeordnet, also eine Einheit mit der ein Computer umgehen kann. Eigentlich kann man damit nicht wirklich Zeichnen, sondern nur Buchstaben Ausgeben. Aber damals war Speicher teuer und so konnte man ihn sehr gut sparen, denn in einem Byte (acht Nullen oder Einsen) kann man locker einen solchen Buchstaben unterbringen. Und die Tabelle welche Zahl welcher Buchstabe ist konnte man auf Festspeicher unterbringen, die kann man nicht beschreiben sind aber sehr viel billiger. Und vom beschreibbaren Speicher braucht man nicht viel, damals konnte man sowieso meist nur 40 Zeichen auf dem Bildschirm... Also 40 Bytes Speicher.
Aber was hat das jetzt mit 3D zu tun? Nun es gibt auch noch ein anderes System, das Bitmapping: Dabei wird bei jedem Pixel (Punkt auf dem Bildschirm) ein eigener Speicher festgelegt in dem gespeichert ist was dieses Pixel denn jetzt tun soll. Am Anfang machte man das noch so das man ein Bit pro Pixel nutzte. Auf gut Deutsch: War ein Bit auf eins, war das entsprechende Pixel weiss, war das Bit auf 0 war es schwarz. Dadurch brauchte man nicht soviel Speicher, der wie gesagt seht teuer war.
Okay das ist noch immer kein 3D, aber wir kommen der Sache näher: Als Speicher billiger wurde benutze man immer mehr Speicher benutzt um Farbe darzustellen, das heisst da die Zahl jetzt eine Farbe angibt. So sind mit einem Byte pro Pixel schon 256 Farben möglich. Das wurde mit der Zeit als Speicher immer billiger wurde immer mehr ausgweitet. Heute sind 32 Bit, also 4 Bytes normal. Das ergibt dann stolze 16.8 Millionen Farben.
Und jetzt komme ich zu 3D, ehrlich ;)
Die Idee hinter einer Grafikkarte ist folgende: In dieser Karte wird im Prinzip eine 3D Landschaft erzeugt und dann auf den Bildschirm projiziert. Dazu gebe ich der Grafikkarte Koordinaten wo meine Punkte zu stehen haben, und zwar in den drei Dimensionen: Breite, Höhe und Tiefe. Dazu sage ich noch wie man diese Punkte verbinden soll, also zb eine Linie zwischen zwei Punkten oder ein Dreieck zwischen Dreien. Ausserdem gebe ich noch eine Farbe für die Flächen an.
Ich habe das jetzt also in die Grafikkarte geschmissen... Und jetzt? Jetzt fängt die Grafikkarte an zu rechnen, wir haben nämlich noch einige Probleme:
1. Wir haben das ganze aus einer bestimmten Position festgelegt, man will sich aber bewegen können.
2. Die Flächen haben eigentlich noch keine Farben.
3. Das Zeugs muss auf den Bildschirm.
4. Ein Objekt ist hinter einem anderen, was mache ich jetzt?
Also: In dieser Karte wird eine 4x4 Matrix erzeugt. WARTET, nicht abschalten, ich erklärs ja ;). Eine 2x2 Matrix kann man sich als eine Fläche mit vielen Feldern vorstellen. Jede dieser Flächen hat eine Koordinate. Damit kann man dieses Feld ansteuern. Bei einer 3x3 Matrix kommt noch eine Dimension dazu, jetzt haben wir also die üblichen Koordinaten Tiefe, Höhe und Breite. Versucht euch nicht eine 4x4 Matrix vorzustellen, das geht in der realen Welt nicht. Man kann einfach sagen das in dieser vierten Dimension gerechnet wird, alles andere wird zu kompliziert....
Naja jedenfalls ist das auch schon der erste Grund wieso man eine Grafikkarte braucht: Bis dahin waren Grafikkarten Hauptsächlich dieser Speicher. Nun wurde etwas neues erfunden: Der GPU (Grafic Prozessing Unit). Dieser ist auf solche Matrix-Rechnungen spezialisiert und ist darin rund 30(!) mal schneller als ein normaler Prozessor!
Jetzt kommt der nächste Schritt: Farbe! Das ist zugleich auch der dritte...
Und das geht so: Da wir die Formen jetzt in einer Matrix haben kann man auch einfach die Position der "Kamera" bestimmen, indem man sie auch einfach in die Matrix legt. Also wissen wir jetzt wie viel dieser Formen sichtbar ist. Diese werden jetzt Pixel für Pixel in die entsprechende Farbe gewandelt.
Und jetzt noch der letzte Punkt: Was passiert wenn eine Form überdeckt wird? Dazu hat jeder Pixel neben den üblichen Farbangaben noch einen zusätzlichen Speicher in dem sozusagen die Entfernung zur Kamera gespeichert ist. Damit lässt sich einfach feststellen was vorne und was hinten ist.
Soweit sogut, aber was mache ich wenn ich z.b. einen Bildschirm (also im Bild ^^)? Nun dieser ganze Vorgang oben spielt sich in einem Buffer, also einem Speicher ab der dann ausgelesen wird. Und was man jetzt macht ist das man einfach mehrere Buffer anlegt. Das heisst das man meist für ein normales Bild zwei Buffer hat: Im einen ist das aktuelle Bild, im anderen wird das neue Zusammengesetzt. Wenn das neue komplett ist werden die Buffer vertauscht und das neue Bild angezeigt. Das macht eine moderne Grafikkarte teilweise hundertmal in der Sekunde, selbst bei Spielen wie FEAR....
An dieser Technik gibt es auch ein Nachteil: Der Bildschirm 2 würde auch in Echtzeit berechnet, das heisst es bräuchte die doppelte Power.... Das ist auch der Grund wieso das Spiegelung und ähnliches Zeug auch heute noch nicht ganz echt wirkt.
So das wars mal wieder, bis denne
Euer Fanatik