Behandelter Stoff
Datum | Kapitel | Inhalt |
---|---|---|
20.10.2015 | Einleitung | Viele nette Bilder und Beispiele, wenig Inhalt |
22.10.2015 | Farbe, Darstellung & Perzeption | Weber-Fechner-Gesetz, Abtasttheorem, Dynamikumfang, Farbwahrnehmung im menschlichen Auge; Gammakorrektur |
26.10.2015 | Übung | gdb (bt - backtrace; p - print) |
26.10.2015 | Metamerismus: Unterschiedliche Spektren können gleichen Farbeindruck erwecken Addiere/subtrahiere Farbmischung CMY / CMYK / RGB / HSV / XYZ Weber-Fechner-Gesetz: 2% heller |
|
29.10.2015 | Ray-Tracing: Kapitel 2 | Menschen nehmen Kontrastintensität und Luminenz besser als Chrominanz war.
Das ermöglicht Kompression. clear-type / subpixel Darstellung Jaggies: Unerwünschter Treppenstufen-Effekt bei Rasterisierung von Strecken Kamera: Position (x,y,z), Blickrichtung (zu einem Punkt mit Koordinaten (x,y,z)) und up-Vektor Skalarprodukt, Kreuzprodukt Baryzentrische Koordinaten, |
02.11.2015 | Übung | Rasterisierung von Linien (Implizite Darstellung) zbuffer: Tiefe des "nächsten" Polygons pro Pixel wird gespeichert Konsistenzregeln, z.B. wenn man zwei benachbarte farbige Dreiecke mit Diagonale hat und man die Farbe des Pixels berechnen muss, durch den beide Dreiecke teilweise gehen (37 Fälle; Katalog von Microsoft; macht die Hardware) |
26.11.2015 | ? | Sphere Mapping; Vorfilterung von Environment Maps |
10.12.2015 | Räumliche Datenstrukturen | BSP-Baum, kD-Baum |
14.01.2016 | OpenGL | |
18.01.2016 | Übung | Koordinatensystem-Pipeline, Shader |
19.01.2016 | Erzeugung von Landschaften | Rotes / Rosa Rauschen, Lattice Value Noise, Perlin-Rauschen |
Folien
Bilder, Farbe, Perzeption
Slide: 01_ Bilder, Farbe, Perzeption - Teil1.pdf
- Frame Buffer
- Speichert Bilder zur direkten wiedergabe auf dem Bildschirm.
- Ditherhing (Fehlerdiffusion)
- Ditherhing ist eine Methode zur Illusion einer größeren Farbtiefe.
- Gamma-Korrektur
- $$I_{\text{out}} = I_{\text{in}}^\gamma$$
- Transferfunktion
- Eine Abbildung $f$ von Farbwerten auf Helligeit: $$f: [0, N] \rightarrow [I_{\text{min}}, I_{\text{max}}]$$ Diese Abbildung ist abhängig vom Display.
- Dynamikumfang
- Der Dynamikumfang beschreibt den erreichbaren Kontrast eines Wiedergabegrätes (Bildschirm, Beamer): $$R_d = \frac{I_{\text{max}} + k}{I_{\text{min}} + k}$$ $k$ ist dabei das Umgebungslicht, $I_{max} / I_{min}$ sind Konstanten des Displays und geben die maximale bzw. minimale Helligkeit an.
- Gammut (Farbgammut)
- Der Gamut eines Monitors entspricht dem Spektrum der darauf darstellbaren Farben.
- Farbtemperatur
- Die Farbtemperatur ist ein Maß, um einen jeweiligen Farbeindruck einer Lichtquelle zu bestimmen.
- Schwarzkörper, Schwarzkörperstrahlung
- Ein Schwarzkörper ist eine idealisierte thermische Strahlungsquelle. Die idealisierung besteht darin, dass der Körper die komplette auftretende Strahlung vollständig absorbiert. Gleichzeitig sendet er Wärmestrahlung (Schwarzkörperstrahlung) aus, welche nur von seiner Temperatur abhängig ist.
Slide: 01_ Bilder, Farbe, Perzeption - Teil2.pdf
- Additive Farmbischung
- Grundfarben: Rot, Grün, Blau
Anwendung: Bildschirm - Subtraktive Farbmischung
- Grundfarben: Cyan, Magenta, Gelb
Anwendung: Drucker - Graßmansche Gesetze
- Jeder Farbeindruck kann mit 3 Grundgrößen beschrieben werden.
- Weber-Fechner-Gesetz
- Das Weber-Fechner-Gesetz macht eine Aussage über die subjektiv empfundene Stärke von Sinneseindrücken im Abhängigkeit von der Intensität des Helligkeitsunterschiedes: $$E = c \cdot \frac{R}{R_0}$$ wobei $E$ die empfundene Reizstärke, $c$ eine Konstante, $R$ die tatsächliche Reizstärke und $R_0$ eine Referenzreizstärke ist.
- RGB-Farbraum: Addition der Spektren, wird bei CRT/LCD-Farbmonitoren verwendet.
- CMY, CMYK: Subtraktive Farbmischung, wird bei Druckern verwendet. K (schwarz) nur aus praktischen Gründen.
- HSV-Farbraum: Weder Additiv noch subtraktiv, wird bei Benutzerschnittstellen verwendet
- CIE Color Matching Functions
- XYZ Color Space: Farbraum für Konversion zwischen Farbräumen
- Chromatizität
- xyY Farbraum
- Machsche Streifen / Bandeffekte
- Hermann-Gitter / Laterale Hemmung
- Windows clear type / Subpixel
Raytracing
Side: 02_ Raytracing (enthalt Abtastung aus Kapitel 1).pdf
- Ray-Tracing
- Ray-Tracing ist ein Verfahren zum Erzeugen Fotorealistischer Bilder.
Dabei geht man prinzipiell wie folgt vor:
- Strahlerzeugung: Für jeden Pixel werden Sichtstrahlen erzeugt
- Schnittberechnung: Finde das primitiv (z.B. Dreieck) welches der Strahl schneidet und welches am nächsten zur Kamera ist und vor der Kamera liegt.
- Schattierung: Beleuchtungsberechnung (shading)
- Phong-Beleuchtungsmodell
- Das Phong-Beleuchtungsmodell besteht aus 3 Komponenten:
- Ambiente Beleuchtung: Materialkoeffizient $k_a$. Ambiente Beleuchtung ist indirekte Beleuchtung, also Licht von anderen Oberflächen
- Diffuse Beleuchtung: Materialkoeffizient $k_d$. Diffuse Beleuchtung ist die Streuung des Lichts nahe beim "Streupunkt" (nach dem Lambertschen Gesetz).
- Spekulare Beleuchtung: Materialkoeffizient $k_s$ sowie Phong-Exponent $n$. Unter spekularer Beleuchtung versteht man direkte Spiegelung der Lichtquelle (imperfekte Spiegelung)
- Z-Fighting
- Polygone, welche in der selben Ebene liegen führen zu einem Flackern welches der beiden Polygone nun angezeigt wird. Dies kann verhindert werden, indem eines der Polygone minimal verschoben wird.
- Tessellation
- Parkettierung, also das Füllen einer Fläche mit Primitiven.
- Distributed Ray Tracing
- Bilder welche mit dem Whitted-Style Ray Tracing Verfahren gerendert wurden sehen zu perfekt aus. Die perfekte Spiegelung und Trasmission, die harten Schattenkanten und die unendliche Schärfentiefe kennen wir von realen Kameras so nicht. Distributed Ray Tracing ist eine alternative zu Whitted-Style Ray Tracing, welche diese Probleme zu lösen versucht. Dabei wird bei jeder Spiegelung nicht ein Schattenstrahl verschickt, sondern viele welche sich um den "Perfekten" Strahl konzentrieren.
- Nyquist-Shannon-Abtasttheorem
- Vektoren, Ortsvektoren, Skalarprodukt
- Parametrisierte Geraden- und Ebenendarstellung
- Baryzentrische Koordinaten
- Strahl-Kugel-Schnitt
- Spekulare Reflektion
- Diffuse (Lambertsche) Reflektion
- BRDF - Bidirectional Reflectance Distribution Function
- Phong Beleuchtungsmodell
- Snellsches Brechungsgesetz
- Fresnel-Effekt
- Anti-Aliasing Strategien: Uniformes Supersampling, Adaptives Supersampling, Stochastisches Supersampling
- Schattenstrahlen
- Bewegungs- und Tiefenunschärfe
- Imperfekte Spiegelung und Transmission
Übungsfolien: 01_ Rasterisierung.pdf
- Rasterisierung von Linien
- Brute-Force
- Inkrementelle Berechnung
- Bresenham Algorithmus
- Rasterisierung von Polygonen
- Sichtbarkeitsproblem
- Maler-Algorithmus (Painters algorithm)
- Vorgehen: Sortiere Dreiecke von hinten nach vorne und zeichne sie so.
- Probleme: Abstandsmaß / Zyklen
- Maler-Algorithmus (Painters algorithm)
Übungsfolien: 07_ Distributed Raytracing.pdf
Hier sind eigentlich nur schöne Bilder. Ohne Kontext bringt der Foliensatz nichts :-/
- Distributed Raytracing kann Tiefenunschärfe, weiche Schatten und indirekte Beleuchtung.
- Monte Carlo Integration
- Pathtracing
- Many-Lights Method
- Voxel Cone Tracing
- Radiance Caches
- Finite Elemente / Radiosity
Transformationen und homogene Koordinaten
Slide: 03_ Transformationen und homogene Koordinaten.pdf
- Orthogonale Matrix
- Eine quadratische Matrix $M \in \mathbb{R}^{n \times n}$ heißt genau dann orthogonal, wenn $$M^T \cdot M = M \cdot M^T = I_{n \times n}$$ Für orthogonale Matrizen gilt also $M^{-1} = M^T$
- Homogene Koordinaten
- Der euklidische bzw. affine Raum wird um sog. Fernpunkte ergänzt.
- Rotation
- Die Rotation um (0, 0) in homogenen Koordinaten geht wie folgt: $$\begin{pmatrix}\cos \alpha & -\sin \alpha & 0\\ \sin \alpha & \cos \alpha & 0 \\ 0 '& 0 & 1\end{pmatrix}$$
- Skalierung
- Eine Skalierung in homogenen Koordinaten geht wie folgt: $$\begin{pmatrix}s_x & 0 & 0 & 0\\ 0 & s_y & 0 & 0\\ 0 & 0 & s_x & 0\\ 0 & 0 & 0 & 1\end{pmatrix}$$
- Scherung
- Eine Scherung in homogenen Koordinaten geht wie folgt: $$\begin{pmatrix}1 & 0 & d_x & 0\\ 0 & 1 & d_y & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\end{pmatrix}$$
- Koordinatensysteme
-
- Objektkoordinaten: Sie werden durch die Modelltransformation zu
- Weltkoordinaten: Sie werden durch die Kameratransformation zu
- Kamerakoordinaten
- Transformationen werden grundsätzlich so dargestellt: $$x' \gets M \cdot x$$ Es wird also der zu transformierende Vektor von rechts mit der Transformationsmatrix $M$ multipliziert.
- Spiegelung an der $y$-Achse ist eine Multiplikation der $x$-Koordinaten mit (-1)
- Hierarchisches Modellieren, Szenengraph
Übungsfolien: 02_ Bildoperationen.pdf
- Filter (Bildfilter)
- Ein Bildfilter ist ein Algorithmus, welcher als Input ein Bild bekommt
und als Output ein Bild liefert.
Typischerweise werden lineare Filter verwendet.
Beispiele:
- Helligkeitsänderung
- Kontraständerung (z.B. unschärfe (blur), schärfen (sharpen))
- Desaturierung
- Kantendetektion
- Linearer Filter
- Gewichtete Summe benachbarter Pixel-Werte. Siehe Interaktives Beispiel
- Morphologische Filter
- Strukturverändernde Operation (z.B. Dilatation, Erosion, Öffnung, Schließung)
Texturen
Slide: 04_ Texturen.pdf
- Texturen
- Texturen können vielfältig eingesetzt werden:
- Klassische Feinstrukturierung
- Reflektionseigenschaften
- Farbe
- Normalenvektoren (Bump- oder Normal mapping)
- Beleuchtung
- Environment Mapping, Reflection Mapping
- Shadow Mapping, Light Mapping
- Geometrie (Displacement Mapping)
- Normale des Hilfskörpers auf das Objekt
- Normale des Objekts auf den Hilfskörper
- Linie durch den Mittelpunkt des Objekts auf den Hilfskörper
- Environment Map
- Eine Environment-Map ist eine Textur zur Darstellung der Umgebung.
Bei Einvironment-Maps nimmt man an, dass der Betrachter weit genug von
der Umgebung entfernt ist, sodass die Position keine Rolle spielt und
ausschließlich die Blickrichtung wichtig ist.
Übliche Parametrisierungen von Environment-Maps sind:
- Cube Maps
- + ist bei korrekter Filterung nahtlos
- + keine Singularität am Rand
- Sphere Maps
- - Singularität am Rand
- + mit Kamera, Chromkugel und Photoshop kann sie recht einfach aufgenommen / erstellt werden
- LatLong-Map
- - die Pole werden ungleichmäßig abgetastet
- Cube Maps
- Cube Map
- Um den Hintergrund darzustellen, kann man die Szene in einen von
innen texturierten Cubus stecken. Ein Reflektionsrichtung $\mathbf{r} = (r_x, r_y, r_z)$
bestimmt den Punkt auf dem Mantel des Würfels.
Die betragsmäßig größte Komponente von $\mathbf{r}$ bestimmt, welche
Würfelfläche (links, rechts, vorne, hinten, oben, unten) genommen wird.
Abhängig von der orientierung des koordinatensystems in bezug auf die
Cube map kann sich dann also folgende Regel ergeben:
- Wenn $|r_x|$ am größten ist, ist es rechts (< 0) oder links (> 0),
- wenn $|r_y|$ am größten ist, ist es vorne (< 0) oder hinten (> 0)
- wenn $|r_z|$ am größten ist, ist es oben (< 0) oder unten (> 0)
- Mip-Map (Mip map, Mipmap, Auflösungspyramide)
- Mip steht für lat. multum in parvo (viel in wenig). Eine
Mip-Map ist eine Vorfilterung von Texturen. Mip-Mapping hilft, wenn man
in einem sehr flachem Winkel auf eine Ebene blickt.
In einer Mip-Map wird die Original-Textur gespeichert, dann in der
ersten Stufe eine Textur welche in beiden Dimensionen auf die hälfte
verkleinert wurde (also 1/4 der ursprünglichen Größe).
Es wird diejenige Mip-Map Stufe $n$ gewählt, sodass gilt
$$\text{Texelgröße}(n) \leq \text{Größe Pixelfootprint auf Textur} < Texelgröße(n+1)$$
Dann wird eine Trilineare Interpolation der 8 nächsten Texel durchgeführt:
- Bilinear auf Stufe $n$, bilinear auf Stufe $n+1$
- linear zwischen diesen beiden Farben
- Isotrope Texturfilterung
- Eine Texturfilterung heißt isotrop, wenn sie in alle Richtungen gleich ist. Anisotrope Texturfilterungen sind gewünscht, weil sie in die Tiefe schärfe erhalten können, wohingegen isotrope Texturfilterung in die ferne unscharf wirken können. RIPmaps sind anisotrope Texturfilterungen.
Übungsfolien: 04_ Texturen und Transformationen.pdf
- Limitationen von Whitted-Style Raytracing
- Keine Kaustiken oder korrekte Dispersion
- Keine indirekte Beleuchtung
- Keine Flächenlichtquellen
- Kein Motion-Blur oder Tiefenunschärfe
- Stratified Supersampling
- Strahlen werden durch zufällige Superpixelpositionen geschossen, aber möglichst gleichmäßig um Klumpen zu vermeiden.
- Transformationen
- Texturen
- Repeating / Clamping
- Bilineare Filterung
- Aliasing bei Verkleinerung
- Lösung: Überabtastung oder Vorfilterung (z.B. Mip-Maps)
- Mip-Maps
- Auswahl der richtigen Texturgröße
Räumliche Datenstrukturen
Slide: 05_ Raumliche Datenstrukturen.pdf
(10.12.2015)
- Räumliche Datenstrukturen
-
- Hüllkörper
- Axis-Aligned Bounding Boxes (AABB)
- Bounding Volume Hierachies (BVH)
- Reguläre Gitter
- Oktalbaum (Octree)
- kD-Baum
- Hüllkörper
- AABB (Axis-Aligned Bounding Box)
- Axis-Aligned Bounding Boxes sind Rechtecke (Quader in 3D), deren Seiten parallel zu den Achsen des Koordinatensystems stehen. Sie werden als Hüllkörper verwendet. Alles wichtige zu AABBs kann man in Folie 18 - 29 nachlesen.
- BSP-Baum (Binary Space Partition Baum)
- Teile den Raum mithilfe von Ebenen in zwei Teile. Die Ebenen dürfen beliebig im Raum liegen. Somit wird eine Baumstruktur aufgebaut, welche den Raum in immer kleinere Teile teilt.
- kD-Baum
- Ein BSP-Baum, welcher nur achsenparallele Ebenen erlaubt. Der Raum wird also mit achsenparallelen Hyperebenen geteilt; es entsteht ein Binärbaum welcher den Raum partitioniert.
- Surface Area Heuristic (SAH)
- Wähle die Split-Ebene so, dass die Kosten der Traversierung minimiert werden.
- Bounding-Volume-Hierachies (BVH)
- BVHs sind eine Datenstruktur, welche den Raum in Hüllkörper unterteilt.
Man hat also komplexe Objekte. Für diese Objekte muss man Schnittests
machen. Das bedeutet im einfachsten Fall, dass man für $n$ Dreiecke
und einen Strahl genau $n$ Schnittests machen muss.
Interessanterweise dürfen sich Hüllkörper überlappen.
Nun könnte man aber - je nach den Objekten - diese in jeweils zwei
Quader unterteilen. Wenn der Strahl nur einen Quader schneidet, dann muss
man auch nur für die Objekte in diesem Quader Schnittests durchführen.
Innerhalb des Quaders kann man natürlich noch weiter die Objekte in
Hüllkörper (üblicherweise Quader) unterteilen.
Typische Hüllkörper sind:
- AABB: Axis-Aligned Bounding Boxes
- Bounding Spheres
- OBB: Oriented Bounding Boxes
- Slabs: Schnitt von Paaren paralleler Halbebenen
- Die SAH ist ein Kriterium zum aufbau von BVHs / kD-Bäumen. Im Mittel sollen zufällige Strahlen, die den betrachteten Knoten schneiden, den gleichen Aufwand verursachen, egal welcher Kindknoten traversiert wird
- Oktalbäume (Octree)
- Gitter
- Schnitttests können beschleunigt werden, indem über den Raum ein Gitter gelegt wird. Der Raum wird also in kleinere Teile zerlegt.
- Ein Octree unterteilt einen Quader in 8 kleiner Quader. Diese können wiederum in 8 kleinere Quader unterteilt werden.
- Mailboxing
- Speichern des Ergebnisses eines Schnitttests mit einem Objekt, um erneute Schnitttests zu verhindern.
Übungsfolien: 05_ BVH.pdf
- Median-Split: Die Entscheidung wird anhand der Mittelpunkte der AABBs getroffen.
Rasterisierung, Clipping und Projektionstransformationen
Side: 06_ Rasterisierung, Clipping und Projektionstransformationen.pdf
- Tiefenpuffer (Z-Buffer)
- Es wird ein Bild gespeichert, welches für jeden Pixel die Tiefe des vordersten Objekts angibt.
- Tiefentest
- Finden des Bildteiles, der für einen gegebenen Pixel am nächsten vor der Kamera ist.
- Clipping
- Abschneiden von Linien und Poligonen, die außerhalb des sichtbaren Bereichs liegen. Dies ist wichtig für die behandlung problematischer Fälle bei Projektionen.
- Algorithmus von Sutherland-Hodgeman
- Dient dem Clipping von Polygonen.
- Frustum
- Ein Frustum ist ein Kegelstumpf, wobei in der Computergrafik eher ein Pyramidenstumpf gemeint ist. Das View Frustum ist der Bereich der Szene, der sichtbar ist.
- Outcodes
- Outcodes sind ein 4-Bit binärcode für die Bereiche um die Zeichenebene: $$(x < x_{\text{min}}, x > x_{\text{max}}, y < y_{\text{min}}, y > y_{\text{max}})$$
Übungsfolien: 09_ Clipping.pdf
- Clipping von Linien
- Ein Rechteck $(x_{\text{min}}, x_{\text{max}}, y_{\text{min}}, y_{\text{max}})$ und eine Linie $P_1 = (x_1, y_1), P_2 = (x_2, y_2)$ ist gegeben. Es gibt den "trivial reject" Fall, bei dem die komplette Linie außerhalb liegt und den "trivial accept" Fall, bei dem die komplette Linie innerhalb des Rechtecks liegt.
- Cohen-Sutherland Algorithmus
- Der Cohen-Sutherland Algorithmus dient dem Clipping von Linien mit
einem Rechteck.
Man unterteilt die Ebene, in der das Rechteck liegt in 9 Bereiche:
(links oben, links mitte, links unten, mitte oben, mitte mitte,...).
Die Punkte bekommen nun jeweils einen "Outcode" der ihre Position
bzgl. dieser Bereiche bestimmt:
$$\text{Outcode} = (x < x_{\text{min}}, x > x_{\text{max}}, y < y_{\text{min}}, y > y_{\text{max}})$$
Mit den Outcodes gilt nun:
- Trivial Accept: Outcode($P_1$) $\lor$ Outcode($P_2$) = 0
- Trivial Reject: Outcode($P_1$) $\land$ Outcode($P_2$) $\neq$ 0
- $\alpha$-Clipping
- Führe Window Edge Coordinates (WEC) ein. Diese sind ein vorzeichenbehafteter Abstand zu den Clipping-Kanten. Wenn eine Koordinate negativ ist, dann liegt der Punkt außerhalb des Rechtecks. Ich habe den Algorithmus in Python-Pseudocode geschrieben.
- Sutherland-Hodgeman Polygon Clipping
- Clipping wird Kante für Kante durchgeführt.
OpenGL
Slides: 07_ OpenGL (freiwilliges Bonusmaterial).pdf
, 07_ OpenGL (Teil 1).pdf
, 07_ OpenGL (Teil 2 und 3).pdf
- GL
- Short for "Graphics Library"
- GLUT
- OpenGL Utility Toolkit: Window manipulation, mouse and keyboard interactions.
- Shading
-
- Flat shading: \begin{align} n &= \langle x_1-x_2, x_3-x_2\rangle\\ f &= \langle n , L \rangle^+ \cdot (\lambda_1 c_1 + \lambda_2 c_2 + \lambda_3 c_3) \end{align}
- Gouraud-Shading \begin{align} c'_i &= c_i \langle n_i, L \rangle^+\\ f &= \lambda_1 c'_1 + \lambda_2 c'_2 + \lambda_3 c'_3 \end{align}
- Phong-Shading \begin{align} n &= \lambda_1 n_1 + \lambda_2 n_2 + \lambda_3 n_3\\ f &=\langle n , L \rangle^+ \cdot (\lambda_1 c_1 + \lambda_2 c_2 + \lambda_3 c_3) \end{align}
- Gouraud Shading
- Berechne Parameter wie z.B. Farbe an den Eckpunkten; interpoliere innerhalb des Polygons.
- Phong Shading
- Beleuchtungsberechnung mit interpolierter Normalen. Phong-Shading hat mit dem Phong-Beleuchtungsmodell inhaltlich nichts zu tun.
- Backface Culling
- Dreiecke, auf deren Rückseite man blickt werden üblicherweise nicht
gezeichnet. (
glEnable(GL_CULL_FACE); glCullFace(GL_BACK);
) - Stencil-Puffer
- Ein Stencil-Puffer ist eine Stanzmaske, welche für jeden Pixel im Framebuffer einen 8-bit Wert speichert. Im einfachsten Fall begrenzt der Stencil-Puffer das Renderinggebiet.
In order to use GLUT, you need to include:
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
OpenGL-Funktionen:
gluLookAt
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT )
Keyword in Shadern:
in
: Input-Variableout
: Output-Variableuniform
: Bei jedem Shader-Aufruf gleich (also insbesondere für jeden Vertex gleich); read-only; z.B. Transformationsmatrixattribute
: Attribut eines Vertex; nur für Vertex-Shader; z.B. Farbe oder Normalevarying
: weitergegebene/interpolierte Werte (schreiben in einem Shader, lesen im darauffolgenden Shader)
In Vertex-Shadern:
gl_Position = P * V * M * vec4(position, 1.0);
Siehe auch:
Übungsfolien: 08_ Shaders.pdf
- Rasterisierungspipeline
- Geometrie-Verarbeitung
- Rasterisierung
- Pro-Fragment Operationen
- Koordinatensystem-Pipeline
- Objekt-Koordinaten
- Welt-Koordinaten
- Kamera-Koordinaten
- Clip Space Koordianten
- Normalisierte Geräte-Koordinaten
- Bildschirm-Koordinaten
- Vertex-Shader
- Eingabe:
- Position
- Normale
- Farbe oder Texturkoordinate
- Weitergeleitete Vertex-Attribute
- Position nach MVP-Transformation
- Fragment-Shader
- Eingabe:
- Interpolierte Vertex-Attribute
- Beleuchtungsinformationen
- Farbe des Fragmentes
- Shading
-
- Flat Shading: Beleuchtungsberechnung pro Vertex (oder pro Fragment) mit Facetten-Normale
- Gouraud-Shading: Beleuchtungsberechnung pro Vertex mit gemittelter Normale der anliegenden Facetten
- Phong-Shading: Shading bzw. Beleuchtungsberechnung pro Fragment mit interpolierter Normale
- Cube-Maps
- Diffuse Vorfilterung
- Texturzugriffe in GLSL
Prozedurale Modellierung, Content Creation
Slides: 08_ Prozedurale Modellierung, Content Creation.pdf
am 19.01.2016
- Rauschfunktion (Noise-Funktion)
- Eine Funktion
$$n: \mathbb{R}^n \rightarrow [a, b] \subsetneq \mathbb{R}$$
heißt Rauschfunktion, wenn gilt:
- Periodenfrei: Eine Rauschfunktion darf keine sichtbare Periodizität aufweisen.
- Räumliche Korrelation: $n(\mathbf{x}) \approx n(\mathbf{x} + \varepsilon)$
- definierte Frequenzverteilung, bandlimitiert (Aliasing reduzieren)
- Perlin-Rauschen (Perlin-Noise)
- Zufallszahlen-Pool + Hash + Permutation
- Oktave
- Sammlung von Rauschfunktionen
- Turbulenzfunktion
- Eine Turbulenzfunktion summiert $k$ Ergebnisse (Oktave) mehrerer
Rauschfunktionen auf:
$$\text{turbulence}(x) = \sum_k \left (\frac{1}{2} \right )^k \cdot n (2^k \cdot x)$$
Einsatzgebiete:
- Natürliche Oberflächen
- Feuer
- Pixelbasierte Textursynthese
- Man hat ein kleines Beispiel (Exemplar) und erzeugt daraus - Pixel für Pixel - eine komplette Textur. Dieses Verfahren ist langsam.
- Patchbasierte Textursynthese
- Verwende bei der Texturgenerierung nicht nur einzelne Pixel aus dem Beispiel, sondern größere Patches.
- Lindenmayer-System (L-System)
- Ein Lindenmayer-System ist eine Grammatik $G = (V, \Sigma, \omega, P)$,
wobei
- $V \neq \emptyset$ das Alphabet ist,
- $\Sigma \subseteq V$ die Menge der Konstanten ist,
- $\omega \in V^*$ das Startwort ist,
- $P \subseteq (V^* \setminus \Sigma^*) \times V^*$ die Menge der Ersetzungsregeln ist
Slides: 08_ Prozedurale Modellierung (freiwilliges Bonus Material).pdf
- Turbulenz-Texturen
- z.B. Diamon Square / Midpoint Displacement Algorithmus
- Prozedurale Shader
- Raymarching
- Fraktale / Mandelbrot-Menge
- L-Systeme / D0L-Systeme
Kurven und Flächen
Slides: 09_ Kurven und Flachen.pdf
- Kubische Bézierkurven
- Kubische Bézierkurven sind von der Form $$f(u) = (1-u)^3 b_0 + 3u (1-u)^2 b_1 + 3u^2 (1-u) b_2 + u^3 b_3$$ wobei $b_0, b_1, b_2 \in \mathbb{R}^n$ und $u \in [0, 1]$ gilt. Diese Faktoren (also $(1-u)^3, 3u (1-u)^2, 3u^2 (1-u), u^3$) werden auch Bernstein-Polynome genannt. Genau wie die Monome sind sie eine Basis für Polynome.
- Bernstein-Polynome
- $$B_i^n(u) = \binom{n}{i} u^i (1-u)^{n-i}$$
- Béziersplines
- Ein Bézierspline ist eine Liste von Bézierkurven.
- $C^k$-stetige Splines
- Es seien
\begin{align}F(u) &= \sum_{i=0}^n B_i^n(u) \mathbf{f}_i\\ G(u) &= \sum_{i=0}^n B_i^n(u) \mathbf{g}_i\end{align} Der Spline aus $F, G$ heißt
- $C^0$ stetig $:\Leftrightarrow F(1) = G(0) \Leftrightarrow \mathbf{f}_n = \mathbf{g}_0$
- $C^1$ stetig $:\Leftrightarrow F'(1) = G'(0) \land C^0 \Leftrightarrow \mathbf{f}_n - f_{n-1} = \mathbf{g}_1 - \mathbf{g}_0 \land C^0$
- $C^2$ stetig $:\Leftrightarrow F''(1) = G''(0) \land C^1 \Leftrightarrow \mathbf{f}_{n-1} + (\mathbf{f}_{n-1} - \mathbf{f}_{n-2}) = \mathbf{g}_{1} + (\mathbf{g}_{1} - \mathbf{g}_{2}) \land C^1$
- B-Splines
- TODO
- Algorithmus von De Casteljau
- Siehe Code.
Übungen
Blatt 1
Das Framework bekommt man ohne VM unter Ubuntu 15.04 nach der Installtion folgender Pakete (vielleicht) zum laufen:
$ sudo apt-get install cmake xorg-dev libglu1-mesa-dev freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libglfw3
Wenn ihr den Fehler
error adding symbols: DSO missing from command line ubuntu
bekommt, dann solltet ihr einfach die obigen Pakete installieren, den
build
-Ordner löschen und es neu versuchen.
Außerdem:
$ pacman -Syy
ausführen. Dann bekommt man auch nicht mehr 404er wenn man mit
$ pacman -S vim
vim installieren will.
In der VM sollte unter Settings → System → Acceleration die Option "Enable VT-x/AMD-V" aktiviert sein. Zusätzlich sollte im BIOS des Host-Systems (also von eurem Rechner) die "Intel Virtualization Technology" aktiviert sein. (Man Laptop hat das nicht - bei mir funktionieren die Beispiele in der VM aber auch nicht :-/)
Blatt 6
Material und Links
- Vorlesungswebsite
- Übungswebsite
- E-Mail Verteiler
- Inoffizielle Musterlösungen für die Altklausuren
Siehe auch
- World, View and Projection Transformation Matrices
- How to calculate transformation matrix
- Martin Thoma: Interactive Graphic Filters example
- Interactive Blending example (OpenGL)
- Martin Thoma: Minimal OpenGL example
- Martin Thoma: alpha-cliping pythonic pseudocode
- Minimal GLSL example
- A Primer on Bézier Curves
- StackExchange:
- Íñigo Quílez: Raymarching Distance Fields
Software
- OpenGL
- OpenGL Tutorial 3 : Matrices
- OpenGL Cheat Sheet
- glBegin / 2
- Terragen: Erzeugung von Landschaften
- xfrog: Erzeugung von Pflanzen
Literatur
- P. Shirley, S. Marschner: Fundamentals of Computer Graphics, 3rd Edition
→ Kapitel 3-9, Kapitel 11-12 (Data Structures for Graphics)
Übungsbetrieb
Es gibt Übungsblätter und Übungen, aber keine Tutorien und keine Bonuspunkte.
Um das Modul zu bestehen wird der Übungsschein benötigt. Für den Übungsschein benötigt man 60% der Punkte der Übungsblätter. Die Übungsblätter werden über submit.ivd.kit.edu eingereicht. Die Übungsblätter erscheinen alle 2 Wochen. Es gibt also min. 6 Übungsblätter und min. 120 Punkte. Die Deadline ist Montag, 11:00.
Termine und Klausurablauf
Datum: Mittwoch, der 09.03.2015 von 14:00 Uhr (Quelle: informatik.kit.edu)
- 08.02.2016: Die Klausur-Anmeldung wird freigeschalten
- 04.03.2016: Anmeldeschluss
- 06.03.2016: Abmeldeschluss
Ort:
- A... - Kon...: Benz-Hörsaal Geb. 10.21
- Kop... - Stumpf...: Daimler-Hörsaal Geb. 10.21
- Stumpp... - Z...: Redtenbacher Hörsaal Geb. 10.91, Raum 050
Punkte: 120
Zeit: 60 min
Punkteverteilung: ?
Bestehensgrenze: ?
Übungsschein: Gibt es. Dieser wird für das Modul, aber nicht für die Klausur benötigt. Mit mindestens 72 Punkten (60% von 120 Punkten) hat man den Übungsschein.
Bonuspunkte: Gibt es nicht.
Ergebnisse: ?
Einsicht: Noch nicht bekannt (Stand: 29.03.2016)
Erlaubte Hilfsmittel:
- Stift
- Geodreieck
- Zirkel