Computergrafik Universität Osnabrück, Henning Wenke,

Ähnliche Dokumente
Computergrafik Universität Osnabrück, Henning Wenke,

Computergrafik Universität Osnabrück, Henning Wenke,

3D Programmierpraktikum: OpenGL Shading Language (GLSL)

Computer Graphics Shader

Computergrafik Universität Osnabrück, Henning Wenke,

Programmierpraktikum 3D Computer Grafik

Computergrafik SS 2012 Probeklausur Universität Osnabrück Henning Wenke, M. Sc. Sascha Kolodzey, B. Sc., Nico Marniok, B. Sc.

Computergrafik SS 2010 Henning Wenke. Kapitel 21: OpenGL 3.1 (Fortsetzung)

GPU Programmierung 6. Juli 2004 M. Christen, T. Egartner, P. Zanoni

Computergrafik SS 2010 Henning Wenke. Kapitel 21: OpenGL 3.1

Computergrafik Universität Osnabrück, Henning Wenke,

Computergrafik Universität Osnabrück, Henning Wenke,

Eine Einführung Computergrafik SS14 Timo Bourdon

Geometry Shader. Ausarbeitung im Rahmen des Seminars Echtzeit Rendering" Von Sebastian Jackel Franz Peschel. Geometry Shader 1

Diplomarbeit. Neue Möglichkeiten durch programmierbare Shader. Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker

GL ShadingLanguage(GLSL)

Shader. Computer Graphics: Shader

Grafikkarten-Architektur

Übungsblatt 10: Klausurvorbereitung

Computergrafik Universität Osnabrück, Henning Wenke,

Praktikum: Spieleengine im Eigenbau

Repetitorium Informatik (Java)

Softwareprojekt Spieleentwicklung

(7) Normal Mapping. Vorlesung Computergraphik II S. Müller. Dank an Stefan Rilling U N I V E R S I T Ä T KOBLENZ LANDAU

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

Computergrafik Universität Osnabrück, Henning Wenke,

2 Programmieren in Java I noch ohne Nachbearbeitung

GPGPU Basiskonzepte. von Marc Kirchhoff GPGPU Basiskonzepte 1

3.1 Motivation. - Mit (mehreren) Koordinatentransformationen wird das Objektsystem in das Gerätesystem transformiert.

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke,

Computergrafik Universität Osnabrück, Henning Wenke,

Seminar Game Development Game Computer Graphics. Einleitung

OpenGL und die Fixed-Function-Pipeline

High Performance Computing Blatt 7

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Erinnerung. Arbeitsschritte der Computergraphik. Modellierung. Animation. Rendering. Ausgabemedium. Generierung

Objektorientierte Programmierung

Wiederholung. Vorlesung GPU Programmierung Thorsten Grosch

Michael Bender Martin Brill. Computergrafik. Ein anwendungsorientiertes Lehrbuch. 2., überarbeitete Auflage HANSER

Computergrafik. Michael Bender, Manfred Brill. Ein anwendungsorientiertes Lehrbuch ISBN Inhaltsverzeichnis

Spieleprogrammierung mit DirectX und C++

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering

Architektur moderner GPUs. W. Sczygiol - M. Lötsch

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

Grundlagen der 3D-Grafik

Reihungen. Martin Wirsing. in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang

Seminar. Echtzeit-Rendering SS Geometry Shader. Franz Peschel

Aktuelle Grafikleistungen

Mehrdimensionale Arrays

2 Eine einfache Programmiersprache

Implementieren von Klassen

2 Eine einfache Programmiersprache

General Purpose Computation on GPUs

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Universität Trier FB IV Mathematik PS Mathematics for 3D Game Programming & Computer Graphics - WS 07/08 Seminarleiter: Prof. Dr.

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

Praktische Informatik 1

Algorithmen implementieren. Implementieren von Algorithmen

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

OpenGL. (Open Graphic Library)

Einstieg in die Informatik mit Java

