Naja, DX10 bedeutet nicht nur mehr Performance. In DX10 steckt wirklich neues, und nicht nur "verbessertes altes" drinne. D.h. es sind Dinge in DX10 möglich, die mit DX9 nicht möglich gewesen wären (von der technischen Seite). Naja, ich versuchs mal kurz zu machen:
--------------------------
Phase1: Wir wissen ja, dass die 3D-Grafik aus vielen 3-Ecken besteht, die man ja Triangles nennt ^^. Diese Triangles haben 2 Seiten (Faces) und 3 Punkte (Vertices, (einz. Vertex)). So. Um nun ein 3-D Bild zu erstellen, muss man ja die Landschaft, die Objekte und so modellieren. D.h. man muss viele viele viele dieser Dreiecke zu einem Gebilde zusammenbauen. Und das bedeutet ja, dass man die Positionen der Vertexe bestimmen muss. Zusätzlich kann man für jeden Eckpunkt eines solches Dreiecks noch den Lichtwert, also wie hell dieser sein soll, bestimmen (und noch vieles andere, aber hier interesisert es nicht). Soweit alles klar?
Phase2: Nachdem wir nun diese ganzen vielen Tausenden Dreicke angeordnet haben, müssen sie ja bemalt werden. Das nennt man ja Texturierung. Eine Textur ist in der einfachen Variante einfach ein Bild (gibt noch viel kompliziertere Varianten, wie 3D Texturen, oder Cubes usw., interessiert uns hier aber nicht). So, jetzt nehmen wir uns einfach ein Dreieck aus unserer Landschaft, und bestimmen für jeden der 3 Eckpunkte zusätzlich die Eckpunkte der Textur. Dann wird dieses Bild auf das Dreieck draufgepinselt. Soweit alles klar?
--------------------------
Nun ja. Jetzt kommen die Grafikkarten-GPU's ins Spiel. Man dachte sich seit der Geforce1 folgendes: hey, da haben wir ja sooooo viele Dreiecke, die ja positioniert werden müssen (also je nach dem, wie die Kamera hinguckt, und wo das Objekt grad ist und wie rum es dort steht und so) und dazu muss noch jedem Vertex dessen Lichtwert berechnet werden. Bisher war damit die CPU beschäftigt, und sie musste die ganzen vielen Daten (also Anzahl der Dreiecke * 3-Eckpunkte für jedes Dreieck * Anzahl der Daten pro Eckpunkt) zur Grafikkarte schicken. Nicht mit uns! - zack, die T&L-Einheit war geboren. (T&L=Transoform&Lightning). Diese konnte nun die Dreiecke selbst Positionieren und den Lichtwert der Eckpunkte berechnen.
Nunja, die Entwicklung ging weiter und weiter, und dann dachte man sich wieder folgendes: hey, das ist doch total doof. Unsere T&L kann immer nur auf ein und dieselbe Weise die Position und Beleuchtung der Vertexe berechnen. Wir brauchen etwas, was sich verändern lässt, so, dass die Berechnung angepasst werden kann - Und so entstand der VertexShader. Aber das war nicht alles. Im gleichen Zuge hat man sich gedacht: ist ja toll so ein VertexShader. Aber wir haben immer noch das Malen der Texturen auf die Dreiecke fest verdrahtet. Da müssen wir auch etwas dynamisches finden - zack, der Pixelshader entstand.
Also:
Vertexshader = berechnet die Eckpunkte der Dreiecke
Pixelshader = berechnet die Textur-Pixel (Texels) auf einem Dreieck
Da man ja die T&L nicht mit Shadern mischen kann (geht nur entweder das eine, oder das andere pro Renderzyklus), muss man kleine Standard-Shader programmieren, damit man überhaupt was rendern kann, wenn man Shader benutzt. Dabei kümmert sich der Vertexshader darum, die Welt (also die ganzen Dreiecke ^^) so zu drehen, wie gerade die Kamera hinschaut, und wie das jeweilige Objekt ausgerichtet ist und wo es sich überhaupt in der Welt befindet. Da ja das auf der Grafikkarte passiert, ist das bei vielen tausend Dreiecken natürlich viel schneller, als es damals die CPU gemacht hat. Zusätzlich muss natürlich der Pixelshader die Texturen richtig auf die Dreiecke pinseln.
So. Das reichte aber natürlich nicht aus. Man wollte jetzt mit Hilfe von Shadern spektakulärere Effekte erzielen. Ganz besonders gelang das mit Hilfe des Pixelshaders. Der Vertexshader war eher im Hintergrund (ist klar, er kann nur die Position von Dreiecken verändern und Daten vorbereiten, die man erst im Pixelshader so richtig cool benutzen kann). Seit DOOM3 hat man gesehen, wie auch der Vertexshader grafisch Veränderungen bringt, ohne dass man sichtbare Dreiecke bewegt (Stichwort: Echtzeitschatten-Shadowvolumes). Nun ja, man brauchte immer mehr mathematische Funktionen, wie SINUS, Matrizen-Funktionen und noch viel andere (coole und weniger coole) Funktionen. So wurden die Grenzen der Shader-Programme immer weiter nach oben gedreht, es wurde immer mehr möglich und möglich, doch grundsätzlich hat sich da nicht so viel geändert.
Jetzt kommt DX10 mit dem neuen Shadermodell. Und dieses hat etwas ganz entscheidendes: einen 3ten Shader, der zwichen Vertex- und Pixelshader geschaltet ist: der Geometryshader.
Man kann das erste Mal mit Hilfe von Shadern Dreiecke erstellen (also nicht nur positionieren, sondern komplett neue Dreiecke erschaffen). D.h. Folgendes: Man stellt sich vor, man malt nur einen Grashalm hin. Mit Hilfe dieses neuen Features ist es nun möglich, alleine durch die Grafikkarte eine Million weiterer Grashalme, die jedes für sich anders aussehen, zu erstellen. Oder einen ganzen Wald voller Bäume, wo nur ein paar davon in echt programmiert wurden. Den Rest übernimmt die Grafikkarte. Man spricht von instanzierter Geometrie. Das war bisher einfach nicht möglich. Durch dieses Feature lassen sich bisherige Engines um große Faktoren beschleunigen (nicht automatisch, man muss natürlich die Engines etwas umbauen, damit sie mit dieser neuen Technik rendern). Die Grafikkarte nimmt sehr viel Arbeit ab, bzw. ermöglicht erst neue Arbeitsschritte einzubauen.
Aufgrund von diesem Feature sind Effekte möglich, die mit der bisherigen Technik nur ziemlich schwer und vorallem langsam hinzubekommen wäre (man könnte ja heute alle möglichen Effekte mit DX9 hinbekommen, die es in den nächsten 1000 Jahre geben wird (Stichwort: Raytracing), aber natürlich nicht in Echtzeit). Insofern kann man schon das Ganze so sehen, als ob DX10 und die neuen Shader "nur" etwas mehr Performance bringen würden. Für uns Programmierer ist dies aber eine komplette neue Welt. Vergleichbar ist dies mit einem ur-alten VW-Golf und einem modernen vollausgestatetem Lexus: mit beiden Autos kommt man schon irgendwie an am Zielpunkt. Die Frage ist nur: was ist cooler, macht mehr Spaß, ist schneller, bequemer und für welches würde man sich entscheiden ^^. (Natürlich, wenn man die Kohle für hat).
So far,
Kasimir
PS: Ich wollte damit nur sagen, dass DX10 nicht bloß ein besseres DX9 ist, sondern die Spiele-Engines, die auf DX10 direkt aufsetzen werden, werden enorme Qualitätsverbesserungen in der Detailstuffe von Spielen bringen. Ich würde sogar weiter gehen und sagen: Der Unterschied zu HL2-Grafik wird so sein, wie HL2 zu HL1-Grafik (sry, aber die beiden Engines fielen mir grad spontan ein ^^).


					
					
					
						
  Zitieren




			