Vertex Shader - der PC lernt laufen

Status
Nicht offen für weitere Antworten.

Lord Hectic

L11: Insane
Thread-Ersteller
Seit
15 Aug 2001
Beiträge
1.668
Der Titel klingt beklopt.
So ist es aber.
Das was die nex-gen Konsolen vormachen (Motion-Blur, etc....), wird den PC erst jetzt durch den Vertex Shader beigebracht.

wireframe.gif


Damit man die Technologie versteht, muß man als erstes wißen was ein Vertex ist.
Für einen Laien erklärt ist ein Vertex ein Atom einer 3d-Szene.
Ein Vertex ist der Stützpunkt eines Polygons.
Jede Linie in dem Model der Kahne verbindet einen Vertex mit dem anderen.
Dieser Vertex enthält verschiedene Atribute:
x,y,z Koodinaten; RGBA (Rot, Grün, Blau, Alpha), Gewicht(!), Größe.

Der Vertex Shader macht eigentlich, daß was man sich einfach vorstellen kann, wofür Grafikindustrie aber 4 Jahre bräuchte.
Er verändert diese Atribute (Maße, Farbe, Größe,....), ohne den CPU zu belasten, also eine Erweiterung, der T&L Einheit des GPUs.

Und jetzt kann man die Gestalt einen ganzen Objekts verändern, daß heißt jetzt tatsächlich in Echtzeit das Objekt morphen (!!!), das zeigt NVIDIA mit einem Delphin
dolphin.gif

Man hat der GPU nur die Keyframes gegeben der Animationen dazwischen hat der Vertex Shader berechnet. Geil, was?

Der Vertex Shader kann natürlich außer Morphing noch:
Interpolation,
Reflektionen,
Veränderung der Oberfläche,
Motion Blur (oder das was es sein soll, dazu aber später noch)

Leider ist das nicht so grenzenlos, wie es NVIDIA den Usern sagt. Die Befehle im Shader sind nämlic auf 128 Stück begrenzt.
--------------------------------------------
Der Shader im Detail:

vertexshader1.gif



Dieses Blockschaltbild zeigt, dass der Vertex Shader Eckpunkte mit bis zu 16 Dateneinträgen verarbeiten kann. Jeder Eintrag besteht aus 4 Fließkommazahlen (128 Bit). Dies reicht für einen Vertex mit Koordinaten, Gewicht, Normale, Farbe, Nebel und Größeninformationen aus. Dabei ist noch genug Platz für die Koordinaten verschiedener Texturen.

Wie sich aus dem Bild und der Beschreibung erkennen lässt, ist der Vertex Shader ein SIMD (single instruction multiple data) Prozessor. Bei jeden verarbeiteten Befehl löst er 4 Variablen aus. Die meisten Transform & Lighting-Operationen bestehen aus einer 4x4 oder einer 3x3 Matrix. Generell werden alle Daten als Floating-Point-Werte verarbeitet. Der Vertex Shader kann daher mit einer leistungsfähigen SIMD FPU verglichen werden, die in ähnlicher Form auch im Pentium III oder Pentium 4 vorkommt.

Als nächstes wichtiges Feature sind die 12 SIMD-Register zu nennen, die ebenfalls 4 Floating-Point-Werte (128 Bit) beinhalten können. Neben diesen 12 Registern, die vielseitig verwendbar sind, bietet der Vertex Shader 96 4 x 128-bit SIMD Konstanten, die als fixe Parameter vom Programmierer vor dem Start einer jeden Routine festlegt werden können. Diese Konstanten können innerhalb der Routine benutzt und indirekt adressiert werden. Allerdings steht nur eine Konstante pro Befehl zur Verfügung. Will man mehr als eine Konstante pro Befehl nutzen, so muss zuerst eine in ein Register geladen werden und zwar mit einem vorherigen Ladebefehl. Typische Anwendung findet dieser Vorgang zum Beispiel bei Matrixdaten (üblicherweise 4x4 Matrix), Lichteinwirkungen, spezielle Animationen, Vertex Interpolation (Morphing, Key Frame Interpolation), Zeit (für Key Frame Interpolation und Teilsysteme). Das endgültige Resultat ist ein Vertex, dass nach Durchlaufen im Vertex Shader transformiert und beleuchtet ist. Es sei angemerkt, dass der Vertex Shader keine Vertices erzeugen oder zerstören kann. Ein Vertex geht hinein und kommt im bearbeiteten Zustand heraus.


