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 ●