Übungsstunde 5 zu Computergrafik 1

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

CAUSTICS & GODRAYS. Jacob Skuratovski

2 Eine einfache Programmiersprache

Einführung: Verteilte Systeme - Remote Method Invocation -

Java Übung. Übung Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Werner Gaulke.

Beleuchtungsmodelle und Shading

Rheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit

2 Eine einfache Programmiersprache

Arrays. Einleitung. Deklarieren einer Array Variablen

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Einstieg in die Informatik mit Java

Java 3D. Linien, Flächen und Objekte Axel Bartsch, Okt. 2002

Name: Musterlösung Seite 2

Einführung in die objektorientierte Programmierung mit C++

Erste Java-Programme (Scopes und Rekursion)

Einführung in das Programmieren Probeklausur Lösungen

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Beleuchtung Schattierung Rasterung

Programmierung mit C Zeiger

Vorkurs Informatik WiSe 17/18

Hochleistungsrechnen auf dem PC

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Intensivübung zu Algorithmen und Datenstrukturen

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Tag 7 Repetitorium Informatik (Java)

Vorlesung Datenstrukturen

SS08, LS12, Friedrich-Alexander-Universität Erlangen Florian Hänel, Frederic Pollmann HS Multicore Architectures and Programming GPU EVOLUTION

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Humboldt-Universität zu Berlin Wintersemester 2010/11 Institut für Informatik Grundlagen der Programmierung. 6. Übungsblatt

Konzepte der Programmiersprachen

Informatik II Übung 05. Benjamin Hepp 3 April 2017

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Transkript:

Computergrafik Universität Osnabrück, Henning Wenke, 2012-05-14

Kapitel V: Modeling Transformation & Vertex Shader

5.1 Vertex

Definitionen: Vertex Vertex Computergrafik Mathematischer Punkt auf einer Oberfläche zusammen mit Eigenschaften an dieser Stelle Oft Eckpunkt eines Primitives (geometrische Figur) Vertex OpenGL Datenstruktur. Geeignet, um einen Vertex (Computergrafik) zu repräsentieren 4

Vertex als Oberflächenpunkt Gegeben: Kontinuierliches Modell (Volumen) Gesucht: Diskrete Näherung durch sinnvolle Verteilung von Vertices auf dessen Oberfläche Enthalten Eigenschaften der Stelle Sind dann typischerweise Eckpunkte geometrischer Objekte, welche Oberfläche annähern Dazu zusätzlich Topologie nötig: Vorschrift zum Zusammenfügen der Vertices zu Dreiecken, Linien, etc. Später 5

Typische Vertex Attribute 1 y Modell s v 0 0 1 1 x Modell Kann v. A. geometrische Informationen enthalten, z.b.: Position in einem KS (fast immer) Normale in einem KS Oberflächenparameter, hier: Linienparameter Auch beliebige andere Informationen, z.b.: Farbe Deformierbarkeit Attribute v 0 : Position: (0.5, 1.0) Normale: (0.0, 1.0),(normiert) Linienparameter s: 0.25 Farbe: grün 6

5.2 Modeling Transformation

Modeling Transformation I Objekte i.d.r. in eigenem KS modelliert: Model Coordinates Platzierung in Szene durch Modeling Transformations Translation Rotation Skalierung, Räumliche Wiederverwendung der Objekte möglich Sind dann in globalem KS, den World Coordinates beschrieben y World y Model x Model MT x World 8

Modeling Transformation II Zeitliche Wiederverwendung der Objekte möglich Typisch: Anwendung verschiedener Matrizen auf jeweils alle Vertices einzelner Teile des Objekts Alternativ: Szenenangabe direkt in World Coordinates Modeling Transformation dann überflüssig MT t=t2 y Model MT t=t1 y World MT b,t=t3 MT t=t0 x Model x World 9

