Kapitel 1-4 beautify
This commit is contained in:
parent
298cd1dd78
commit
429f31dd77
Binary file not shown.
@ -252,8 +252,6 @@
|
||||
|
||||
\newpage
|
||||
\section{Modellierung}
|
||||
\subsection{Geometrische Modellierung}
|
||||
computergestütze Beschreibung der Form geometrischer Objekte
|
||||
|
||||
\paragraph{Boundary Representation (B-Rep)}
|
||||
\begin{itemize*}
|
||||
@ -266,8 +264,8 @@
|
||||
\item Kantenliste: pro Kante zwei Punkte referenziert
|
||||
\item Flächenliste: pro Fläche die Reihenfolge der Kanten
|
||||
\end{itemize*}
|
||||
\item Szene: dreidimensionale Beschreibung von Objekten, Lichtquellen und Materialeigenschaften mit virtuellen Betrachter
|
||||
\item Szenegraph: hierarchische Gruppierung der Objekte in einer Szene
|
||||
\item Szene: dreidimensionale Beschreibung von Objekten, Lichtquellen und Materialeigenschaften mit Betrachter
|
||||
\item Szenegraph: Gruppierung der Objekte in einer Szene
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Rendering}
|
||||
@ -278,16 +276,8 @@
|
||||
\item verarbeitet alle Eckpunkte (Vertices) mit Shader
|
||||
\item ermöglicht eine Beeinflussung der Objektform
|
||||
\item Transformation der 3D Position auf 2D Koordinaten
|
||||
\item Input
|
||||
\begin{itemize*}
|
||||
\item Vertices relevanter Objekte der Szene
|
||||
\item gewünschte Transformation
|
||||
\end{itemize*}
|
||||
\item Output
|
||||
\begin{itemize*}
|
||||
\item auf Bildschirm projizierte 2D Koordinaten
|
||||
\item zugehörige Tiefeninformationen
|
||||
\end{itemize*}
|
||||
\item Input: Vertices relevanter Objekte der Szene; gewünschte Transformation
|
||||
\item Output: auf Bildschirm projizierte 2D Koordinaten und zugehörige Tiefeninformationen
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Model View Projection}
|
||||
@ -314,11 +304,11 @@
|
||||
\subsection{Effiziente geometrische Datenstrukturen}
|
||||
\paragraph{Bintree}
|
||||
\begin{itemize*}
|
||||
\item effizientes Suchen und Einfügen in eindimensionale Domänen
|
||||
\item Suchen und Einfügen in eindimensionale Domänen
|
||||
\item logarithmische Komplexität pro Zugriff möglich
|
||||
\item Gefahr: lineare Komplexität, wenn nicht balanciert
|
||||
\item typisch Teilung in Mitte (bisektion)
|
||||
\item Bereiche mit homogenem Inhalt (gleiche Farbe) werden nicht weiter unterteilt
|
||||
\item Bereiche mit homogenem Inhalt werden nicht unterteilt
|
||||
\item Komprimierungseffekt
|
||||
\end{itemize*}
|
||||
|
||||
@ -335,7 +325,7 @@
|
||||
\item Objekte in hierarchische Strukturen einsortiert
|
||||
\item jeder Knoten hat 0 oder 8 Kindknoten (8 Unterbereiche)
|
||||
\item beschleunigte räumliche Suche
|
||||
\item Zeitaufwand Tiefe des Baumes $O(log n)$
|
||||
\item Zeitaufwand Tiefe des Baumes $O(\log n)$
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{KD Tree}
|
||||
@ -350,7 +340,6 @@
|
||||
\item Baum garantiert balanciert und Tiefe minimal
|
||||
\item $O(\log n)$ Verhalten garantiert
|
||||
\item Probleme bei lokalen Häufungen (Cluster)
|
||||
\item vollständig balanciert
|
||||
\item unnötige Unterteilung weit weg (Artefakt)
|
||||
\end{itemize*}
|
||||
\item Middlecut-Strategie:
|
||||
@ -366,31 +355,31 @@
|
||||
\item Verallgemeinerung des kd-Baums
|
||||
\item Trennebenen nicht nur achsenparallel
|
||||
\item Unterteilung in beliebigen Richtungen, adaptiv an Modellflächen angepasst
|
||||
\item Trennebenen die an einer Objektebene anliegen können dennoch weiter wegliegende Objekte schneiden.
|
||||
\item Trennebenen die an einer Objektebene anliegen können dennoch weiter weg liegende Objekte schneiden.
|
||||
\item führt bei konvexen Polyedern zu entarteten Bäumen
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Hüllkörper Hierarchie}
|
||||
\begin{description}
|
||||
\item[AABB] (Axia-Aligned-Bounding-Box) sehr einfache Abfrage (nur ein Vergleich < in jeder Koordinatenrichtung, wie bei kd-Baum) einfach zu erstellen (min, max), dafür nicht optimale Packungsdichte bei schräger Lage der Objekte
|
||||
\item[AABB] (Axia-Aligned-Bounding-Box) sehr einfache Abfrage (nur ein Vergleich $<$ in jeder Koordinatenrichtung, wie bei kd-Baum) einfach zu erstellen (min, max), dafür nicht optimale Packungsdichte bei schräger Lage der Objekte
|
||||
\item[OBB] (Oriented Bounding Boxes) passen sich besser der räumlichen Ausrichtungen an, lassen sich auch leicht transformieren (Rotation bei Animation). Jedoch schwieriger zu erstellen (Wahl der Richtung), komplexere Überlappungsberechnung (Transformation, Ebenengleichung). Typischerweise weniger tief, weniger räumliche Abfragen dafür wesentlich mehr Berechnungsaufwand pro Rekursionsstufe.
|
||||
\item[KDOP] (k-dim. Discretly Oriented Polytopes) Polyeder mit festen vorgegebenen Richtungen (z.B. 45 Grad). Eigenschaften zwischen AABB und OBB. Bessere Raumausnützung als AABB, weniger Transformationene als OBB.
|
||||
\item[BS] (Bounding Spheres) Schnelle 3D Überlappungstest (Abstand der Mittelpunkte < Summe der Radien). Langgezogene Objekte können mit mehreren Hüllkugeln begrenz werden um besseren Füllgrad zu erreichen. BS sind bis auf die Lage der Kugelmittelpunkte invariant gegenüber Rotation (geeignet für Kollisionserkennung bewegter Objekte/Animation).
|
||||
\item[BS] (Bounding Spheres) Schnelle 3D Überlappungstest (Abstand der Mittelpunkte $<$ Summe der Radien). Langgezogene Objekte können mit mehreren Hüllkugeln begrenz werden um besseren Füllgrad zu erreichen. BS sind bis auf die Lage der Kugelmittelpunkte invariant gegenüber Rotation (geeignet für Kollisionserkennung bewegter Objekte).
|
||||
\item[weitere Anwendungsfälle] Kollisionserkennung in Computeranmiation. Reduktion der potenziellen Kollisionspaare durch räumliche Trennung. Beschleunigung des Echtzeitrenderings großer Datenmengen. Reduktion des Aufwands durch Culling (Weglassen)
|
||||
\end{description}
|
||||
|
||||
\paragraph{Ray Picking mit KD Baum}
|
||||
\begin{itemize*}
|
||||
\item Vorverarbeitun von Objekten (Dreiecken) im kd-Baum $O(n \log n)$
|
||||
\item Vorverarbeitung von Objekten im kd-Baum $O(n \log n)$
|
||||
\item Strahl/Objektschnitt: als rekursive Suche im kd-Baum
|
||||
\item `treeIntersect(p,d)`: Findet Schnittpunkt des Strahls (Punkt p, Richtung d) mit den im Baum gepseicherten Dreiecken und liefert die Beschreibung des nächsten Schnittpunktes bzw t=unendlich, falls kein Schnittpunkt existiert
|
||||
\item `triangleIntersect(node,p,d)`: Findet Schnittpunkt des Strahles (Punkt p, Richtung d) mit einer Menge von Dreiecken in node
|
||||
\item `subdivide(node, p, d, tmin, tmax)`: Findet rekursiv den nächstgelegenen Schnittpunkt (kleinstes t) des Strahls (p,d) mit den Dreiecken in oder unterhalb von node im Parameterbereich tmin ...tmax
|
||||
\item $treeIntersect(Punkt,Richtung)$: Findet Schnittpunkt des Strahls mit den im Baum gespeicherten Dreiecken und liefert Beschreibung des nächsten Schnittpunktes bzw. t=unendlich, falls kein Schnittpunkt existiert
|
||||
\item $triangleIntersect(node,Punkt,Richtung)$: Findet Schnittpunkt des Strahles mit Menge von Dreiecken in node
|
||||
\item $subdivide(node, p, d, t_{min}, t_{max})$: Findet rekursiv den nächstgelegenen Schnittpunkt (kleinstes t) des Strahls (p,d) mit den Dreiecken in oder unterhalb von node im Parameterbereich $t_{min} ...t_{max}$
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Aufwandsabschätzung bzgl Dreiecksanzahl}
|
||||
\begin{enumerate*}
|
||||
\item (beinahe) konvexes Objekt (max 2 Schnitte): hat die Komplexität einer räumlichen Punktsuche, also dem Aufwand zur Untersuchung einer Baumzelle (finden + dortige Dreiecke testen) $O(\log n)$
|
||||
\item (beinahe) konvexes Objekt (max. 2 Schnitte): hat die Komplexität einer räumlichen Punktsuche, also dem Aufwand zur Untersuchung einer Baumzelle (finden + dortige Dreiecke testen) $O(\log n)$
|
||||
\item Polygonnebel (viele kleine Dreiecke im Such-Volumen)
|
||||
\begin{itemize*}
|
||||
\item Annahme: alle Zellen enthalten konstante kleine Anzahl von Dreiecken $\rightarrow$ Aufwand proportional zur Anzahl durchlaufener Baumzellen
|
||||
@ -412,21 +401,21 @@
|
||||
\begin{itemize*}
|
||||
\item Surface Area Heuristic (SAH):
|
||||
\begin{itemize*}
|
||||
\item Annahme: Strahl i, trifft Zelle j mit Wahrscheinlichkeit P(i,j), zudem sei $n_j$ die Anzahl Dreiecke in Zelle j
|
||||
\item Aufwand für Raytracing pro Zelle proportional zur Baumtiefe ($O(\log n)$ für balancierte Bäume) sowie die Anzahl der dortigen Dreiecke $n_j$; beachte $n_j$ wird hier nicht als konstant angenommen $\rightarrow$ Gesamtaufwand für Strahl i sei also $\sum(P(i,j)*n_j)$
|
||||
\item Strahl $i$, trifft Zelle $j$ mit Wahrscheinlichkeit $P(i,j)$, zudem sei $n_j$ die Anzahl Dreiecke in Zelle $j$
|
||||
\item Aufwand für Raytracing pro Zelle proportional zur Baumtiefe ($O(\log n)$ für balancierte Bäume) sowie Anzahl der dortigen Dreiecke $n_j$; $n_j$ wird nicht als konstant angenommen $\rightarrow$ Gesamtaufwand für Strahl $i$ sei also $\sum(P(i,j)*n_j)$
|
||||
\end{itemize*}
|
||||
\item Heuristik: große Zellen mit wenigen Dreiecken senken Gesamtaufwand
|
||||
\begin{itemize*}
|
||||
\item Schätzung: P(i,j) ist etwa proportional zur Oberfläche einer Zelle (auf großer Oberfläche treffen mehr Strahlen auf)
|
||||
\item die SAH optimiert auf jeder Teilstufe im Baum das Produkt der Zellgröße mal Anzahl Dreiecke im Teilbaum. Für den kD-Baum gilt bei der Unterteilung des Bereichs D in Richtung k: $D_k = D_{k_links} + D_{k_rechts}$
|
||||
\item Schätzung: $P(i,j)$ ist proportional zur Oberfläche einer Zelle (auf großer Oberfläche treffen mehr Strahlen auf)
|
||||
\item die SAH optimiert auf jeder Teilstufe im Baum das Produkt der Zellgröße mal Anzahl Dreiecke im Teilbaum. Für den kD-Baum gilt bei der Unterteilung des Bereichs D in Richtung k: $D_k = D_{k_{links}} + D_{k_{rechts}}$
|
||||
\end{itemize*}
|
||||
\item Bei ungleicher Verteilung der Dreiecke (z.B. Cluster) enthalten dann große Zellen wenige oder keine Dreiecke und Baum ist nicht balanciert $\rightarrow$ implizite Abtrennung des Clusters vom Rest des Baums (vgl Middle-Cut-Strategie)
|
||||
\item Bei ungleicher Verteilung der Dreiecke enthalten dann große Zellen wenige oder keine Dreiecke und Baum ist nicht balanciert $\rightarrow$ implizite Abtrennung des Clusters vom Rest des Baums (vgl. Middle-Cut-Strategie)
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Behandlung ausgedehnter Objekte}
|
||||
\begin{itemize*}
|
||||
\item Punkte haben keine Ausdehnung und können an einem eindeutigen Ort im kD-Baum abgelegt sein
|
||||
\item Ausgedehnte Objekte können räumlich mehrere Blatt- Zellen überlappen. Ein solches Objekt müsste dann in mehreren Blattzellen einsortiert sein.
|
||||
\item Ausgedehnte Objekte können räumlich mehrere Blatt- Zellen überlappen. Diese Objekte müssen dann in mehreren Blattzellen einsortiert werden
|
||||
\end{itemize*}
|
||||
\begin{enumerate*}
|
||||
\item Auftrennung von Objekten, d.h. Objekte müssen an der Zellgrenze aufgeteilt werden. Einsortierung der Teilobjekte in passende Zellen. Geht gut für Dreiecke
|
||||
@ -441,7 +430,7 @@
|
||||
\subsection{ Midpoint Algorithmus}
|
||||
\begin{itemize*}
|
||||
\item Grundidee: Effizient durch Verwendung von Ganzzahlen, Vermeiden von Multiplikation/Division sowie Nutzung einer inkrementellen Arbeitsweise
|
||||
\item Die Linie geht zwischen den Endpunkten nicht durch ganzzahlige Gitterpunkte. Da nur ganzzahlige Pixel-Koordinaten gesetzt werden können müssten auch zwischenpunkte zuerst genau berechnet werden und dann auf ganzzahlige Pixelwerte gerundet werden. Dies ist unzuverlässig und ineffizient. Zur Herleitung des effizienten Bresenham-Algorithmus führen wir den Mittelpunkt M als Referenzpunkt ein. Ferner seinen der jeweils aktuellen Punkt P, der rechts von im liegende E (east) und der rechts oben liegende NE north-east) benannt.
|
||||
\item Die Linie geht zwischen den Endpunkten nicht durch ganzzahlige Gitterpunkte. Da nur ganzzahlige Pixel-Koordinaten gesetzt werden können müssten auch zwischenpunkte zuerst genau berechnet werden und dann auf ganzzahlige Pixelwerte gerundet werden. Dies ist unzuverlässig und ineffizient. Zur Herleitung des effizienten Bresenham-Algorithmus führen wir den Mittelpunkt M als Referenzpunkt ein. Ferner seinen der jeweils aktuellen Punkt P, der rechts von im liegende E (east) und der rechts oben liegende NE (north-east) benannt.
|
||||
\item die Linie wird als Funktion repräsentiert: $y=\frac{\delta y}{\delta x}*x+B$
|
||||
\item implizierte Form: $d: F(x,y)=\delta y*x-\delta x*y+B*\delta x = 0$
|
||||
\item für Punkte auf der Linie wird $F(x,y)=0$
|
||||
@ -454,15 +443,15 @@
|
||||
\item Oktant($\delta y > \delta x$)
|
||||
\item Oktant($\frac{\delta y}{\delta x}< 0$)
|
||||
\item Oktant($\frac{\delta y}{\delta x}< -1$)
|
||||
\item -8. Oktant($\delta x < 0$)
|
||||
\item - 8. Oktant($\delta x < 0$)
|
||||
\end{enumerate*}
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Anti Aliasing}
|
||||
\begin{itemize*}
|
||||
\item Treffenstufeneffekt bei gerasterten Linien
|
||||
\item Treppenstufeneffekt bei gerasterten Linien
|
||||
\item Regelmäßigkeit wird verstärkt vom Auge wahrgenommen
|
||||
\item Auflösungsvermögen des Auges für Punkte sei e. Strukturen wie Linien (aus vielen Punkten) werden durch Mittelwertbildung (Fitting) vom Auge viel genauer als e lokalisiert. Eine Stufe wird umso eher erkannt, je länger die angrenzenden Segmente sind.
|
||||
\item Auflösungsvermögen des Auges für Punkte sei e. Strukturen wie Linien werden durch Mittelwertbildung (Fitting) vom Auge viel genauer als e lokalisiert. Eine Stufe wird umso eher erkannt, je länger die angrenzenden Segmente sind.
|
||||
\item Grundidee des Anti-Aliasing
|
||||
\begin{itemize*}
|
||||
\item Statt der Linie wird ein Rechteck mit der Breite von einem Pixel betrachtet
|
||||
@ -478,7 +467,7 @@
|
||||
\item Problem:
|
||||
\begin{itemize*}
|
||||
\item Ausgabe von Linien/Polygonen auf Rastergeräten muss auf vorgegebenem Raster erfolgen
|
||||
\item Farbvariation ist zwar möglich, Farbberechnung muss aber effizient erfolgen
|
||||
\item Farbvariation ist möglich, muss effizient erfolgen
|
||||
\end{itemize*}
|
||||
\item Ohne Antialiasing:
|
||||
\begin{itemize*}
|
||||
@ -486,11 +475,11 @@
|
||||
\item verwendet Farbe in der Pixelmitte
|
||||
\end{itemize*}
|
||||
\item Ideales Antialiasing: Hat wegen der beliebig komplexen Geometrie allgemein einen sehr/zu hohen Aufwand!
|
||||
\item Ansatz für eine "reale Lösung"
|
||||
\item Ansatz für eine 'reale Lösung'
|
||||
\begin{itemize*}
|
||||
\item eine ideale Berechnung von Farbwerten nach dem Überdeckungsgrad ist allgemein beliebig aufwendig und daher praktisch irrelevant
|
||||
\item ideale Berechnung von Farbwerten nach dem Überdeckungsgrad ist praktisch irrelevant
|
||||
\item Gesucht werden Ansätze mit gut abschätzbarem/konstanten Aufwand
|
||||
\item "reales" Antialiasing beruht in der Regel auf der Verwendung von mehreren Samples pro Pixel, d.h. Berechnung dieser n Samples statt nur einem (typisch: n-facher Aufwand)
|
||||
\item beruht auf der Verwendung von mehreren Samples pro Pixel, d.h. Berechnung dieser n Samples statt nur einem (typisch: n-facher Aufwand)
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
@ -500,19 +489,18 @@
|
||||
\item Ohne Anti-Aliasing kommt pro Pixel genau eine Sampleposition zum Zuge. Das Pixel wird demnach gefärbt oder nicht gefärbt: Das sind zwei mögliche Stufen.
|
||||
\item Bei vier Subpixeln können minimal 0 und maximal 4 Subpixel im (Makro-)Pixel gesetzt sein, d.h. es sind 5 Intensitäten von 0\%, 25\%0, 50\%, 75\% oder 100\% möglich
|
||||
\item Es gibt immer eine Abstufung mehr als Subpixel pro Pixel
|
||||
\item Beim idealen Antialiasing entsprechenden Flächenbedeckungsgrad gibt es "beliebig" viele Abstufungen
|
||||
\item Formabhängigkeit z.B. bei 45° gibt es nur eine Zwischenstufe und zwar je nach Phasenlage mit 25\% oder 75\% $\rightarrow$ Kante "pumpt" bei Objektbewegung.
|
||||
\item bei Formabhängigkeit gibt es nur eine Zwischenstufe je nach Phasenlage $\rightarrow$ Kante "pumpt" bei Objektbewegung.
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Supersampling + Rotated Grids}
|
||||
\begin{itemize*}
|
||||
\item Minderung der Formabhängigkeit
|
||||
\item Kleine Winkel zu den Achsen führen zu langen Stufen der Polygonkante
|
||||
\item Bessere Verhältnisse der Grauabstufung ergeben sich für flache Winkel, wenn statt des ordered-grid ein rotated-grid für das Supersampling verwendet wird
|
||||
\item Rotated grids sind dafür bei anderen Winkeln etwas schlechter als das ordered grid. Wird kaum wahrgenommen, da die Treppen der digitalen Geraden kürzer sind
|
||||
\item Gute Grauabstufung bei sehr flachen Kanten zur Zeilen- oder Spaltenrichtung.
|
||||
\item Optimaler Winkel bei ca. 20-30° z.B. $arctan(0.5) \approx 26,6^{\circ}$
|
||||
\item Sehr dünne Linien bleiben auch bei Bewegung zusammenhängend/sichtbar (Vermeidung von "Line Popping")
|
||||
\item minderung der Formabhängigkeit
|
||||
\item kleine Winkel führen zu langen Stufen der Polygonkante
|
||||
\item bessere Verhältnisse der Grauabstufung für flache Winkel, wenn ordered-grid statt rotated-grid verwendet wird
|
||||
\item Rotated grids sind bei anderen Winkeln etwas schlechter als das ordered grid. Wird kaum wahrgenommen
|
||||
\item gute Grauabstufung bei sehr flachen Kanten zur Zeilen- oder Spaltenrichtung
|
||||
\item optimaler Winkel bei ca. 20-30° z.B. $arctan(0.5) \approx 26,6^{\circ}$
|
||||
\item sehr dünne Linien bleiben auch bei Bewegung zusammenhängend/sichtbar (Vermeidung von "Line Popping")
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Supersampling + Multisampling}
|
||||
@ -520,18 +508,16 @@
|
||||
\item Realisierung der Subpixelberechnung durch
|
||||
\item ein Superbackpuffer (großem Buffer)
|
||||
\begin{itemize*}
|
||||
\item Nachteil (bei rotated grid): Anpassung der Rasterkonvertierung an verschobene Positionen erforderlich
|
||||
\item Nachteil (bei rotated grid): Anpassung der Rasterkonvertierung an verschobene Positionen
|
||||
\item Vorteil: Verwendung von mehr Texturinformation (Textur wird subpixelgerecht eingetragen)
|
||||
\end{itemize*}
|
||||
\item mehrere Multisamplebuffer (mehrere Buffer)
|
||||
\item mehrere Multisamplebuffer (mehrere kleinere Buffer)
|
||||
\begin{itemize*}
|
||||
\item Mehrfachrendering in normaler Größe mit leicht versetzter Geometrie (Vertexverschiebung pro Sub-Bild)
|
||||
\item Mehrfachrendering in normaler Größe mit versetzter Geometrie (Vertexverschiebung pro Sub-Bild)
|
||||
\item Vorteil: keine Veränderung im Rendering
|
||||
\item Nachteil: nur ein Texturwert pro Makro-/Sub-Pixel
|
||||
\end{itemize*}
|
||||
\item Gezielter Ressourceneinsatz
|
||||
\begin{itemize*}
|
||||
\item Kantenglättung
|
||||
\item Gezielter Ressourceneinsatz durch Kantenglättung
|
||||
\begin{itemize*}
|
||||
\item Effizienzsteigerung durch Beschränkung auf reine Kantenglättung möglich
|
||||
\item Anzahl der Kantenpixel oft wesentlich kleiner als Anzahl der Flächenpixel
|
||||
@ -540,25 +526,24 @@
|
||||
\end{itemize*}
|
||||
\item adaptives Samplen: statt feste Anzahl von Samples kann die Anzahl nach dem Bedarf gesteuert werden
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Quincunx Verfahren}
|
||||
\begin{itemize*}
|
||||
\item Überfilterung
|
||||
\item 2x Multisampling mit rotated grid; der Informations- zuwachs ist durch die doppelte Anzahl von Samples gekennzeichnet
|
||||
\item Information für die Kantenglättung beruht nach wie vor auf 2 Subpixeln
|
||||
\item 2x Multisampling mit rotated grid; Informations- zuwachs ist durch doppelte Anzahl von Samples gekennzeichnet
|
||||
\item Information für die Kantenglättung beruht auf 2 Subpixeln
|
||||
\item Entspricht einer zusätzlichen Tiefpass-Überfilterung. Durch die Unschärfe sehen Polygonkanten glatter aus.
|
||||
\item Harte Kanten sind gar nicht mehr möglich, dadurch wird auch Zappeln an Polygonrändern reduziert
|
||||
\item Aber Nachteil: Texturinformation, die nur zu 2 Subpixeln gehört, wird verschmiert!
|
||||
\item Harte Kanten sind gar nicht mehr möglich, dadurch wird auch 'Zappeln' an Polygonrändern reduziert
|
||||
\item Nachteil: Texturinformation, die nur zu 2 Subpixeln gehört, wird verschmiert
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Pseudozufälliges Supersampling}
|
||||
\begin{itemize*}
|
||||
\item Kombinationen und Pseudozufälliges Supersampling
|
||||
\item Kombinationen und pseudozufälliges Supersampling
|
||||
\begin{itemize*}
|
||||
\item Kombination von Supersampling, Multisampling und Quincunx möglich; Gewinn hält sich in Grenzflächen
|
||||
\item Bei Überwindung der für Füllrate und Bandbreite gegebenen Grenzen überwiegen die Vorteile des Supersamplings.
|
||||
\item Ordered grid und rotated grid weisen bei bestimmten Strukturklassen Vor- und Nachteile auf. Die verbleibenden Artefakte wiederholen sich bei großen Flächen, so dass derartige Muster vom Menschen oft als störend empfunden werden. $\rightarrow$ aus diesen und ähnlichen Überlegungen $\rightarrow$ Ansätze für die Weiterentwicklung:
|
||||
\item Bei Überwindung der Grenzen für Füllrate und Bandbreite überwiegen die Vorteile des Supersamplings.
|
||||
\item Ordered grid und rotated grid weisen bei bestimmten Strukturklassen Vor- und Nachteile auf. Die verbleibenden Artefakte wiederholen sich bei großen Flächen so, dass derartige Muster vom Menschen oft als störend empfunden werden
|
||||
\item pseudozufällige Auswahl von Abtastmustern für das Supersampling
|
||||
\item nachträgliche Abminderung regelmäßiger Strukturen durch vorsichtiges Verrauschen (Rauschfilter)
|
||||
\item entfernungsabhängiges Antialiasing
|
||||
@ -566,7 +551,7 @@
|
||||
\item pseudozufällig
|
||||
\begin{itemize*}
|
||||
\item Samples können nur an n vordefinierten Positionen stattfinden (Sample-Positionsmuster)
|
||||
\item Je nach Methode werden daraus m Positionen für das Samplen zufällig ausgewählt (beachte: m < n)
|
||||
\item Je nach Methode werden daraus m Positionen für das Samplen zufällig ausgewählt (beachte: $m < n$)
|
||||
\item Anzahl der Muster als kombinatorisches Problem: m aus n (ohne Wiederholungen)
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
@ -574,128 +559,115 @@
|
||||
\paragraph{Downsampling}
|
||||
Beim Anti-Aliasing zur Glättung von Polygonkanten kommt für das Downsampling die Mittelwertbildung in Frage (lineare Filterung (2x - AA), bilineare Filterung (4x - AA)), gleichgültig ob ordered oder rotated grid. Beim pseudozufälligen Supersampling ist entsprechend der "frei gewählten" Positionen der "Subpixel" zu modifizieren (z.B. Gewichte nach Abstand der Abfragepositionen zur Makropixelposition).
|
||||
|
||||
|
||||
\subsection{ Polygonfüllalgorithmus}
|
||||
\begin{itemize*}
|
||||
\item Ansatz
|
||||
\begin{itemize*}
|
||||
\item finde die Pixel innerhalb des Polygons
|
||||
\item weise ihnen Farbe zu
|
||||
\item dabei zeilenweises Vorgehen, pro Rasterlinie:
|
||||
\item dabei zeilenweises Vorgehen pro Rasterlinie
|
||||
\item für jede Polygonkante: schneide die Polygonkante mit der aktuellen Bildzeile ($\rightarrow x_s$ )
|
||||
\item füge Schnittpunkt $x_s$ in eine Liste ein
|
||||
\item sortiere Schnittpunkte der aktuellen Bildzeile in x-Richtung
|
||||
\item Paritätsregel: fülle die Pixel jeweils zwischen ungeradem und nächstem geraden Schnittpunkt (Pixel zwischen geraden und ungeraden Schnittpunkten aber nicht!)
|
||||
\item sortiere Schnittpunkte der Bildzeile in x-Richtung
|
||||
\item Paritätsregel: fülle die Pixel jeweils nur zwischen ungeraden und nächstem geraden Schnittpunkt
|
||||
\end{itemize*}
|
||||
\item Schnittpunkte in floating point zu berechnen und zu runden ist ineffizient. Wir suchen, ähnlich wie beim Bresenham-Algorithmus, einen inkrementellen Ansatz mit Ganzzahl-Arithmetik.
|
||||
\item Allgemeinere Sicht auf die Füll- bzw. Auswahlstrategie: Ein Pixel wird mit der Farbe des Polygons gefüllt, das sich rechts von ihm befindet. Sollte dort eine Kante sein, so wird die Farbe des oberen Polygons verwendet.
|
||||
\item Schnittpunkte in floating point zu berechnen und zu runden ist ineffizient. Ähnlich wie beim Bresenham-Algorithmus, inkrementeller Ansatz mit Ganzzahl-Arithmetik
|
||||
\item Allgemeine Sicht auf die Füll-/Auswahlstrategie: Ein Pixel wird mit der Farbe des Polygons gefüllt, das sich rechts von ihm befindet. Sollte dort eine Kante sein, so wird die Farbe des oberen Polygons verwendet.
|
||||
\item Grundsätzlich könnten beliebige Richtungen als Referenzrichtung zur Farbbestimmung gewählt werden. Dann müssten die zuvor besprochenen Regeln oder der gesamte Algorithmus entsprechend angepasst werden.
|
||||
\item Effiziente Ermittlung der Schnittpunkte von Polygonkante und Rasterzeile:
|
||||
\begin{itemize*}
|
||||
\item Polygonkanten werden stets von unten nach oben bearbeitet
|
||||
\item horizontale Polygonkanten müssen nicht bearbeitet werden (geschieht in Scanline) $\rightarrow$ im Algorithmus stets m ungleich 0
|
||||
\item Polygonkanten von unten nach oben bearbeitet
|
||||
\item horizontale Polygonkanten müssen nicht bearbeitet werden $\rightarrow$ $m\not=0$
|
||||
\item $d_y = y_1 - y_0$ ist stets positiv (auch nie 0)
|
||||
\item $d_x = x_1 - x_0$ kann positiv und negativ sein
|
||||
\item damit können 4 Bereiche unterschieden werden
|
||||
\item Berechnung von x bzw y: $y=y_0+m(x-x_0)$,$y=y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0)$,$x=x_0+\frac{1}{m}(y-y_0)$, $x=x_0+\frac{x_1-x_0}{y_1-y_0}(y-y_0)$
|
||||
\item Zwar sind die x- bzw. y-Werte immer noch nicht ganzzahlig, jedoch können sie als rationale Zahlen explizit mit Zähler und Nenner repräsentiert werden.
|
||||
\item Die Rundung (nächstes x oder y erreicht?) kann inkrementell ermittelt werden.
|
||||
\item Die Rundungsregel für Bruchwerte hängt davon ab, ob es eine linke oder rechte Kante ist. Links wird z.B. aufgerundet (Pixel ist auf oder rechts v. der Kante).
|
||||
\item Berechnung von x bzw y:
|
||||
\begin{itemize*}
|
||||
\item $y=y_0+m(x-x_0)= y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0)$,
|
||||
\item$x=x_0+\frac{1}{m}(y-y_0)= x_0+\frac{x_1-x_0}{y_1-y_0}(y-y_0)$
|
||||
\end{itemize*}
|
||||
\item x-/y-Werte noch nicht ganzzahlig, aber können als rationale Zahlen explizit mit Zähler und Nenner repräsentiert werden
|
||||
\item Die Rundung (nächstes x oder y erreicht?) kann inkrementell ermittelt werden
|
||||
\item Die Rundungsregel für Bruchwerte hängt davon ab, ob es eine linke oder rechte Kante ist. Links wird z.B. aufgerundet (Pixel ist auf oder rechts v. der Kante)
|
||||
\end{itemize*}
|
||||
\item Edge-Tabelle:
|
||||
\begin{itemize*}
|
||||
\item Verkettete Liste (oder Array, siehe unten) für die nicht horizontalen Kanten.
|
||||
\item Verkettete Liste/Array für nicht-horizontalen Kanten
|
||||
\item Sortierung nach der Scan-Line, wo die Kanten beginnen (unteres Ende, $y_0$ ).
|
||||
\item Innerhalb der Scan-Line wiederum Liste (nach $x_0$-Werten sortiert). Je nach Implementierung werden z.B. $x_0 , y_1$ , sowie Zähler und Nenner gespeichert.
|
||||
\item Innerhalb der Scan-Line wieder Liste (nach $x_0$ sortiert). Je nach Implementierung werden z.B. $x_0 , y_1$ , sowie Zähler und Nenner gespeichert.
|
||||
\end{itemize*}
|
||||
\item Active-Edge-Tabelle:
|
||||
\begin{itemize*}
|
||||
\item Die AET speichert alle Kanten, die die gegenwärtige Scan-Linie schneiden.
|
||||
\item Die Liste hat die gleiche Struktur wie eine Zeile der ET.
|
||||
\item Die Kanten werden gelöscht, wenn das obere Ende der Kante erreicht ist.
|
||||
\end{itemize*}
|
||||
\item Bemerkung zu Scan Convert Polygon:
|
||||
\begin{itemize*}
|
||||
\item Es existiert immer eine gerade Anzahl Kanten. Bei konvexen Polygonen sind immer null oder zwei Kanten in der AET. Die Sortierung ist dadurch trivial bzw. entfällt bei konvexen Polygonen. Bei vielen Grafikbibliotheken (z.B. OpenGL) beschränkt man sich auf konvexe Polygone. Nichtkonvexe Polygone müssen daher vorher in konvexe Komponenten zerlegt werden. Dafür ist das Füllen dieser Polygone danach effizienter.
|
||||
\item Dieser Teil entspricht einem Schleifendurchlauf der Prozedur EdgeScan. Die Unterscheidung zwischen linker und rechter Kante wird beim Auffüllen der Pixel gemacht.
|
||||
\item speichert alle Kanten, die gegenwärtige Scan-Linie schneiden
|
||||
\item Liste hat die gleiche Struktur wie eine Zeile der ET
|
||||
\item Kanten gelöscht, wenn oberes Ende der Kante erreicht ist
|
||||
\end{itemize*}
|
||||
\item Bemerkung zu Scan Convert Polygon: Es existiert immer eine gerade Anzahl Kanten. Bei konvexen Polygonen sind immer null oder zwei Kanten in der AET. Die Sortierung ist dadurch trivial bzw. entfällt bei konvexen Polygonen. Bei vielen Grafikbibliotheken beschränkt man sich auf konvexe Polygone. Nichtkonvexe Polygone müssen daher vorher in konvexe Komponenten zerlegt werden. Dafür ist das Füllen dieser Polygone danach effizienter. Dieser Teil entspricht einem Schleifendurchlauf der Prozedur EdgeScan. Die Unterscheidung zwischen linker und rechter Kante wird beim Auffüllen der Pixel gemacht.
|
||||
\item Bemerkungen zur Effizienz
|
||||
\item \begin{itemize*}
|
||||
\item Der Polygonfüllalgorithmus ist zentraler Bestandteil jeder Grafikbibliothek für Rastergrafik. Für Echtzeitanwendungen ist Effizienz essentiell. Ein Polygon belegt
|
||||
meistens viel mehr Pixel als es Eckpunkte bzw. Kanten besitzt. Deshalb sind effiziente per-Pixel-Operationen besonders wichtig. Der Rechenaufwand sollte folglich möglichst vermieden werden (mit fallender Priorität):
|
||||
\item pro Pixel (Annahme: sehr häufig auszuführen, deshalb möglichst effizient)
|
||||
\begin{itemize*}
|
||||
\item Ein Polygon belegt meist mehr Pixel als es Eckpunkte/Kanten besitzt. Deshalb sind effiziente per-Pixel-Operationen wichtig. Der Rechenaufwand sollte vermieden werden (fallende Priorität) für:
|
||||
\item pro Pixel (sehr häufig auszuführen)
|
||||
\item pro Rasterzeile
|
||||
\item pro Kante (hier sollte möglichst viel vorberechnet werden, um pro Rasterzeile bzw. Pixel Rechenzeit zu sparen)
|
||||
\item Neben der reinen Rasterisierung des Polygons existieren Erweiterungen des inkrementellen Ansatzes für effiziente Berechnungen in der 3D-Grafik, z.B.:
|
||||
\item pro Kante (möglichst viel vorberechnen, um pro Rasterzeile/Pixel Rechenzeit zu sparen)
|
||||
\end{itemize*}
|
||||
\item Erweiterungen des inkrementellen Ansatzes für effiziente Berechnungen in der 3D-Grafik, z.B.:
|
||||
\item Füllen des Z-Buffers (Tiefenwertberechnung)
|
||||
\item lineare Interpolation beim Gouraud Shading (Farbwertberechnungen)
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Füllmuster}
|
||||
\begin{itemize*}
|
||||
\item Füllen eines Polygons mit einem Pattern statt mit einem konstanten Farbwert
|
||||
\item Füllen eines Polygons mit Pattern statt konstanten Farbwert
|
||||
\item benutze dazu BITMAPs
|
||||
\item 2-dimensionales Array
|
||||
\item besteht aus M Spalten und N Zeilen
|
||||
\item BITMAP = ARRAY [0 · · · M - 1, 0 · · · N - 1]
|
||||
\item $BITMAP = ARRAY [0... (M-1), 0...(N-1)]$
|
||||
\end{itemize*}
|
||||
\begin{lstlisting}
|
||||
drawPoly(Polygon poly, Pattern pat){
|
||||
foreach pixelPosition x, y in poly
|
||||
poly.set(x, y, pat[x mod pat.width, y mod pat.height]);
|
||||
}
|
||||
\end{lstlisting}
|
||||
|
||||
\paragraph{Dithering}
|
||||
\begin{itemize*}
|
||||
\item Grundidee: Ersetzen "genauer" Farbwerte durch grobe Quantisierung
|
||||
\item Ersetzen 'genauer' Farbwerte durch grobe Quantisierung
|
||||
\item gegeben sei Tabelle von im Output zulässigen Farben
|
||||
\item Durchlaufen aller Pixel (mit genauen Werten) beginnend links oben
|
||||
\item pro Pixel P die beste Ersetzung in Tabelle finden + setzen
|
||||
\item verursachten Fehler $\delta$ jeweils nach Schema auf unbearbeitete Nachbarpixel in der (noch) genauen Repräsentation verteilen
|
||||
\item Durchlaufen aller Pixel beginnend links oben
|
||||
\item pro Pixel P die beste Ersetzung in Tabelle finden \& setzen
|
||||
\item verursachten Fehler $\delta$ jeweils nach Schema auf unbearbeitete Nachbarpixel in der Repräsentation verteilen
|
||||
\item bei kleinen Bildern mit hoher Auflösung ist Dithering kaum wahrnehmbar
|
||||
\end{itemize*}
|
||||
Dithering vs. Anti-Aliasing:
|
||||
|
||||
\paragraph{Dithering vs. Anti-Aliasing}
|
||||
\begin{itemize*}
|
||||
\item sind komplementär zueinander
|
||||
\item Anti-Aliasing erhöht die empfundene räumlich Auflösung durch Anwendung von Zwischenwerten in der Grau-, bzw. Farbabstufung
|
||||
\item Dithering erhöht die Farbauflösung (verringert die empfundene Farbquantisierung) durch das Verteilen des Quantisierungsfehlers auf mehrere Pixel $\rightarrow$ Verringerung der räumlichen Auflösung
|
||||
\item komplementär zueinander
|
||||
\item A.A. erhöht empfundene räumlich Auflösung durch Anwendung von Zwischenwerten in der Grau-/Farbabstufung
|
||||
\item Dithering erhöht Farbauflösung (verringert empfundene Farbquantisierung) durch Verteilen des Quantisierungsfehlers auf mehrere Pixel $\rightarrow$ Verringerung der räumlichen Auflösung
|
||||
\end{itemize*}
|
||||
|
||||
\section{Farbräume}
|
||||
\subsection{ Farbwahrnehmung - Phänonmenologie}
|
||||
\begin{itemize*}
|
||||
\item Hell- und Farbempfinden als Sinneseindruck beschreiben. Einiges kann dadurch bereits qualitativ erschlossen werden
|
||||
\item Tageslicht kann als weiß bzw grau mit unterschiedlichen Helligkeiten, jedoch unbunt (farblos) empfunden werden
|
||||
\item Hell- und Farbempfinden als Sinneseindruck beschrieben
|
||||
\item Tageslicht als weiß/grau mit unterschiedlichen Helligkeiten aber farblos empfunden
|
||||
\item Abwesenheit von Licht wird als schwarz empfunden
|
||||
\item Regenbogen wird als bunt mit verschiedenen Farbtönen empfunden
|
||||
\item Regenbogen bunt mit verschiedenen Farbtönen empfunden
|
||||
\end{itemize*}
|
||||
\begin{description}
|
||||
\item[Farbton (Hue)]
|
||||
\begin{itemize*}
|
||||
\item Zwischen den grob unterscheidbaren Farbtönen des Regenbogens lassen sich zwischenstufen orten, welche eine praktisch stufenlose Farbpalette ergeben
|
||||
\item Farbpalette aus abstufung grober Farbtöne
|
||||
\item direkt nebeneinanderliegende Farben im Farbspektrum werden als ähnlich empfunden
|
||||
\item wieder andere Farben werden als sehr unterschiedlich empfunden
|
||||
\item mit dieser Beobachtung lassen sich Farbwerte ordnen (Dimensionen des Farbtons als eine der Dimensionen zur Beschreibung von Farbwerten)
|
||||
\item All diese Farben ist jedoch gemein, dass sie als sehr bunt empfunden werden (voll gesättigte Farben im Gegensatz zu Grautönen)
|
||||
\item Farbwerte lassen sich ordnen
|
||||
\item als bunt empfunden (voll gesättigte Farben im Gegensatz zu Grautönen)
|
||||
\end{itemize*}
|
||||
\item[Farbsättigung (Saturation)]
|
||||
\begin{itemize*}
|
||||
\item Zwischen bunten Farben und Grau lassen sich Zwischenstufen finden
|
||||
\item Pastelltöne sind zwar weniger bunt aber nicht völlig farblos (Farbwerte sind noch unterscheidbar)
|
||||
\item Stufen zwischen Bunt und Grau
|
||||
\item Pastelltöne sind weniger bunt aber nicht farblos
|
||||
\item Grauton (keine Farbwerte unterscheidbar)
|
||||
\item zu jedem einzelnen bunten Farbton können Abstufungen von Pastelltönen bis zum gänzlich unbunten Grau zugeordnet werden
|
||||
\item diese Abstufung nennen wir Sättigung der Farbe
|
||||
\item Links maximal gesättigte Farbe, rechts völlig ungesättigte Farbe (grau)
|
||||
\item In jeder Zeile wird der gesättigte Farbton als nicht prinzipiell anders als die zugehörige Pastellfarbe empfunden (aber weniger bunt) nur weniger gesättigt
|
||||
\item jedem Farbton können Abstufungen bis Grau zugeordnet werden
|
||||
\end{itemize*}
|
||||
\item[Helligkeitsstufen (Lightness)]
|
||||
\begin{itemize*}
|
||||
\item Zu jedem Farbton (gesättigt oder nicht) können unterschiedliche Helligkeitsabstufungen bis zum tiefen Schwarz zugeordnet werden
|
||||
\item links maximale Helligkeit, rechts dunkelster Wert (schwarz)
|
||||
\item in jeder Zeile werden die hellen Farbtöne als nicht prinzipiell anders als die zugehörigen dunkleren Farbtöne empfunden
|
||||
\item im schwarzen sind ebenfalls keine Farbtöne mehr unterscheidbar
|
||||
\item unterschiedliche Helligkeitsabstufungen bis Schwarz
|
||||
\item im Schwarzen sind keine Farbtöne mehr unterscheidbar
|
||||
\end{itemize*}
|
||||
\end{description}
|
||||
|
||||
@ -705,89 +677,80 @@
|
||||
\item Farbton: Hue
|
||||
\item Sättigung: Saturation
|
||||
\item Helligkeit: Lightness/Brightness/Value/Intensity
|
||||
\item Da sich die Dimension des Farbtons periodisch wiederholt wird das System oft als Winkelkoordinate eines Polarkooridnaten-Systems in der HS-Ebene, bzw dreidimensional als Zylinderkoordinaten HSl darstellt.
|
||||
\item Darstellungsformen: Die Darstellungsform des HSL Farbraums ist nicht fest vorgeschrieben. Eine Darstellung als (Doppel)-Kegel oder sechseitige (Doppel-) Pyramide ist ebenso möglich.
|
||||
\item Der HSl Farbraum entspricht zumindest grob unserer Farbwahrnehmung. Daher eignet er sich zur intuitiven und qualitativen Einstellung von Farben in Illustrationsgrafiken
|
||||
\item Dimension des Farbtons wiederholt sich periodisch
|
||||
\item darstellung als Winkelkoordinate eines Polarkoordinaten-Systems in der HS-Ebene oder dreidimensional als Zylinderkoordinaten HSL darstellt.
|
||||
\item Darstellungsformen nicht fest vorgeschrieben. Eine Darstellung als (Doppel)-Kegel oder sechseitige (Doppel-) Pyramide ist ebenso möglich
|
||||
\item Der HSL Farbraum entspricht grob unserer Farbwahrnehmung. Daher geeignet zur intuitiven und qualitativen Einstellung von Farben in Illustrationsgrafiken
|
||||
\item Relative Skala 0-255
|
||||
\item Quantisierbarkeit der Farben und Helligkeit z.B. beruhend auf physiologischen Messungen
|
||||
\item Quantisierbarkeit der Farben und Helligkeit
|
||||
\item Bezug zur Physik des Lichtes (Energie, Spektrum)
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{RGB Farbraum}
|
||||
\begin{itemize*}
|
||||
\item Hypothese, dass Farbsehen auf drei Arten von Sinneszellen beruht (rot, grün, blau) (Young)
|
||||
\item Farbwahrnehmungen durch drei beliebige, linear unabhängige Größen darstellbar (Graßmann)
|
||||
\item Im Auge sind Zäpfchen, welche mit unterschiedlicher Empfindlichkeit auf die verschiedenen Wellenlängen des Lichtes reagieren. Es gilt: gleicher Reiz heißt gleiche Farbwahrnehmung
|
||||
\item Mit Grundfarben Rot, Grün und Blau können weitere Farben additiv gemischt werden
|
||||
\item Bestimmen der Anteile der Mischfarben
|
||||
\begin{itemize*}
|
||||
\item drei Empfindlichkeitskurven: R,G,B und zugehörige Lichtquellen r,g,b
|
||||
\item alle 3 Lichtquellen zusammen ergeben weiß wahrgenommenes Licht: $r=g=b=1~$weiß
|
||||
\item damit dreidimensionalen Farbraum (RGB-Farbraum) aufspannen
|
||||
\item die Lage einer monochromatischen Lichtwelle: $x(\lambda_0)=p*r+\gamma*g+\beta*b$
|
||||
\item Empfindlichkeitskurven R,G,B und zugehörige Lichtquellen r,g,b
|
||||
\item alle 3 Lichtquellen zusammen ergeben weis wahrgenommenes Licht: $r=g=b=1$
|
||||
\item damit 3d-Farbraum (RGB-Farbraum) aufspannen
|
||||
\item Lage einer monochromatischen Lichtwelle: $x(\lambda_0)=p*r+\gamma*g+\beta*b$
|
||||
\item Achtung: hängt von Wellenlängen der verwendeten Grundfarben r,g,b (Primärvalenzen) ab.
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
Beispiel für Reizung durch monochromatisches Licht (Laser) einer bestimmten Stärke:
|
||||
\item Beispiel für Reizung durch monochromatisches Licht (Laser):
|
||||
\begin{itemize*}
|
||||
\item $r=0,2R(\lambda)4$
|
||||
\item $r=0,2R(\lambda)$
|
||||
\item $y=0,5R(\lambda)+0,3G(\lambda)$
|
||||
\item $g=0,2R(\lambda)+0,5G(\lambda)$
|
||||
\item $b=0,02B(\lambda)$
|
||||
\end{itemize*}
|
||||
\item Intensität: $I=\frac{R+G+B}{3}$
|
||||
\item Innere Farbmischung: mischen direkt aus Grundfarben
|
||||
\item Äußere Farbmischung: hinzufügen von Grundfarben zu bestehender Mischung
|
||||
\end{itemize*}
|
||||
|
||||
Farberzeugung durch Mischung:
|
||||
$$1,9r + 0,6g = 0,38R(\lambda)+0,12R(\lambda)+0,3G(\lambda)=0,5R(\lambda)+0,3G(\lambda) = y$$
|
||||
|
||||
|
||||
Innere Farbmischung: $F=p*r + \gamma*g + \beta*b$
|
||||
|
||||
Äußere Farbmischung:\\
|
||||
die gemischte Farbe Cyan wird zwar als derselbe Buntton wie die Referenzfarbe F wahrgenommen, jedoch weniger gesättigt. Um die beiden Farben gleich aussehen zu lassen wird der Referenzfarbe F etwas Rot beigemischt. Damit sind beide Farben gleich ungesättigt. Das Verfahren wird äußere Farbmischung genannt: $F=p*r + \gamma *g - \beta *b$.
|
||||
Um die aus Blau und Grün gemischte Farbe Cyan voll gesättigt aussehend zu lassen, müsste Rot aus der Mischfarbe subtrahiert werden. Dies ist allerdings technisch nicht realisierbar. Durch die negative Farbvalenz wird das Modell jedoch theoretisch konsistent und es lassen sich alle Farben durch Mischen von Rot, Grün und Blau darstellen. Daraus wird ein vollstänfiges RGB-Farbmodell abgeleitet.
|
||||
|
||||
Idee:
|
||||
\begin{itemize*}
|
||||
\item es werden drei linear-unabhängige Größen benötigt
|
||||
\item zur beschreibung der Farbempfindung
|
||||
\item zur (technischen) Reproduktion der Farbempfindung
|
||||
\item drei linear-unabhängige Größen benötigt, zur Beschreibung und (technischen) Reproduktion der Farbempfindung
|
||||
\item zunächst werden folgende Werte gewertet
|
||||
\begin{itemize*}
|
||||
\item die additive Mischung als Reproduktionsmethode
|
||||
\item drei Primärfarben Rot, Grün, Blau
|
||||
\item drei linear unabhängige Größen spannen stets einen 3D Raum auf
|
||||
\end{itemize*}
|
||||
\item die RGB Werte werden den drei ortogonalen Achsen dieses Raumes zugeordnet
|
||||
\end{itemize*}
|
||||
|
||||
Darstellung des RGB Farbraums:
|
||||
\begin{itemize*}
|
||||
\item alle mit drei Farblichtquellen technisch (additiv) erzeugbaren Farben liegen innerhalb eines Würfels
|
||||
\item Im Koordinatenursprung befindet sich Schwarz, diagonal gegenüber weiß.
|
||||
\item alle technisch/additiv erzeugbaren Farben liegen innerhalb eines Würfels
|
||||
\item Im Koordinatenursprung befindet sich Schwarz
|
||||
\item auf der Raumdiagonalen liegen dazwischen die Graustufen
|
||||
\end{itemize*}
|
||||
|
||||
Bei entsprechender Normierung liegen die vom RGB Farbsynthesesystem erzeugbare Farben im Einheitswürfel. Zunächst wird der Begriff Intensität eingeführt: $I=\frac{R+G+B}{3}$. Der Ausschnitt aus der Ebene konstanter Intensität, der im Einheitswürfel liegt, wird im Interesse der einfachen Darstellung als Farbebene (Farbtafel) genutzt. Dabei bleibt die Ordnung der Farbvalenzen erhalten. Die Länge |F| der Farbvalenz bzw die Intensität geht verloren.
|
||||
Die in der Ebene konstanter Intensität liegenden Werte definieren die Chrominanz durch welche die Farbwertanteile erfasst werden (zwei reichen aus da 2D). Es kann auch die Projektion der Ebene auf RG (grau überlagert) als Farbtafel genutzt werden, ohne die Ordnung der Farborte zu stören. Vorteil: orthonoales rg-System
|
||||
|
||||
RGB Farbtafel:\\
|
||||
Alle Farben gleicher Buntheit (unterscheiden sich nur in der Länge von F) führen zum gleichen Farbort, der durch die Farbwertantwile r,g,b beschrieben wird:
|
||||
Alle Farben gleicher Buntheit führen zum gleichen Farbort, der durch die Farbwertanteile r,g,b beschrieben wird:
|
||||
$$r=\frac{R}{R+G+B}, g=\frac{G}{R+G+B}, b=\frac{B}{R+G+B} \leftrightarrow r+g+b=1$$
|
||||
|
||||
Aus dem rechten Teil der Gleichung folgt mit $b=1-r-g$, dass sich die Buntheit allein durch r und g darstellen lässt (entspricht $R^2$).
|
||||
Die Farbwertanteile lassen sich bei bekanntem Farbort in der Farbtafel nach der angegebenen Konstruktionsvorschrift ermitteln oder direkt ablesen.
|
||||
|
||||
|
||||
\paragraph{CIE System}
|
||||
Um eine Relation zwischen der menschlichen Farbwahrnehmung und den physikalischen ursachen des Farbreizes herzustellen, wurde das CIE-Normvalenzsystem von der Internationalen Beleuchtungskommission (CIE) definiert. Es stellt die Gesammtheit der wahrnehmbaren Farben dar.
|
||||
Um eine Relation zwischen der menschlichen Farbwahrnehmung und den physikalischen Ursachen des Farbreizes herzustellen, wurde das CIE-Normvalenzsystem definiert. Es stellt die Gesammtheit der wahrnehmbaren Farben dar.
|
||||
|
||||
Farbkörperunterschiede:\\
|
||||
\paragraph{Farbkörperunterschiede}
|
||||
Es finden sich Unterschiede welche Farbbereiche nach dem CIE Normalvalenzsystem von den jeweiligen Systemen dargestellt werden können:
|
||||
\begin{itemize*}
|
||||
\item menschliche Farbwahrnehmung ca 2-6 Mio Farben
|
||||
\item Monitor: ca 1/3 davon. Bei Monitoren wird die additive Farbmischung verwendet, da die einzelnen Lichtquellen aufsummiert werden.
|
||||
\item Druckprozess: meist deutlich weniger Farben. Bei Druckernwerden einzelne Farbschichten auf Papier gedruckt und das resultierende Bild wird über die subtraktive Farbmischung bestimmt.
|
||||
\item menschliche Farbwahrnehmung ca. 2-6 Mio Farben
|
||||
\item Monitor ca. 1/3 davon. Bei Monitoren wird die additive Farbmischung verwendet, da die einzelnen Lichtquellen aufsummiert werden.
|
||||
\item Druckprozess deutlich weniger Farben. Es werden einzelne Farbschichten auf Papier gedruckt und das resultierende Bild wird über subtraktive Farbmischung bestimmt
|
||||
\end{itemize*}
|
||||
|
||||
Subtraktive Farbmischung:\\
|
||||
\paragraph{Subtraktive Farbmischung}
|
||||
Je nachdem welche Farbe ein Material hat, werden entsprechende Farbanteile absorbiert oder reflektiert. Eine gelbe Oberfläche sieht gelb aus, da sie das Blau aus weißem Licht absorbiert, aber Rot und Grün reflektiert.
|
||||
|
||||
Achtung: Dies gilt nur für die Bestrahlung mit weißem Licht. Wird beispielsweise ein gelbes Blatt mit blauem Licht bestrahlt, dann wirkt es schwarz, da das blaue Licht vom gelben Blatt absorbiert wird.
|
||||
|
Loading…
Reference in New Issue
Block a user