Vertex-/Pixel-Shader

Transcription

Vertex-/Pixel-Shader
Programmierbare
Hardware-Shader
Jörn Loviscach
Hochschule Bremen
Überblick
Vertex- und Pixel-Shader
●
Anwendungsbeispiele
●
fx-Dateien
●
Anwendungsbeispiele
●
Zusammenfassung
●
Vertex- und Pixel-Shader
Hardware-Renderpipeline
klassisch
CPU
Transf., Beleuchtg., Proj.
Clipping, w-Division
Triangle Setup, Rasterung
Texturierung, Nebel
Alpha, Tiefentest
Puffer
Vertex- und Pixel-Shader
Hardware-Renderpipeline
klassisch
aktuell
CPU
CPU
Transf., Beleuchtg., Proj.
Vertex-Shader
Clipping, w-Division
Clipping, w-Division
Triangle Setup, Rasterung Triangle Setup, Rasterung
Texturierung, Nebel
Pixel-Shader
Alpha, Tiefentest
Alpha, Tiefentest
Puffer
Puffer
Vertex-Shader
kein
●
kein
●
kein
●
kein
●
Zugriff auf andere Vertices
Erzeugen eines neuen Vertex
Löschen des Vertex
Zugriff auf Texturen
Vertex-Shader
kein
●
kein
●
kein
●
kein
●
Zugriff auf andere Vertices
Erzeugen eines neuen Vertex
Löschen des Vertex
Zugriff auf Texturen
Verformungen
●
Verzerrung von Textur-Koordinaten
●
Farbänderung pro Vertex
●
Vertex-Shader
Ausführungsumgebung
z.B. 16 Eingaberegister
Anwendung
z.B. 256 Konstanten
ALU
z.B. 32 Arbeitsregister
z.B. 21 Ausgaberegister
alle Register:
vier Gleitkommawerte
Pixel-Shader
kein Zugriff auf andere Pixel
●
Bildschirmposition unveränderlich
●
Pixel-Shader
kein Zugriff auf andere Pixel
●
Bildschirmposition unveränderlich
●
Zugriff auf Texturen
●
Vertex-Geometriedaten als Input
●
ggf. Ableitungen bzgl. Bildschirm-xy
●
Farbberechnungen
●
Überblendungen
●
Tiefe bzgl. Bildschirm ändern
●
Vertex-/Pixel-Shader
Beispiele aus:
Nvidia Cg Browser
Vertex Noise
●
Procedural Terrain
●
Matrix Palette Skinning
●
Fresnel Demo
●
Detail Normal Maps
●
Bump Reflection Mapping
●
Refractive Dispersion
●
Vertex-/Pixel-Shader
Programmierung
●
maximal z.B. 256 Befehle
●
meist vier float (32 Bit) als Vektor
●
„Swizzle“: ... = C[95].xwzx
●
„Write Mask“: R[10].xz = ...
●
Schleifen, Unterprogramme, Sprünge
mit Einschränkungen
●
Geometriebefehle
●
Texturabfragen (Pixel-Shader)
Vertex-/Pixel-Shader
Performance (nur Vertex-Shader)
●
GeForce 3 Ti 200
4*0160 MFLOPS
●
GeForce 4 Ti 4200
4*0470 MFLOPS
●
GeForce FX 5900
4*1100 MFLOPS
Parallelität:
z.B. vier Vertex-Shader-Einheiten,
acht Pixel-Shader-Einheiten
Vertex-/Pixel-Shader
Assembler
●
DirectX
●
OpenGL ARB
●
proprietär
Vertex-/Pixel-Shader
Assembler
●
DirectX
●
OpenGL ARB
●
proprietär
Hochsprachen
●
Nvidia Cg
●
DirectX HLSL
●
OpenGL SLang
Demo:
Nvidia Cg Browser
Vertex-/Pixel-Shader
Beispiele
●
●
●
Qbist2:
prozedurale Echtzeit-Videos
genetische Suche
nach Bild-Algorithmen
evolutionäres Design
von Materialien
.fx-Dateien
.fx-Dateien
fx: „Effects“
Materialien zuzuweisen und einzustellen
soll kein Job für Programmierer sein,
sondern für Designer!
komplette Programmierung
eines Materials als .fx-Textdatei
.fx-Dateien
Vertex- und Pixel-Shader-Quellcode
●
Alpha, z-Vergleich etc.
als Textkommando
●
ggf. mehrere Durchgänge (Passes)
●
ggf. mehrere Techniken (Techniques)
●
Eingabegrößen (vor allem Matrizen)
●
grafische Oberfläche
●
Demo:
Nvidia CgFX Viewer
.fx-Dateien
Arbeitsablauf
in 3D-Software (Maya, XSI, 3ds max):
●
Modelle bauen
●
.fx-Materialien zuweisen
●
mit Echtzeitvorschau einstellen
in Game-Engine:
●
Modelle laden
●
.fx-Materialien laden
●
Modelle mit jeweiligen .fx rendern
.fx-Dateien
.fx-Frameworks
●
●
Microsoft DirectX 9:
direkt fx-Dateien verwendbar
Nvidia CgFX: Anbindung
an OpenGL und DirectX
Demo:
.fx in Managed DirectX
.fx-Dateien
Beispiel: C4Dfx
Besonderheiten:
.fx in Datei rendern
●
Grafikkarte auch für
Offline-Rendering (siehe Maya)
●
dazu Emulation
des Standard-Materials
als .fx-Datei im Speicher
●
.fx-Dateien
Beispiel: C4Dfx
Emulation
Demo: interne .fx-Datei
Bump-Map zu Normal-Map
●
Environment-Map von Kugel auf Würfel
●
Glanzlicht-Form als Textur
●
für Schatten Tiefen-Map gerendert
●
.fx-Dateien
200
300
150
200
100
75
time for 10 frames (seconds)
400
time (seconds)
time for 10 frames (seconds)
Benchmarks zu C4Dfx
100
50
0
0
0
1
2
3
frame size (million pixels)
4
50
Cinema 4D
C4Dfx
25
0
0
5
10
15
20
25
30
number of frames
35
40
0
100000
200000
number of polygons
300000
Zusammenfassung
Zusammenfassung
●
Vertex- und Pixel-Shader machen
große Teile der Render-Pipeline
programmierbar
Zusammenfassung
Vertex- und Pixel-Shader machen
große Teile der Render-Pipeline
programmierbar
●
Programmiermodell auf Geometrieund Farbverarbeitung gerichtet
●
Zusammenfassung
Vertex- und Pixel-Shader machen
große Teile der Render-Pipeline
programmierbar
●
Programmiermodell auf Geometrieund Farbverarbeitung gerichtet
●
ungestörte Parallelität
●
Zusammenfassung
Vertex- und Pixel-Shader machen
große Teile der Render-Pipeline
programmierbar
●
Programmiermodell auf Geometrieund Farbverarbeitung gerichtet
●
ungestörte Parallelität
●
hohe Leistung
●
Zusammenfassung
Vertex- und Pixel-Shader machen
große Teile der Render-Pipeline
programmierbar
●
Programmiermodell auf Geometrieund Farbverarbeitung gerichtet
●
ungestörte Parallelität
●
hohe Leistung
●
.fx-Dateien als Mittel, komplexe
Materialien zu bündeln, auszutauschen
und für Designer zugänglich zu machen
●