Modeling Transformation III Modeling Transformation kann stattfinden: In der Applikation Im Vertex Shader Gar nicht Client Memory (Unsere Java Applikation) OpenGL Befehle Server Memory (v.a. GPU) Vertex Shader Primitive Assembly Primitive Processing Memory Rasterizer Fragment Shader Per Fragment Operations Frame- buffer Legende Vertices Fragments Pixel Data Programmable Stage Fixed Stage Memory 10

5.3 Beispiel: Translation einer Kreisgeometrie

Beispielmodell eines Kreises 1 y Modell vertex 0 Gegeben: Modell, hier: Kreis in xy-ebene Genähert durch 12 Vertices Jeder Vertex besteht aus: vertex 3 Position posmc (x i, y i, const, 1) in Modellkoordinaten 1 x Modell posmc 0 = 0,5 1 const 1 posmc 3 = 1 0,5 const 1 12

Modelling Transformation: Translation y World Ausgangsmodell wird durch Szene bewegt t 1 t 2 t 3 x World Modeling Transformation hier ausschließlich: Translation in xy-ebene Translationsmatrix zeitabhängig t 0 t 4 Ziel: Ausführung im VS y Modell x Modell 13

Vertexdatenrepräsentation Pointer vertices_in für Vertexdaten GPU: Hohe Datenbandbreite & Latenz Ziel: Gleichzeitig benötigte Daten konsekutiv speichern Enthält der Reihe nach: Alle Komponenten Aller Attribute m Aller Vertices n vertices_in = { p0 x, p0 y, p0 z, 1, float vertices = { p1 x, p1 y, p1 z, 1, float vertices = { p2 x, p2 y, p2 z, 1, } float vertices = Komponenten Attribut 0 des Vertex 0 float vertices = { p11 x, p11 y, p11 z, 1}; Komponenten Attribut 1 des Vertex 0 N/A // Daten von Vertex 0 // Daten von Vertex 1 // Daten von Vertex 2 // Daten von Vertex n-1 14

5.4 Vertex Shader für Modeling Transformation

Unser Vorgehen Gegeben: Position der Vertices der Vertices in Modeling Coordinates posmc Attribut(e) sind hinterlegt globaler Datenstruktur vertices_in Translationsmatrix: trans Gesucht: Position der Vertices in World Coordinates poswc Also Vertices berechnen: poswc = trans * posmc; Vorgehen: Zunächst Pseudo VS, wie man es selbst implementieren könnte Dann Übergang zu echtem Vertex Shader 16

Aufgabe des Vertex Shaders hier Alle Vertices... transformieren Allgemein Pseudo Vertex Shader I 1. Lies Daten aller Vertices 2. Verarbeite diese (optional) 3. Reiche, eventuell verarbeitete, Daten weiter const int vertexcnt = 12; // Unser Kreis, der hat 12 Ecken for(int vertex = 0; vertex < vertexcnt; vertex++){ <Read_Vertex_Data(vertex)> // Folie 18 <Do_Calculations(vertex)> // Folie 19 <Write_Data(vertex)> // Folie 20 } 17

Pseudo Vertex Shader II for(int vertex = 0; vertex < vertexcnt; vertex++){ // Lokale Variablen vec4 posmc; vec4 poswc; mat4 trans; Global Memory } <Read_Vertex_Data(vertex)> posmc = readposmc(vertex); trans = readtrans(); <Do_Calculations(vertex)> <Write_Data(vertex)> vertices_in = { p0 x, p0 y, p0 z, 1 p11 x, p11 y, p11 z, 1 }; vertex = 0 mat4 transmat = {t 00, t 10, t 20, t 30,, t 23, t 33 } vertex = 11 18

Pseudo Vertex Shader III for(int vertex = 0; vertex < vertexcnt; vertex++){ // Lokale Variablen vec4 posmc; vec4 poswc; mat4 trans; } <Read_Vertex_Data(vertex)> // Done <Do_Calculations(vertex)> poswc = trans * posmc; <Write_Data(vertex)> Iteration vertex = 0: Berechnet Produkt aus Matrix trans und posmc des 0-ten Vertex Iteration vertex = 11: Berechnet Produkt aus Matrix trans und posmc des 11-ten Vertex 19

Pseudo Vertex Shader IV for(int vertex = 0; vertex < vertexcnt; vertex++){ // Lokale Variablen vec4 posmc; vec4 poswc; mat4 trans; <Read_Vertex_Data(vertex)> // Done <Do_Calculations(vertex)> // Done <Write_Data(vertex)> writeposwc(vertex, poswc); } Global Memory vertices_out = { p0 x, p0 y, p0 z, 1 p11 x, p11 y, p11 z, 1 }; vertex = 0 vertex = 11 20

Pseudo Vertex Shader V for all(int v in{0,,vertexcnt-1} in parallel do{ // // } for(int v = 0; v < vertexcnt; v++){ for(int v = vertexcnt-1; v >= 0; v--){ // Lokale Variablen, haben eigenen Speicher // per Iteration vec4 posmc; vec4 poswc; mat4 trans; <Read_Vertex_Data(v)> posmc = readposmc(v); trans = readtrans(); <Do_Calculations(v)> poswc = trans * posmc; <Write_Data(v)> writeposwc(v, poswc); Zugriffe auf globalen Speicher der Schleifeniterationen unabhängig Alle Iterationen der Schleife sind unabhängig voneinander Können parallel ausgeführt werden Verschiedene R/W Kategorien der Daten posmc : in Read-Only Nimmt je Vertex anderen Wert an und wird nur für diesen verwendet trans : Read-Only Wert Vertices gleich poswc : Write-Only uniform out Nimmt je Vertex anderen Wert an und wird nur für diesen verwendet 21

Pseudo Vertex Shader VI // Unser Pseudo VS zur Translation // beliebiger Geometrie for all(int v in{0,,vertexcnt-1} in parallel do{ vec4 posmc; vec4 poswc; mat4 trans; <Read_Vertex_Data(v)> posmc = readposmc(v); trans = readtrans(); <Do_Calculations(v)> poswc = trans * posmc; // Entsprechender echter // Vertex Shader #version 330 core in vec4 posmc; uniform mat4 trans; out vec4 poswc; void main(){ poswc = trans * posmc; } <Write_Data(v)> writeposwc(v, poswc); } 22

Shader, hier: Vertex Shader // Für alle Vertices der Geometrie geschieht parallel: // 1. Erzeuge eine Instanz dieses (Vertex) Shaders // 2. Lade dessen Daten in die in Variablen aus globalem Speicher // 3. Führe darauf das Programm (Methode main) aus // 4. Schreibe Ergebnisse in out deklarierte variablen // 5. Schreibe out Variablen in globalen Speicher // Programmierer hat lediglich Einfluss auf Schritte 3 und 4. #version 330 core in vec4 posmc; // Per-Instanz (hier: Vertex) Daten aus vorherigem // Pipeline Schritt uniform mat4 trans; // Global lesbare Daten. Für alle Instanzen gleich out vec4 poswc; // Per-Vertex Daten zur weiteren Verarbeitung im // nächsten Pipeline Schritt void main(){ poswc = trans * posmc; // Berechnungen, basierend auf in und uniform // deklarierten Daten. Schreibe diese in out-variablen. } 23

#version 330 core Build-In Variablen OpenGL kennt Bedeutung der Build-In Variablen und benötigt/liefert sie für/durch nicht programmierbare Abschnitte der Pipeline Implizit deklariert in vec4 posmc; uniform mat4 trans; // out vec4 glposition; So sähe die Deklaration von glposition aus. // Entsprach im letzten Beispiel out vec4 poswc; void main(){ // Schreibe build-in out Variable glposition. // Position der Vertices wird z.b. zum Backface-Culling und // Rastern benötigt. // Daher muss OpenGL die Bedeutung dieser Variable kennen. glposition = trans * posmc; } 24