--------------------------------------------
Jetzt kommen wir aber zu den Ergebnissen dieser tollen, unglaublichen erffindung von NVIDIA:

Gesichter, Kleidung und Bewegungen können jetzt super-realistisch dargestellt werden.
Für Animationen benutzte man früher 2 Matrizen pro Vertex. Der Shader erlaubt jetzt 32 pro Vertex.
Dieses Beispiel basiert auf 20 Matrizen pro Vertex (20-Matrix-Skinning):
matrixpaletteskinning.jpg


Dynamische Verzerrungen:
flag-bullet.jpg


Lichtbrechungen:
fisheye.jpg


Reflektionen:
reflectandrefract.jpg


Mehrschichtiger Nebel (Layered Fog):
fog.jpg


Per-Vertex-Motion-Blur:
NAJA :-?
motionblur.gif



Weitere Effekte:
Kreation von realitätstreuen Fellen bei Tieren.

Partikelsysteme können unabhängig von der CPU laufen.

Durch Mesh Blending lassen sich Lichtbrechungen unter der Wasseroberfläche berechen.

Doppelseitige Lichtquellen erlauben unterschiedliche Lichtcharakteristiken auf der Vorder- und Rückseite eines Dreiecks.

Silhouetten-Rendering, Membrane Lighting, Rainbow Rendering, Anisotropic Lighting, Toon Shading.

"Perlin"-Rauschen gehört sicherlich zu den populärsten Funktionen für Rauschen (Noise). Damit lassen sich leicht Wolken, Nebelschwaden, Feuer usw. erzeugen.

Der Vertex Shader des GeForce3 unterstützt diese Funktionen hardwareseitig, also ohne nennenswerte Belastung der CPU.

Viele Point Lights (Punktlichtquellen). Gegenüber DirectX 7 sind mehr als 8 Lichtquellen möglich. So sind 17 diffuse Lichter möglich.
Der limitierende Faktor ist aber wieder die Beschränkung auf 128 Instruktionen.

Das einzige Problem ist aber das Programmieren für den Vertex Shader.
Es braucht viel Zeit (Wir kennen ja die tollen PC-Programmiere. Die brauchen schon für ein Spiel ohne VS 4 Jahre)

Wir werden sehen wie lange es dauern wird, bis der Vertex Shader standart wird.
Bis das erste Spiel die T&L Engine nutzte vergingen ja 18 Monate nach Einführung der GeForce256.


_________________
http://nav.to/masterfusion
Master Fusion - the developer's gathering

<font size=-1>[ Diese Nachricht wurde geändert von: Adam am 2001-09-15 17:27 ]</font>
 
sorry, aber ich werde damit nicht schlau!! :-D
 
Ist der Artikel, denn so schwer zu verstehen?

Ich habe mich bemüht ihn so einfach wie möglich zu halten.

_________________
http://nav.to/masterfusion
Master Fusion - the developer's gathering

<font size=-1>[ Diese Nachricht wurde geändert von: Adam am 2001-09-15 17:26 ]</font>
 
Hört sich alles sehr interessant an, ABER SO WAS WILL ICH ZUM DONNERWETTER NOCH MAL AUCH IN SPIELEN SEHEN :aargh:!!!!
 
Bis auf das Motion-Blur, das sieht nämlich lächerlich aus :lol:. Kein Vergleich zum Motion-Blur der PS2 (das im Übrigen auch bei jedem Spiel anders aussieht, weil die Programmierer alle Freiheiten haben und sich nicht auf eine Technik wie dem Vertex-Shader beschränken müssen).
 
Tja, die GeForce3 ist nämlich auf DirectX8 beschränkt. Bei der PlayStation2 haben die Programmierer frei Hand bei der Einbringung von Effekten! Desswegen werden sich alle auf der GeForce3 basierenden Games nur im Detail bei der Grafik unterscheiden. Krasse Unterschiede wie bei der PS2 wird es auf jeden Fall nicht geben. Man vergleiche: Ridge Racer 5 und Gran Turismo 3. Da liegt grad mal ein halbes Jahr dazwischen, aber die grafischen Unterschiede sind enorm. GT3 sieht schon fast fotorealistisch aus!! Trotz der schwer programmierbaren Hardware der PS2. Man stelle sich die Games in 2-3 Jahren vor!! Das sind rosige Aussichten!
 
Jepp, das stimmt :goodwork:. Oder vergleich doch mal Crazy Taxi mit GT3. Das sind 2 völlig verschiedene Grafik-Stile :-D.
 
Status
Nicht offen für weitere Antworten.
Zurück
Top Bottom