Schatten und globale Beleuchtung hydriert
This commit is contained in:
parent
4d409d605c
commit
cb01dfabbf
Binary file not shown.
@ -102,11 +102,11 @@
|
|||||||
\item[Translation] um den Vektor $\vec{t}$
|
\item[Translation] um den Vektor $\vec{t}$
|
||||||
\item[Skalierung] Stauchung oder Streckung
|
\item[Skalierung] Stauchung oder Streckung
|
||||||
\item[Spiegelung]
|
\item[Spiegelung]
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item an x-Achse $S=\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}$
|
\item an x-Achse $S=\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}$
|
||||||
\item an y-Achse $S=\begin{pmatrix} -1 & 0 \\ 0 & 1 \end{pmatrix}$
|
\item an y-Achse $S=\begin{pmatrix} -1 & 0 \\ 0 & 1 \end{pmatrix}$
|
||||||
\item am Ursprung $S=\begin{pmatrix} -1 & 0 \\ 0 & -1 \end{pmatrix}$
|
\item am Ursprung $S=\begin{pmatrix} -1 & 0 \\ 0 & -1 \end{pmatrix}$
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item[Scherung] $S=\begin{pmatrix} 1 & S_x \\ S_y & 1 \end{pmatrix}$
|
\item[Scherung] $S=\begin{pmatrix} 1 & S_x \\ S_y & 1 \end{pmatrix}$
|
||||||
\item[Rotation mit Polarkoordinaten] $P'=(r,\phi+\theta)$; $\binom{x'}{y'}=\begin{pmatrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta)\end{pmatrix}*\binom{x}{y}$
|
\item[Rotation mit Polarkoordinaten] $P'=(r,\phi+\theta)$; $\binom{x'}{y'}=\begin{pmatrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta)\end{pmatrix}*\binom{x}{y}$
|
||||||
\item[Koordinatentransformation] $$P' =T*P = \begin{pmatrix} x_x & x_y\\ y_x & y_y \end{pmatrix} * \binom{P_x}{P_y}$$
|
\item[Koordinatentransformation] $$P' =T*P = \begin{pmatrix} x_x & x_y\\ y_x & y_y \end{pmatrix} * \binom{P_x}{P_y}$$
|
||||||
@ -117,15 +117,15 @@
|
|||||||
|
|
||||||
\begin{description*}
|
\begin{description*}
|
||||||
\item[Skalierung, Projektion, Spiegelung] $\begin{pmatrix} F_x & 0 & 0 \\ 0 & F_y & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} = \begin{pmatrix} F_x*x \\ F_y*y \\ 1 \end{pmatrix}$
|
\item[Skalierung, Projektion, Spiegelung] $\begin{pmatrix} F_x & 0 & 0 \\ 0 & F_y & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} = \begin{pmatrix} F_x*x \\ F_y*y \\ 1 \end{pmatrix}$
|
||||||
|
|
||||||
$F_x,F_y>0$, uniform bei $F_X=F_y$
|
$F_x,F_y>0$, uniform bei $F_X=F_y$
|
||||||
|
|
||||||
$F_x=0$/$F_y=0$:Projektion auf y/x-Achse
|
$F_x=0$/$F_y=0$:Projektion auf y/x-Achse
|
||||||
|
|
||||||
$F_x=-1$/$F_y=-1$ Spiegelung an y/x-Achse
|
$F_x=-1$/$F_y=-1$ Spiegelung an y/x-Achse
|
||||||
|
|
||||||
$F_x=F_y=-1$Spiegelung am Ursprung
|
$F_x=F_y=-1$Spiegelung am Ursprung
|
||||||
|
|
||||||
\item[Scherung] $\begin{pmatrix} 1 & a & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix} x \\ y \\ w \end{pmatrix} = \begin{pmatrix} x+a*y \\ y \\ w \end{pmatrix}$
|
\item[Scherung] $\begin{pmatrix} 1 & a & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix} x \\ y \\ w \end{pmatrix} = \begin{pmatrix} x+a*y \\ y \\ w \end{pmatrix}$
|
||||||
\item[Rotation] $R_\theta *P= \begin{pmatrix}cos(\theta) & -sin(\theta) & 0 \\ sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix}x & y & 1 \end{pmatrix} = \begin{pmatrix} x cos(\theta) - y sind(\theta)\\ x sin(\theta)+y cos(\theta)\\ 1 \end{pmatrix}$
|
\item[Rotation] $R_\theta *P= \begin{pmatrix}cos(\theta) & -sin(\theta) & 0 \\ sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix}x & y & 1 \end{pmatrix} = \begin{pmatrix} x cos(\theta) - y sind(\theta)\\ x sin(\theta)+y cos(\theta)\\ 1 \end{pmatrix}$
|
||||||
\end{description*}
|
\end{description*}
|
||||||
@ -245,7 +245,9 @@
|
|||||||
\item Ermittlung: aus Richtung r und Augpunkt eine Gerade, dann schneidet diese Gerade die Projektionsfläche im Fliuchtpunkt für die Richtung r.
|
\item Ermittlung: aus Richtung r und Augpunkt eine Gerade, dann schneidet diese Gerade die Projektionsfläche im Fliuchtpunkt für die Richtung r.
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\newpage
|
\end{multicols}
|
||||||
|
\newpage
|
||||||
|
\begin{multicols}{3}
|
||||||
\section{Modellierung}
|
\section{Modellierung}
|
||||||
|
|
||||||
\paragraph{Boundary Representation (B-Rep)}
|
\paragraph{Boundary Representation (B-Rep)}
|
||||||
@ -386,8 +388,8 @@
|
|||||||
\item Aufwand für Raytracing pro Zelle proportional zur Baumtiefe und Anzahl der dortigen Dreiecke $n_j$;$\rightarrow$ Gesamtaufwand für Strahl $i$ sei $\sum(P(i,j)*n_j)$
|
\item Aufwand für Raytracing pro Zelle proportional zur Baumtiefe und Anzahl der dortigen Dreiecke $n_j$;$\rightarrow$ Gesamtaufwand für Strahl $i$ sei $\sum(P(i,j)*n_j)$
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item große Zellen mit wenigen Dreiecken senken Gesamtaufwand
|
\item große Zellen mit wenigen Dreiecken senken Gesamtaufwand
|
||||||
\item $P(i,j)$ ist proportional zur Oberfläche einer Zelle
|
\item $P(i,j)$ ist proportional zur Oberfläche einer Zelle
|
||||||
\item SAH optimiert das Produkt der Zellgröße mal Anzahl Dreiecke im Teilbaum. Für den kD-Baum in Richtung k: $D_k = D_{k_{links}} + D_{k_{rechts}}$
|
\item SAH optimiert das Produkt der Zellgröße mal Anzahl Dreiecke im Teilbaum. Für den kD-Baum in Richtung k: $D_k = D_{k_{links}} + D_{k_{rechts}}$
|
||||||
\item bei ungleicher Verteilung der Dreiecke enthalten 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 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*}
|
\end{itemize*}
|
||||||
|
|
||||||
@ -402,7 +404,9 @@
|
|||||||
\item Loose Octree: die Zellen des Octrees werden so vergrößert, dass sie mit ihren direkten Nachbarn in jeder Richtung um 50\% überlappen. Objekte, die im einfachen Octree aufgrund ihrer Größe Grenzen schneiden würden, können im Loose Octree in den Zwischenknoten gespeichert werden. Ein Objekt mit Durchmesser bis zu $\frac{D}{2^L}$ kann auf der Ebene L abgelegt werden. Eine Suche im Loose Octree muss daher außer der direkt betroffenen Zelle auch die überlappenden direkten Nachbarn berücksichtigen. Dadurch vergrößert sich der Aufwand einer Suche um einen konstantne Faktor. Beachte: Die asymptotosche Komplexität (O-Notation) ist dadurch nicht beeinflusst.
|
\item Loose Octree: die Zellen des Octrees werden so vergrößert, dass sie mit ihren direkten Nachbarn in jeder Richtung um 50\% überlappen. Objekte, die im einfachen Octree aufgrund ihrer Größe Grenzen schneiden würden, können im Loose Octree in den Zwischenknoten gespeichert werden. Ein Objekt mit Durchmesser bis zu $\frac{D}{2^L}$ kann auf der Ebene L abgelegt werden. Eine Suche im Loose Octree muss daher außer der direkt betroffenen Zelle auch die überlappenden direkten Nachbarn berücksichtigen. Dadurch vergrößert sich der Aufwand einer Suche um einen konstantne Faktor. Beachte: Die asymptotosche Komplexität (O-Notation) ist dadurch nicht beeinflusst.
|
||||||
\end{enumerate*}
|
\end{enumerate*}
|
||||||
|
|
||||||
\newpage
|
\end{multicols}
|
||||||
|
\newpage
|
||||||
|
\begin{multicols}{3}
|
||||||
\section{Rastergrafik}
|
\section{Rastergrafik}
|
||||||
|
|
||||||
\subsection{ Midpoint Algorithmus}
|
\subsection{ Midpoint Algorithmus}
|
||||||
@ -504,12 +508,12 @@
|
|||||||
|
|
||||||
\paragraph{Pseudozufälliges Supersampling}
|
\paragraph{Pseudozufälliges Supersampling}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Kombination: Supersampling, Multisampling und Quincunx
|
\item Kombination: Supersampling, Multisampling und Quincunx
|
||||||
\item bei Überwindung der Grenzen für Füllrate und Bandbreite überwiegen Vorteile des Supersamplings
|
\item bei Überwindung der Grenzen für Füllrate und Bandbreite überwiegen Vorteile des Supersamplings
|
||||||
\item Ordered/rotated grid weisen nach Strukturklassen Vor-/Nachteile auf. Verbleibende Artefakte wiederholen sich bei großen Flächen - oft als störend empfunden
|
\item Ordered/rotated grid weisen nach Strukturklassen Vor-/Nachteile auf. Verbleibende Artefakte wiederholen sich bei großen Flächen - oft als störend empfunden
|
||||||
\item pszufällige Auswahl von Abtastmustern für Supersampling
|
\item pszufällige Auswahl von Abtastmustern für Supersampling
|
||||||
\item nachträgliche Abminderung regelmäßiger Strukturen durch vorsichtiges Verrauschen (Rauschfilter)
|
\item nachträgliche Abminderung regelmäßiger Strukturen durch vorsichtiges Verrauschen (Rauschfilter)
|
||||||
\item entfernungsabhängiges Antialiasing
|
\item entfernungsabhängiges Antialiasing
|
||||||
\item pseudozufällig
|
\item pseudozufällig
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Samples können nur an n vordefinierten Positionen stattfinden (Sample-Positionsmuster)
|
\item Samples können nur an n vordefinierten Positionen stattfinden (Sample-Positionsmuster)
|
||||||
@ -590,9 +594,11 @@
|
|||||||
\item komplementär zu A.A.
|
\item komplementär zu A.A.
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\newpage
|
\end{multicols}
|
||||||
|
\newpage
|
||||||
|
\begin{multicols}{3}
|
||||||
\section{Farbräume}
|
\section{Farbräume}
|
||||||
|
|
||||||
\subsection{Farbwahrnehmung - Phänonmenologie}
|
\subsection{Farbwahrnehmung - Phänonmenologie}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Hell- und Farbempfinden als Sinneseindruck beschrieben
|
\item Hell- und Farbempfinden als Sinneseindruck beschrieben
|
||||||
@ -602,24 +608,24 @@
|
|||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\begin{description*}
|
\begin{description*}
|
||||||
\item[Farbton] (Hue)
|
\item[Farbton] (Hue)
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Farbpalette aus abstufung grober Farbtöne
|
\item Farbpalette aus abstufung grober Farbtöne
|
||||||
\item direkt nebeneinanderliegende Farben im Farbspektrum werden als ähnlich empfunden
|
\item direkt nebeneinanderliegende Farben im Farbspektrum werden als ähnlich empfunden
|
||||||
\item Farbwerte lassen sich ordnen
|
\item Farbwerte lassen sich ordnen
|
||||||
\item als bunt empfunden (voll gesättigte Farben im Gegensatz zu Grautönen)
|
\item als bunt empfunden (voll gesättigte Farben im Gegensatz zu Grautönen)
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item[Farbsättigung] (Saturation)
|
\item[Farbsättigung] (Saturation)
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Stufen zwischen Bunt und Grau
|
\item Stufen zwischen Bunt und Grau
|
||||||
\item Pastelltöne sind weniger bunt aber nicht farblos
|
\item Pastelltöne sind weniger bunt aber nicht farblos
|
||||||
\item Grauton (keine Farbwerte unterscheidbar)
|
\item Grauton (keine Farbwerte unterscheidbar)
|
||||||
\item jedem Farbton können Abstufungen bis Grau zugeordnet werden
|
\item jedem Farbton können Abstufungen bis Grau zugeordnet werden
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item[Helligkeitsstufen] (Lightness/Brightness/Value/Intensity)
|
\item[Helligkeitsstufen] (Lightness/Brightness/Value/Intensity)
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item unterschiedliche Helligkeitsabstufungen bis Schwarz
|
\item unterschiedliche Helligkeitsabstufungen bis Schwarz
|
||||||
\item im Schwarzen sind keine Farbtöne mehr unterscheidbar
|
\item im Schwarzen sind keine Farbtöne mehr unterscheidbar
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\end{description*}
|
\end{description*}
|
||||||
|
|
||||||
\subsection{Modell der Farben}
|
\subsection{Modell der Farben}
|
||||||
@ -703,7 +709,9 @@
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
\newpage
|
\end{multicols}
|
||||||
|
\newpage
|
||||||
|
\begin{multicols}{3}
|
||||||
\section{Licht \& Reflexion}
|
\section{Licht \& Reflexion}
|
||||||
\begin{description*}
|
\begin{description*}
|
||||||
\item[Licht] Teil der elektromagnetischen Strahlung
|
\item[Licht] Teil der elektromagnetischen Strahlung
|
||||||
@ -714,15 +722,13 @@
|
|||||||
\item[Lumen] 1 Lumen ist der Lichtstrom einer 1,464 mW starken 555-nm-Lichtquelle mit 100\% Lichtausbeute
|
\item[Lumen] 1 Lumen ist der Lichtstrom einer 1,464 mW starken 555-nm-Lichtquelle mit 100\% Lichtausbeute
|
||||||
\end{description*}
|
\end{description*}
|
||||||
|
|
||||||
In der Radiometrie wird sich mit objektiven Messgrößen beschäftigt, in der Photometrie fließt spektrale Empfindlichkeit des menschlichen Auges mit ein.
|
|
||||||
|
|
||||||
\paragraph{Radiometrie (energetisch $e$) }
|
\paragraph{Radiometrie (energetisch $e$) }
|
||||||
\begin{description*}
|
\begin{description*}
|
||||||
\item[Strahlungsenergie $Q$] durch Strahlung übertragene Energie $[J]$
|
\item[Strahlungsenergie $Q$] durch Strahlung übertragene Energie $[J]$
|
||||||
\item[Strahlungsleistung $\phi$] transportierte Strahlungsenergie in einer bestimmten Zeit $\phi = \frac{Q}{t} [W]$
|
\item[Strahlungsleistung $\phi$] transportierte Strahlungsenergie in einer bestimmten Zeit $\phi = \frac{Q}{t} [W]$
|
||||||
\item[Strahlstärke/Intensität $I$] Strahlungsleistung die in eine Raumrichtung mit Raumwinkel $\Omega$ emittiert wird $I=\frac{\phi}{\Omega}=\frac{W}{sr}$
|
\item[Strahlstärke/Intensität $I$] Strahlungsleistung die in eine Raumrichtung mit Raumwinkel $\Omega$ emittiert wird $I=\frac{\phi}{\Omega}=\frac{W}{sr}$
|
||||||
\item[Bestrahlungsstärke/Irradiance $E$] Strahlungsleistung durch die bestrahlte Fläche $A_i$ bzw. Strahlstärke die auf die Empfängerfläche trifft $E=\frac{W}{m^2}=\frac{\Phi}{A_i}$
|
\item[Bestrahlungsstärke/Irradiance $E$] Strahlungsleistung durch die bestrahlte Fläche $A_i$ bzw. Strahlstärke die auf die Empfängerfläche trifft $E=\frac{W}{m^2}=\frac{\Phi}{A_i}$
|
||||||
\item[Strahldichte/Radiance $L$] Strahlstärke von Sendefläche $A_r$ in eine bestimmte Richtung $L = \frac{I}{A'_r}=\frac{I}{\cos(\phi_r)*A_r} = \frac{\phi}{\cos(\phi_r)*A_r*\Omega}$; $\phi_r$ ist Winkel zwischen Normalen n und Abstrahlrichtung
|
\item[Strahldichte/Radiance $L$] Strahlstärke von Sendefläche $A_r$ in eine bestimmte Richtung $L = \frac{I}{A'_r} = \frac{\phi}{\cos(\phi_r)*A_r*\Omega}$; $\phi_r$ ist Winkel zwischen Normalen n und Abstrahlrichtung
|
||||||
\end{description*}
|
\end{description*}
|
||||||
|
|
||||||
\paragraph{Photometrie (visuell $v$ )}
|
\paragraph{Photometrie (visuell $v$ )}
|
||||||
@ -734,11 +740,9 @@
|
|||||||
\item[Leuchtdichte/Luminanz $L$] $[\frac{cd}{m^2}]$
|
\item[Leuchtdichte/Luminanz $L$] $[\frac{cd}{m^2}]$
|
||||||
\end{description*}
|
\end{description*}
|
||||||
|
|
||||||
$$A=2\pi r^2; \Omega=\frac{A}{r^2}=2\pi ; I_e=\frac{\phi_e}{\Omega}= \frac{W}{sr}$$
|
|
||||||
|
|
||||||
\paragraph{Raumwinkel}
|
\paragraph{Raumwinkel}
|
||||||
Der Steradiant ist eine Maßeinheit für den Raumwinkel, der von der Mitte M einer Kugel mit Radius r aus gesehen eine Fläche von $r^2$ auf der Kugeloberfläche einnimmt. $\Omega=\frac{Flaeche}{Radius^2}=\frac{A}{r^2}sr$.
|
Steradiant ist Maßeinheit für Raumwinkel, der von der Mitte einer Kugel mit Radius aus gesehen eine Fläche von $r^2$ auf der Kugeloberfläche einnimmt $\Omega=\frac{A}{r^2}sr$.
|
||||||
Eine komplette Kugeloberfläche beträgt $A_k = 4\pi r^2$, entspricht einem Raumwinkel $\Omega$ von $\frac{A_k}{r^2}= 4\pi r\approx 12,5sr$. Ein Steradiant $=1sr$ entspricht einem Öffnungswinkel $\alpha$ von ca. $65,54^{\circ}$
|
Komplette Kugeloberfläche beträgt $A_k = 4\pi r^2$, entspricht einem Raumwinkel $\Omega$ von $A_k\backslash r^2= 4\pi r$. Ein Steradiant $=1sr$ entspricht einem Öffnungswinkel $\alpha$ von $\approx 65,54^{\circ}$
|
||||||
|
|
||||||
\paragraph{Räumliche Ausbreitung}
|
\paragraph{Räumliche Ausbreitung}
|
||||||
Flächen Energieübertragung
|
Flächen Energieübertragung
|
||||||
@ -747,11 +751,11 @@
|
|||||||
\item die Flächen stehen nicht notwendigerweise senkrecht zur Ausbreitungsrichtung des Lichts
|
\item die Flächen stehen nicht notwendigerweise senkrecht zur Ausbreitungsrichtung des Lichts
|
||||||
\item abstrahlende und empfangende Fläche jeweils in Ausbreitungsrichtung mit projizierten Flächen $A'_r$ und $A'_i$.
|
\item abstrahlende und empfangende Fläche jeweils in Ausbreitungsrichtung mit projizierten Flächen $A'_r$ und $A'_i$.
|
||||||
\item Punktlichtquellen von der abstrahlenden Fläche $A_r$, welche ihre Strahlungsleistung in den Raumwinkel $\Omega$ abgeben
|
\item Punktlichtquellen von der abstrahlenden Fläche $A_r$, welche ihre Strahlungsleistung in den Raumwinkel $\Omega$ abgeben
|
||||||
\item $\Omega$ ist somit die in Abstrahlrichtung reduzierte Fläche $A'_i$ , projiziert auf die Einheitskugel: $\Omega=\frac{A'_i}{r^2}$
|
\item $\Omega$ ist somit die in Abstrahlrichtung reduzierte Fläche $A'_i$ , projiziert auf die Einheitskugel: $\Omega=A'_i \backslash r^2$
|
||||||
\item Die übertragene Energie nimmt quadratisch zu r ab
|
\item Die übertragene Energie nimmt quadratisch zu r ab
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\subsection{Reflexion}
|
\paragraph{Reflexion}
|
||||||
Nach Auftreffen auf einer opaken Oberfläche wird Strahlung spektral unterschiedlich stark und geometrisch auf unterschiedliche Weise reflektiert.
|
Nach Auftreffen auf einer opaken Oberfläche wird Strahlung spektral unterschiedlich stark und geometrisch auf unterschiedliche Weise reflektiert.
|
||||||
Fälle der Reflexion:
|
Fälle der Reflexion:
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
@ -880,6 +884,7 @@
|
|||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item $\frac{n+2}{2\pi}$ Normalisierungsfaktor zur Helligkeitsregulierung
|
\item $\frac{n+2}{2\pi}$ Normalisierungsfaktor zur Helligkeitsregulierung
|
||||||
\item $I_{out}=I_a*k_a+I_{in}*k_d*\cos(\phi)+I_{in}*k_s*\frac{n+2}{2\pi}*\cos^n(\theta)$
|
\item $I_{out}=I_a*k_a+I_{in}*k_d*\cos(\phi)+I_{in}*k_s*\frac{n+2}{2\pi}*\cos^n(\theta)$
|
||||||
|
\item $\cos(\phi)=V^T_I*n_i$, $cos^n(\theta)=(V^T_r * V_e)^n$
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\paragraph{Cook-Torrance}
|
\paragraph{Cook-Torrance}
|
||||||
@ -891,139 +896,112 @@
|
|||||||
\item Beckmann-Verteilung: $l_{spec}=\frac{exp(-\frac{tan^2(\alpha)}{m^2})}{\pi m^2 cos^4 (\alpha)}$ mit $\alpha=arccos(N*H)$
|
\item Beckmann-Verteilung: $l_{spec}=\frac{exp(-\frac{tan^2(\alpha)}{m^2})}{\pi m^2 cos^4 (\alpha)}$ mit $\alpha=arccos(N*H)$
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\newpage
|
\end{multicols}
|
||||||
|
\newpage
|
||||||
|
\begin{multicols}{3}
|
||||||
\section{Schattierungsverfahren}
|
\section{Schattierungsverfahren}
|
||||||
\subsection{ Direkte Schattierung}
|
\subsection{ Direkte Schattierung}
|
||||||
Bisher:
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Zerlegung gekrümmter Flächen in Polygone (meist Drei- oder Vierecke)
|
\item Zerlegung gekrümmter Flächen in Polygone
|
||||||
\item Positionen der (Eck-)Punkte und Normalen im 3D sowie der Punkte im 2D-Bild sind bekannt (per Matrixmultiplikation für Transformationen und Projektion)
|
\item Positionen der (Eck-)Punkte und Normalen im 3D sowie der Punkte im 2D-Bild sind bekannt
|
||||||
\item Pixelpositionen für Polygone/Dreiecke im Bild per Scanline-Algorithmus
|
\item Pixelpositionen für Polygone im Bild per Scanline-Alg.
|
||||||
\item lokale Beleuchtungsmodelle für 3D-Punkte (z.B. per Phong-Beleuchtungsmodell)
|
\item lokale Beleuchtungsmodelle für 3D-Punkte
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Jetzt: Wie kommt Farbe (effizient) in die Pixel? Wie oft muss lokales Beleuchtungsmodell bei n Pixeln im Dreieck angewendet werden?
|
|
||||||
|
|
||||||
\begin{tabular}{c | c | c}
|
|
||||||
Verfahren & Anz. & Idee \\\hline
|
|
||||||
Flat-Shading & 1 & eine Berechnung, dann gleiche Farbe für alle Pixel des Dreiecks/Polygons verwenden \\
|
|
||||||
Gouraud-Shading & 3 & pro Eckpunkt eine Farbe berechnen, dann lineare Interpolation (pro Dreieck) für jedes Pixel \\
|
|
||||||
Phong-Shading & n & eine Berechnung pro Pixel, davor aber jeweils lineare Interpolation der Normalen pro Pixel \\
|
|
||||||
\end{tabular}
|
|
||||||
|
|
||||||
$\rightarrow$ Phong-Beleuchtungsmodell in jedem der obigen Shading-Verfahren nutzbar
|
|
||||||
|
|
||||||
$\rightarrow$ hier nur direkte Schattierung (nur lokal, wo sind die Lichtquellen), d.h. nicht global (wie bei Radiosity \& Raytracing)
|
|
||||||
|
|
||||||
\paragraph{Flat-Shading}
|
\paragraph{Flat-Shading}
|
||||||
Arbeitsweise des Flat-Shadings
|
Arbeitsweise
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
|
\item eine Berechnung, gleiche Farbe für alle Pixel des Polygons
|
||||||
\item stets nur 1 Farbwert pro (ebener) Fläche,
|
\item stets nur 1 Farbwert pro (ebener) Fläche,
|
||||||
\item Stelle der Berechnung frei wählbar (möglichst repräsentativ),
|
\item Stelle der Berechnung frei wählbar (mögl. repräsentativ),
|
||||||
\item repräsentativ wäre z.B.: Punkt (Ort mit Normale) in der Mitte der Fläche
|
\item z.B. Punkt (Ort mit Normale) in der Mitte der Fläche
|
||||||
\item $\rightarrow$ trivial für Drei- und Vierecke? $\rightarrow$ für Dreiecke und konvexe Vierecke!
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Auswirkungen
|
Auswirkungen
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item 'flaches' Aussehen und Helligkeitssprünge an den Kanten, das ist:
|
\item 'flaches' Aussehen und Helligkeitssprünge an Kanten
|
||||||
\item schlecht für Fotorealismus,
|
\item gut für abstraktere technische Darstellungen
|
||||||
\item gut für abstraktere technische Darstellungen und
|
\item wichtig für realistische Darstellung kantiger Körper
|
||||||
\item u.U. wichtig für realistische Darstellung kantiger Körper (insbes. wenn pro Eckpunkt nur eine Normale modelliert ist).
|
|
||||||
\item schneller als die anderen Verfahren,
|
\item schneller als die anderen Verfahren,
|
||||||
\item u.U. genauso gut wie z.B. Phong-Shading, wenn z.B.:
|
\item d.h. nur ca. 1 Pixel pro Polygon gerendert wird ($n==1$)
|
||||||
\item das Objekt sehr fein modelliert wurde oder
|
|
||||||
\item sehr weit entfernt ist
|
|
||||||
\item $\rightarrow$ d.h. nur ca. 1 Pixel pro Polygon/Dreieck gerendert wird (n==1)
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\paragraph{Gouraud-Shading}
|
\paragraph{Gouraud-Shading}
|
||||||
|
[H. Gouraud 1971]
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Gouraud-Shading [H. Gouraud 1971] schattiert Dreiecke (bzw. aus Dreiecken zusammengesetzte Polygone) kontinuierlich,
|
\item pro Eckpunkt eine Farbe berechnen, dann lineare Interpolation (pro Dreieck) für jedes Pixel
|
||||||
\item beseitigt damit die Diskontinuitäten des Flat-Shadings,
|
\item schattiert Dreiecke kontinuierlich,
|
||||||
\item meist gleiche Normalen pro Vertex, d.h. pro Dreieck wirken oft 3 verschiedene Richtungsvektoren statt nur eine Normale (Dreiecksmitte) wie beim Flat-Shading und
|
\item beseitigt die Diskontinuitäten des Flat-Shadings,
|
||||||
\item lineare Interpolation der Schattierung (Intensitäten) im Inneren des Dreiecks aus den 3 Farbwerten der Eckpunkte.
|
\item meist gleiche Normalen pro Vertex (pro Dreieck wirken 3 verschiedene Richtungsvektoren)
|
||||||
\item Es werden 'Normalenvektoren' $n_i$ für jeden Eckpunkt $P_i$ des Polygons ermittelt bzw. ausgelesen.
|
\item lineare Interpolation der Schattierung (Intensitäten) im Inneren des Dreiecks aus den 3 Farbwerten der Eckpunkte
|
||||||
\item Die Herleitung der 'Normalenvektoren' $n_i$ ist aus der Originaloberfläche (z.B. Zylinder, Kegel, Bèzier-Fläche) oder Nachbarpolygonen möglich.
|
\item Normalenvektoren $n_i$ für jeden Eckpunkt $P_i$ des Polygons
|
||||||
\item Für jeden Eckpunkt: Berechnung der Beleuchtungsintensität $I_i$ (z. B. nach dem Phong-Beleuchtungsmodell).
|
\item Herleitung der 'Normalenvektoren' $n_i$ aus der Originaloberfläche oder Nachbarpolygonen
|
||||||
\item Normalen $n_i$ der Eckpunkte werden entweder direkt aus den Flächen (z.B. Regelgeometrien, bei Kugel z.B. Richtung des Radiusvektors) oder aus den Flächennormalen der benachbarten Polygone durch flächengewichtete Mittelung berechnet.
|
\item jeder Eckpunkt: Berechnung der Beleuchtungsintensität $I_i$
|
||||||
\item Die Schattierungsrechnung (RGB-Werte) erfolgt für die Eckpunkte und liefert die reflektierte Leuchtdichte $I_i$ . Zur Erinnerung, das Phong-Beleuchtungsmodell:
|
\item Normalen $n_i$ der Eckpunkte direkt aus Flächen oder aus Flächennormalen benachbarter Polygone durch flächengewichtete Mittelung
|
||||||
\item $I_{out}=I_a*k_a+I_{in}*k_d*\cos(\phi)+I_{in}*k_s*\frac{n+2}{2\pi}*\cos^n(\theta)$
|
\item Die Schattierungsrechnung erfolgt für Eckpunkte und liefert reflektierte Leuchtdichte $I_i$
|
||||||
\item $\cos(\phi)=V^T_I*n_i$, $cos^n(\theta)=(V^T_r * V_e)^n$
|
\item Bei der Rasterkonvertierung wird zwischen Eckwerte $I_i$ linear interpoliert und damit die Intensität jedes Pixels der Rasterlinie berechnet
|
||||||
\item Nach Anwendung des Beleuchtungsmodells an den Eckpunkten (auch Vertex-Shading genannt)
|
\item Interpolation erfolgt nach gleichen arithmetischen Muster wie Interpolation der x-Werte beim Polygonfüllalgorithmus
|
||||||
\item Bei der Rasterkonvertierung wird zwischen den Eckwerte $I_i$ linear interpoliert und damit die Intensität jedes Pixels der Rasterlinie berechnet (Intensität I steht hier für die Leuchtdichte oder für Farbwerte usw.)
|
\item Für farbige Oberflächen werden die Leuchtdichten an Polygonecken durch RGB-Werte beschrieben und zwischen den Ecken linear interpoliert
|
||||||
\item Die Interpolation erfolgt nach dem gleichen arithmetischen Muster wie die Interpolation der x-Werte beim Polygonfüllalgorithmus, bzw. der $1/z$-Werte im z-Buffer-Verfahren (d. h. inkrementell, mit Ganzzahlarithmetik).
|
\item Resultat: Kontinuierlich schattierte 3-dim Oberflächen
|
||||||
\item Für farbige Oberflächen werden die Leuchtdichten an den Polygonecken durch RGB-Werte beschrieben und ebenso zwischen den Ecken linear interpoliert.
|
|
||||||
\item Resultat: Kontinuierlich schattierte dreidimensionale Oberflächen
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
%
|
%
|
||||||
|
|
||||||
Artefakte des Gouraud-Shading, bedingt durch die lineare Interpolation:
|
Artefakte des Gouraud-Shading, durch lineare Interpolation:
|
||||||
\begin{itemize*}
|
|
||||||
\item Fehlen von gut ausgeprägten Glanzlichtern (verwischt oder verschwunden)
|
|
||||||
\item Mach-Band-Effekt: ((helle) Bänder) Kontrastverstärkung durch das Auge an den Übergängen zwischen Polygonen
|
|
||||||
\item Diese Artefakte werden im Folgenden genauer untersucht.
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
\paragraph{Fehlende Glanzlichter}
|
\paragraph{Fehlende Glanzlichter}
|
||||||
Auf Grund der linearen Interpolation von Intensitäten können Glanzlichter, die auf spekulare Reflexion zurückzuführen sind, verloren gehen oder abgeschwächt/verschmiert werden. Das wird umso kritischer, je spitzer die spekulare Reflexion ist (großes n im $\cos^n$- Term).
|
Auf Grund der linearen Interpolation von Intensitäten können Glanzlichter, die auf spekulare Reflexion zurückzuführen sind, verloren gehen oder abgeschwächt/verschmiert werden. Das wird umso kritischer, je spitzer die spekulare Reflexion ist (großes n im $\cos^n$- Term).\\
|
||||||
|
|
||||||
Feinere Unterteilung der Oberfläche verbessert Resultat
|
Feinere Unterteilung der Oberfläche verbessert Resultat
|
||||||
|
|
||||||
%
|
%
|
||||||
|
|
||||||
\paragraph{Mach-Band-Effekt}
|
\paragraph{Mach-Band-Effekt}
|
||||||
Die lineare Interpolation der Leuchtdichte zwischen den Polygonkanten entlang der Rasterlinie führt zu einem Verlauf, der durch plötzliche Änderungen im Anstieg der Intensität gekennzeichnet ist (nicht stetig differenzierbar).
|
(Ernst Mach, 1865)
|
||||||
|
|
||||||
Der Mach-Band-Effekt: physiologisches Phänomen (Ernst Mach, 1865)
|
Die lineare Interpolation der Leuchtdichte zwischen den Polygonkanten entlang der Rasterlinie führt zu einem Verlauf, der durch plötzliche Änderungen im Anstieg der Intensität gekennzeichnet ist.
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Bei Sprüngen in der Helligkeitsänderung (c0-Stetigkeit, c1-Unstetigkeit, typisch für Approximation durch ebene Polygone beim Gouraud-Shading, z.B. Zylinder) stört dieser Effekt u. U. erheblich.
|
\item Kontrastverstärkung durch Auge an den Übergängen zwischen Polygonen (helle Bänder)
|
||||||
\item Gleiche Information benachbarter Rezeptoren wirkt bei der weiteren visuellen Verarbeitung lateral hemmend auf die lokale Lichtempfindung.
|
\item Bei Sprüngen in der Helligkeitsänderung stört dieser Effekt
|
||||||
\item Modellhaft entstehen neben dem eigentlichen Helleindruck auch 'Signale', die dem Helligkeitsgradienten (erste Ableitung) und dem Laplacefilter-Output (Laplacian of Gaussian / LoG, zweite Ableitung) entsprechen.
|
\item Gleiche Information benachbarter Rezeptoren wirkt bei weiterer visueller Verarbeitung lateral hemmend auf lokale Lichtempfindung.
|
||||||
\item Die Empfindung wird insgesamt nicht nur durch die Lichtintensität selbst, sondern auch durch die Überlagerung mit ihrer ersten und zweiten räumlichen Ableitung bestimmt.
|
\item Modellhaft entstehen neben eigentlichen Helleindruck auch Signale, die Helligkeitsgradienten und Laplacefilter-Output entsprechen
|
||||||
\item Das führt zu einer Verstärkung von Konturen an 'Sprungkanten' (c0-Unstetigkeiten, Intensitätssprünge). In der dunklen Fläche zeigt sich eine dunklere, in den hellen Flächen eine hellere Kantenlinie. Dort, wo Konturen vorhanden sind, ist das vorteilhaft (evolutionäre Entwicklung der menschlichen visuellen Wahrnehmung), obwohl Täuschungen damit verbunden sind (photometrischer Eindruck).
|
\item Empfindung wird insgesamt nicht nur durch Lichtintensität, sondern auch durch Überlagerung mit ihrer ersten und zweiten räumlichen Ableitung bestimmt
|
||||||
\item zunächst Kanten: Liegen eine helle und eine dunkle Fläche nebeneinander, beobachtet man einen dunklen Streifen auf der dunkleren Seite und einen hellen Streifen auf der helleren Seite (Kontrastverstärkung).
|
\item führt zu einer Verstärkung von Konturen an 'Sprungkanten'
|
||||||
\item Bei einer Abfolge von Flächen unterschiedlicher Graufärbung, die in sich keine Farbgraduierung haben, beobachten wir entlang der Grenzen machsche Streifen (nach Ernst Mach 1865). Dabei handelt es sich um helle und dunkle Streifen, die den Kontrast zwischen den Flächen verstärken. [Quelle: Wikipedia]
|
\item Liegen eine helle und dunkle Fläche nebeneinander, beobachtet man einen dunklen Streifen auf der dunkleren Seite und einen hellen Streifen auf der helleren Seite (Kontrastverstärkung)
|
||||||
|
\item Bei Abfolge von Flächen unterschiedlicher Graufärbung sind entlang der Grenzen machsche Streifen
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\paragraph{Phong-Shading}
|
\paragraph{Phong-Shading}
|
||||||
Phong-Shading [Phong 1975]:
|
(Phong 1975)
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Lineare Interpolation der Normalenvektoren zwischen den Polygonecken anstelle von Interpolation der Intensitätswerte (bei Grafikkarten/-software als Pixelshader bekannt).
|
\item Lineare Interpolation der Normalenvektoren zwischen Polygonecken anstelle von Interpolation der Intensität
|
||||||
\item Exakte Berechnung der $\cos^n$-Funktion im Phong-Beleuchtungsmodell für jedes Pixel : Glanzlichter werden erhalten!
|
\item Exakte Berechnung der $\cos^n$-Funktion im Modell für jedes Pixel : Glanzlichter werden erhalten!
|
||||||
\item Keine Diskontinuität der ersten Ableitung: Mach-Band-Effekt wird vermieden!
|
\item Keine Diskontinuität der ersten Ableitung: Mach-Band-Effekt wird vermieden!
|
||||||
|
\item eine Berechnung pro Pixel, davor aber jeweils lineare Interpolation der Normalen pro Pixel
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
|
|
||||||
\subsection{ 3D-Rendering}
|
\subsection{3D-Rendering}
|
||||||
Soll nur ein konvexes Objekt gerendert werden, dann ist die Entscheidung, welche Flächen zu zeichnen sind, einfach anhand der jeweiligen Normalen möglich.\\
|
mehrere konvexe Objekte oder konkave Objekte sollen gerendert werden. Verdeckungen sind möglich!
|
||||||
Annahme: mehrere konvexe Objekte oder auch konkave Objekte sollen gerendert werden. Verdeckungen sind also möglich!
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Korrekte Behandlung von Verdeckungen bedarf spezieller Ansätze/Datenstrukturen (Lösung des Reihenfolgeproblems).
|
\item Korrekte Behandlung von Verdeckungen bedarf spezieller Ansätze/Datenstrukturen (Reihenfolgeproblems)
|
||||||
\item Rein opake Szenen sind typischerweise wesentlich leichter zu implementieren als (teilweise) transparente (zusätzlich ein Berechnungsproblem).
|
\item Rein opake Szenen sind typischerweise wesentlich leichter zu implementieren als transparente (Berechnungsproblem)
|
||||||
\item Zeichenreihenfolge ist teilweise wichtig (z.B. von hinten nach vorn),
|
\item Zeichenreihenfolge ist teilweise wichtig
|
||||||
\item Algorithmen/Ansätze unterscheiden sich auch in der Granularität/Genauigkeit was auf einmal gezeichnet/sortiert wird:
|
\item Ansätze unterscheiden sich auch in der Granularität und Genauigkeit was auf einmal gezeichnet/sortiert wird
|
||||||
\item Objekte (ganze Objekte nach z-Position sortieren, dann jeweils zeichnen...)
|
\item ganze Objekte nach z-Position sortieren, dann jew. zeichnen
|
||||||
\item allg. (d.h. ggfs. überlappende) Polygone: Painters-Algorithmus,
|
\item allg. (ggfs. überlappende) Polygone: Painters-Algorithmus,
|
||||||
\item überlappungsfreie Dreiecke/Polygone: Depth-Sort-Algorithmus,
|
\item überlappungsfreie Polygone: Depth-Sort-Algorithmus,
|
||||||
\item Pixel: Z-Buffer-Verfahren (oft auch in Verbindung mit Obj.-Sort.)
|
\item Pixel: Z-Buffer-Verfahren (in Verbindung mit Obj.-Sort.)
|
||||||
\item Beliebte Testszene sind sich zyklisch überlappende Dreicke, z.B.
|
\item Beliebte Testszene sind sich zyklisch überlappende Dreicke
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\paragraph{Painter’s-Algorithmus}
|
\paragraph{Painter’s-Algorithmus}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Gegeben sei eine 3D-Szene, bestehend aus grauen Polygonen mit diffus reflektierender Oberfläche, sowie eine gerichtete Lichtquelle.
|
\item Gegeben sei 3D-Szene aus grauen Polygonen mit diffus reflektierender Oberfläche und gerichtete Lichtquelle
|
||||||
\item Für jedes Polygon wird die reflektierte Strahldichte L auf Basis des eingestrahlten Lichts (Richtung \& Stärke) und der Flächennormale berechnet:
|
\item Für jedes Polygon wird reflektierte Strahldichte L auf Basis des eingestrahlten Lichts und Flächennormale berechnet:
|
||||||
\item $I_{out} = L = I_{in}* k_d * \cos(\phi)$
|
\item $I_{out} = L = I_{in}* k_d * \cos(\phi)$
|
||||||
\item Die Polygone werden mittels perspektivischer Kameratransformation (4 x 4 Matrix) in das Kamera-Koordinatensystem (Bildraum) transformiert und nach absteigendem z-Wert (Distanz des Polygonschwerpunkts zum Betrachter) sortiert.
|
\item Polygone durch perspektivischer Kameratransformation in Bildraum transformiert und nach absteigendem z-Wert (Distanz Polygonschwerpunkts) sortiert
|
||||||
\item Die sortierten Polygone werden der Reihe nach (entfernte zuerst) mit dem 2D-Polygonfüllalgorithmus in das Pixelraster der x/y-Bildebene konvertiert.
|
\item sortierte Polygone (entfernte zuerst) mit Polygonfüllalgo. in Pixelraster der x/y Bildebene konvertiert
|
||||||
\item Die Pixel für jedes Polygon werden per Overwrite-Modus mit dem Farbwert L (nach obiger Berechnung) im Bildspeicher gespeichert.
|
\item Pixel für jedes Polygon per Overwrite-Modus mit Farbwert L im Bildspeicher gespeichert
|
||||||
\item Die Verdeckungsprobleme lösen sich durch die Reihenfolge quasi automatisch.
|
\item Verdeckungsprobleme lösen sich durch Reihenfolge selbst
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Gleichnis: Der Algorithmus arbeitet wie ein Maler, der zuerst den Hintergrund und dann Schritt für Schritt das jeweils weiter vorn liegende Objekt (oder Polygon bzw. Dreieck) zeichnet - und dabei die dahinterliegenden verdeckt. ABER, potentielle Probleme des Painter’s-Algorithmus: selbst bei Dreiecken sind trotzdem falsche Verdeckungen möglich!
|
|
||||||
|
|
||||||
\paragraph{Depth-Sort-Algorithmus}
|
\paragraph{Depth-Sort-Algorithmus}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Unterteilung in sich nicht überlappende und vollständig überdeckende Teilpolygone
|
\item Unterteilung in sich nicht überlappende und vollständig überdeckende Teilpolygone
|
||||||
@ -1031,373 +1009,278 @@
|
|||||||
\item Die sichtbaren Teilpolygone können nun ausgegeben werden:
|
\item Die sichtbaren Teilpolygone können nun ausgegeben werden:
|
||||||
\item Zeichnen der nicht überlappenden Teilpolygone
|
\item Zeichnen der nicht überlappenden Teilpolygone
|
||||||
\item Von den sich vollständig überlappenden Teilpolygonen wird nur das vordere gezeichnet.
|
\item Von den sich vollständig überlappenden Teilpolygonen wird nur das vordere gezeichnet.
|
||||||
|
%
|
||||||
|
\item Teilpolygone sollten möglichst nicht größer sein als Tiefenunterschied, damit sie in jeder Situation eindeutig sortiert werden
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
%
|
Anwendungsbereiche des Painter's/Depth-Sort Algorithmus:
|
||||||
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Eine einfache, nicht blickwinkelabhängige Unterteilung tut es in diesem Falle auch!
|
\item Einfache kleine Szenen/Objekte, unterschiedlicher z-Werte
|
||||||
\item Die Teilpolygone sollten dabei möglichst nicht größer sein als der Tiefenunterschied, damit sie in jeder Situation eindeutig sortiert werden können!
|
\item keine Hardware-Unterstützung für 3D-Rendering angeboten
|
||||||
\item Die 6 Teilpolygone können mittels Painter‘s Algorithmus korrekt sortiert und dargestellt werden
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Anwendungsbereiche des Painter's Algorithmus / Depth-Sort Algorithmus:
|
\paragraph{Z-Buffer-Verfahren} (CATMULL 1974)
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Einfache Szenen, kleine Objekte, die sich in den z-Werten hinreichend unterscheiden.
|
\item Einer der einfachsten 'visible surface'-Algorithmen
|
||||||
\item Dort, wo keine Hardware-Unterstützung für 3D-Rendering angeboten wird (begrenzter Speicher, keine Z-Buffer Unterstützung).
|
\item Probleme des Painters-Algorithmus werden überwunden
|
||||||
\item Viele 2D-Grafiksystem bieten bereits Polygonfüllverfahren an.
|
\item Berechnung des z-Wertes für jeden Punkt jedes Polygons und Speicherung des zur Projektionsebene nächstliegenden Farb- und Z-Wertes
|
||||||
\item Ähnliche Vorgehensweise wird auch für das Schattieren von semi-transparenten Flächen notwendig (s. später)!
|
\item zusätzlicher Speicher (z-Buffer) für jedes Pixel notwendig
|
||||||
\end{itemize*}
|
\item weder Vorsortieren noch Polygonzerlegung erforderlich
|
||||||
|
\item Initialisierung: Für alle Pixel
|
||||||
Als Sortierverfahren für Echtzeitsysteme eignet sich z.B. 'Insertion-Sort':
|
\begin{itemize*}
|
||||||
\begin{itemize*}
|
\item Setze Farbe auf Hintergrundfarbe
|
||||||
\item Begründung: Von Bild zu Bild ändert sich die Tiefenwerte (und damit die Reihenfolge) der Polygone relativ wenig. Damit sind die Polygone beim nächsten Bild bereits mehr oder weniger vorsortiert (nur wenige Polygone) müssen neu einsortiert werden. Die Komplexität von Insertion-Sort wird bei bereits sortierten Listen linear (O-Notation / best case).
|
\item Setze alle Z -Werte auf $\infty$ (max. Wert)
|
||||||
\item Folglich tritt beim Painters-Algorithmus der best case sehr häufig ein (außer beim ersten Bild, wo man vom average case ausgehen kann- hier wird die Komplexität quadratisch).
|
\item Setze Z min auf Wert der Near-Plane
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
\item Für alle Polygone (im 3D-Kamerakoordinatensystem)
|
||||||
\paragraph{Z-Buffer-Verfahren}
|
\begin{itemize*}
|
||||||
\begin{itemize*}
|
\item Rasterumwandlung in der Projektionsebene durch modifizierten 2D-Polygonfüllalgorithmus
|
||||||
\item Einer der einfachsten 'visible surface'-Algorithmen (CATMULL 1974)
|
\item zusätzliche Berechnung des z-Wertes für jedes Pixel
|
||||||
\item Probleme des Painters-Algorithmus werden überwunden durch zusätzliche Berechnung des z-Wertes für jeden Punkt jedes Polygons und Speicherung des zur Projektionsebene nächstliegenden Farb- und Z-Wertes.
|
\item Write Pixel Prozedur: z-Wert des aktuellen Pixels kleiner als bereits abgespeicherte z-Wert $\Rightarrow$ z-Buffer Farbe sowie $z_p$ überschrieben
|
||||||
\item Dazu ist ein zusätzlicher Speicher (z-Buffer) für jedes Pixel notwendig.
|
\item näher an Kamera liegende Pixel überschreiben weiter weg liegende
|
||||||
\item Es sind weder Vorsortieren von Objekten noch Polygonzerlegung erforderlich (wenn alle Objekte opak sind).
|
\item Pixelgenaue Sichtbarkeitsbestimmung und -behandlung der Polygone
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
\item Berechnen der z-Werte durch lineare Interpolation
|
||||||
Initialisierung: Für alle Pixel
|
\begin{itemize*}
|
||||||
\begin{itemize*}
|
\item Tiefenwerte auch nach Ansichten-Transformation nur für die Eckpunkte gegeben
|
||||||
\item Setze Farbe auf Hintergrundfarbe (z.B. Weiß)
|
\item Zunächst lineare Interpolation der z-Werte entlang der Polygonkanten $P_i P_j$ für y-Position der Scanline
|
||||||
\item Setze alle Z -Werte auf $\infty$ (max. ganzzahliger Wert)
|
\item Danach Füllen der Bildzeile der Interpolation der z-Werte entsprechend
|
||||||
\item Setze Z min auf Wert der Near-Plane
|
\end{itemize*}
|
||||||
\end{itemize*}
|
\item Berechnung der z-Werte eines Pixels x/y
|
||||||
|
\begin{itemize*}
|
||||||
Für alle Polygone (im 3D-Kamerakoordinatensystem)
|
\item Die y-Koordinate reicht zur Interpolation von $z_A,z_B$
|
||||||
\begin{itemize*}
|
\item Pixel-z-Wert $z_p$ wird äquivalent ermittelt
|
||||||
\item Rasterumwandlung in der Projektionsebene ($x_p/y_p$ Koordinaten) durch modifizierten 2D-Polygonfüllalgorithmus. Modifiziert heißt: zusätzliche Berechnung des z-Wertes für jedes Pixel
|
\item $z_A, z_B, x_A, x_B$, in $z_p$ werden gleichzeitig mit $x_A$- Werten von einer Rasterlinie zur nächsten inkrement.
|
||||||
\item Anwendung einer Write Pixel ZB-Prozedur:
|
\item Brüche bleiben in allen Ausdrücken rational
|
||||||
\item Wenn der z-Wert des aktuellen Pixels (im abzuarbeitenden Polygon) kleiner als der bereits abgespeicherte z-Wert ($z_p$) an dieser Position ist, wird im z-Buffer bei $x_p , y_p$ die Farbe sowie $z_p$ ) überschrieben (mit den neuen Werten).
|
\item Ausdrücke für die z-Werte haben identische Form wie die der x-Werte beim Polygonfüllalgorithmus
|
||||||
\item Sonst: alte Werte im Speicher bleiben erhalten
|
\end{itemize*}
|
||||||
\item Die näher an der Kamera liegen Pixel überschreiben somit die weiter weg liegenden.
|
%
|
||||||
\item Pixelgenaue Sichtbarkeitsbestimmung und -behandlung der Polygone
|
\item Z-Buffer-Ergebnis ist vergleichbar mit Painters-Algorithmus
|
||||||
\end{itemize*}
|
\item bei opaken Objekten keine vorgängige Sortierung der Polygone nötig
|
||||||
|
\item pixelgenau: überlappende Polygone korrekt dargestellt
|
||||||
Berechnen der z-Werte durch lineare Interpolation:
|
\item Kaum Mehraufwand gegenüber Polygonfüllalgorithmus
|
||||||
\begin{itemize*}
|
\item Problem: Korrekte Berücksichtigung von Transparenzen
|
||||||
\item Die Tiefenwerte sind auch nach der Ansichten-Transformation (View-Transformation) zunächst nur für die Eckpunkte gegeben.
|
|
||||||
\item Zunächst erfolgt die lineare Interpolation der z-Werte entlang der Polygonkanten $P_i P_j$ für die y-Position der gerade aktuellen Scanline
|
|
||||||
\item Danach wird mit dem Füllen der Bildzeile (z.B. durch einen konventionellen Polygonfüll-Algorithmus) die Interpolation der z-Werte entsprechend der x-Position in der Scanline (Bildzeile) fortgesetzt (pixelgenaues Befüllen des z-Buffers).
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
Berechnung der z-Werte eines Pixels x/y:
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Die y-Koordinate reicht zur Interpolation von $z_A$ und $z_B$ (Strahlensatz).
|
|
||||||
\item Pixel-z-Wert $z_p$ wird äquivalent ermittelt, allerdings die Interpolationskoordinate jetzt x (y = const für die Rasterlinie)
|
|
||||||
\item Die Werte $z_A, z_B, x_A, x_B$, in $z_p$ werden gleichzeitig mit den $x_A$-Werten (Schnitte) von einer Rasterlinie zur nächsten inkrementiert (s. Polygonfüllalgorithmus)
|
|
||||||
\item Die Brüche bleiben in allen Ausdrücken rational.
|
|
||||||
\item Die Ausdrücke für die z-Werte haben identische Form wie die der x-Werte beim Polygonfüllalgorithmus.
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
Immer Ganzzahlarithmetik! (ähnlich wie x-Werte im Polygonfüllagorithmus)
|
|
||||||
|
|
||||||
Beispiel: Mögliche Berechnungen eines Tiefenwertes der Pixel
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Als Beispiel dient hier eine Tischplatte (Rechteck, Größe 3m x 1m) in der Perspektive
|
|
||||||
\item Achtung: Eine lineare Interpolation der z-Werte im Bildraum (links) ist nicht wirklich korrekt! (höchstens als Näherung, OK für kleine nahe Flächen)
|
|
||||||
\item $\frac{1}{z}$ kann exakt linear in x- \& y-Richtung interpoliert werden (Abbildung rechts).
|
|
||||||
\item Da $z_1$ abnimmt, wenn z zunimmt, muss aber der z-Test invertiert werden!
|
|
||||||
\item positive Auswirkung: Tiefeninfos naher Obj. werden mit höherer z-Genauigkeit gespeichert als weiter von der Kamera entfernte. Statistisch gesehen gibt es damit weniger 'z-Fighting“-Effekte (z.B. bei Bewegungen willkürliche Farbwechsel zwischen den Farben von Objekten mit nahezu der selben Tiefeninfo im z-Buffer).
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
%
|
|
||||||
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Das Ergebnis des Z-Buffer-Verfahrens ist vergleichbar mit dem Painters-Algorithmus.
|
|
||||||
\item Es ist jedoch bei opaken Objekten keine vorgängige Sortierung der Polygone nötig. Sie können in beliebiger Reihenfolge gezeichnet werden.
|
|
||||||
\item Die Interpolation der 1/z-Werte erfolgt im Polygonfüll-Algorithmus durch wenige Ganzzahl-Operationen (wie bei den x-Werten)
|
|
||||||
\item Das Verfahren ist pixelgenau: Es werden auch zyklisch sich überlappende (und sogar räumlich sich durchdringende) Polygone korrekt dargestellt.
|
|
||||||
\item Kaum Mehraufwand gegenüber dem 2D-Polygonfüllalgorithmus!
|
|
||||||
\item Mögliches Problem: Korrekte Berücksichtigung von Transparenzen!
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\paragraph{Transparenz}
|
\paragraph{Transparenz}
|
||||||
Alpha-Blending-Verfahren:
|
Alpha-Blending-Verfahren:
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Annahme: Verwendung eines Z-Buffers
|
\item Annahme: Verwendung eines Z-Buffers
|
||||||
\item Mit dem Alpha-Blending-Verfahren kann die transparente Überlagerung zweier Objekte im Bildspeicher wie folgt gelöst werden
|
\item Mit dem Alpha-Blending-Verfahren kann die transparente Überlagerung zweier Objekte im Bildspeicher gelöst werden
|
||||||
\item $C_f$ Farbe des Objekts im Vordergrund (kleinster z-Wert),
|
\item $C_f$ Farbe des Objekts im Vordergrund (kleinster z-Wert)
|
||||||
\item $\alpha$ Opazität der Vordergrundfarbe, Wert zwischen 0 und 1 (bzw. 100%),
|
\item $\alpha$ Opazität der Vordergrundfarbe, Wert $(0,1)$
|
||||||
\item $C_b$ Hintergrundfarbe (die im Bildspeicher für das entsprechende Pixel zuletzt eingetragene Farbe)
|
\item $C_b$ Hintergrundfarbe (letzte Farbe im Bildspeicher)
|
||||||
\item Die resultierende Farbe C ergibt sich zu: $C=\alpha*C_f+(1-\alpha)*C_b$
|
\item resultierende Farbe C: $C=\alpha*C_f+(1-\alpha)*C_b$
|
||||||
\item Für Alpha-Blending wird der Bildspeicher (mit z-Buffer) um den Opazitätswert $\alpha$ erweitert:
|
\item Bildspeicher um Opazitätswert $\alpha$ erweitert
|
||||||
\item Speicherbedarf pro Pixel typischerweise mindestens 48 Bit: R + G + B + Z + $\alpha$.
|
\item Speicherbedarf pro Pixel typ. min. 48 Bit: RGBZ + $\alpha$
|
||||||
\item Bei einer Auflösung des Bildschirms von 1.000.000 Pixel benötigen wir ca. 6MB Speicher.
|
%
|
||||||
\item z-Wert und $\alpha$-Wert des Vordergrund Objektes werden nach dem Alpha-Blending in den Bildspeicher übernommen!
|
\item Reines Z-Buffering ignoriert alle Objektepixel, die weiter entfernt sind als vorn liegende Objektpixel
|
||||||
|
\item Bei Berücksichtigung von $\alpha$-Werten ist die Renderreihenfolge für korrekte Ergebnisse aber sehr wichtig
|
||||||
|
\item Transparenz-Problem: Objekt nachträglich gezeichnet, kann die Farbe nicht korrekt bestimmt werden
|
||||||
|
\item Zuerst: Darstellung aller opaken Objekte nach dem Z-Buffering (reihenfolgeunabhängig)
|
||||||
|
\item Dann Sortieren aller semitransparenten Polygone nach der Tiefe und Zeichnen
|
||||||
|
\item Restfehler: sich zyklisch überlappende oder sich durchdringende semi-transparente Flächen $\rightarrow$ exakte Behandlung durch die vorn beschriebenen Maßnahmen
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
%
|
\end{multicols}
|
||||||
|
\newpage
|
||||||
\begin{itemize*}
|
\begin{multicols}{3}
|
||||||
\item Reines Z-Buffering (ohne $\alpha$) ignoriert alle Objektepixel, die weiter entfernt sind als vorn liegende Objektpixel (siehe rechts, hier ist die Reihenfolge egal).
|
|
||||||
\item Bei Berücksichtigung von $\alpha$-Werten (Transparenzen) ist die Renderreihenfolge für korrekte Ergebnisse aber sehr wichtig! (siehe Mitte bzw. links)
|
|
||||||
\item Erläuterung zum Transparenz-Problem:
|
|
||||||
\item Die Formel für $\alpha$-Blending berücksichtigt nur die Überlagerung des aktuellen Objektes mit dem davor existierenden Bildschirminhalt. Wird ein dazwischenliegendes Objekt nachträglich gezeichnet, dann kann die Farbe nicht korrekt bestimmt werden. Dies passiert aber beim Z-Buffering, da die Zeichenreihenfolge der Polygone beliebig ist.
|
|
||||||
\item **Im Beispiel**
|
|
||||||
\item Die opake grüne Kreisscheibe liegt zwischen dem hinteren Objekt (blau) und dem transparenten vorderen Objekt (rot), wird aber als letztes gerendert. $\rightarrow$ Grün kann Blau nicht mehr verdecken, denn Blau wurde zuvor schon mit Rot verrechnet (ist nun mit 'vorderer' z-Koordinate im Z-Buffer hinterlegt). Dort, wo die grüne Kreisscheibe hinter dem transparenten Rot (bzw. dem nun Rot-Blau) liegt wird ein nicht korrekter Blauanteil gezeigt. Auch der weiße Hintergrund kann hinter dem transparenten Rot (insgesamt ein transparentes Rosa) nicht mehr vom Grün verdeckt werden!
|
|
||||||
\item algorithmische Lösung des Problems:
|
|
||||||
\item Zuerst: Darstellung aller opaken Objekte ($\alpha$ = 1) nach dem Z-Buffering (reihenfolgeunabhängig)
|
|
||||||
\item Dann Sortieren aller semitransparenten Polygone nach der Tiefe und Zeichnen nach dem Painters-Algorithmus unter Berücksichtigung des Z-Buffers mittels Alpha-Blending!
|
|
||||||
\item Restfehler: sich zyklisch überlappende oder sich durchdringende semi-transparente Flächen $\rightarrow$ exakte Behandlung durch die vorn beschriebenen Maßnahmen (Unterteilung der Polygone notwendig!)
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
\section{Globale Beleuchtung}
|
\section{Globale Beleuchtung}
|
||||||
|
\paragraph{Ray-Tracing}
|
||||||
|
Strahlenverfolgung, nicht rekursiv
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item BRDF: physikbasiertes, lokales Reflektionsmodell (Lichtquelle auf Material) $\rightarrow$ Funktion von Einfalls-, Betrachterwinkel, Wellenlänge (bzw. -breiche)
|
\item Strahlen vom Augpunkt (Kamera Ursprung) durch jedes Pixel des Rasters senden
|
||||||
\item Rendergleichung (Kajiya) = BRDF, Integral über alle Lichtquellen (bzw. Hemisphäre)
|
\item Schnittpunktberechnung $\rightarrow$ Schnittpunkt mit dem größtem z-Wert stammt vom sichtbaren Objekt
|
||||||
\item Approximation durch lokales Phong-Beleuchtungsmodell $\rightarrow$ für 'einfache' Materialien und Lichtquellen 'korrekt genug'
|
\item Strahlverfolgung und Aufsummierung der Anteile aufgrund von material- und geometrieabhängigen Parametern $\rightarrow$ Helligkeits-/Farbwert pro Pixel
|
||||||
\item direkte (lokale) Schattierungsverfahren (Flat-, Gouraud- und Phong-Shading)
|
|
||||||
\item Was noch fehlt: Interreflektionen zwischen Objekten...
|
|
||||||
\item globale Beleuchtung, d.h. jede Fläche kann als Lichtquelle dienen
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
\subsection{ Ray-Tracing}
|
|
||||||
einfaches Ray-Tracing: Strahlenverfolgung, nicht rekursiv
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Strahlen vom Augpunkt (Ursprung des Kamerakoordinatensystems) durch jedes Pixel des Rasters senden $\rightarrow$ keine Löcher
|
|
||||||
\item Schnittpunktberechnung mit allen Objekten $\rightarrow$ Schnittpunkt mit dem größtem z-Wert stammt vom sichtbaren Objekt
|
|
||||||
\item Strahlverfolgung (Anwendung des BRDF-Reziprozitätsprinzips) und Aufsummierung der (Lichtquellen-)Anteile aufgrund von material- und geometrieabhängigen Parametern (ggf. neben Relflektion auch Brechung) $\rightarrow$ Ergebnis: Helligkeits-/Farbwert pro Pixel
|
|
||||||
\item Bestimmung der diffusen und spekularen Lichtreflexion nach dem Phong-Beleuchtungsmodell
|
\item Bestimmung der diffusen und spekularen Lichtreflexion nach dem Phong-Beleuchtungsmodell
|
||||||
\item Bis hier nur einfache, lokale Beleuchtung (keine Spiegelung, Schatten, indirekte Beleuchtung)! $\rightarrow$ Vorzüge des RT kommen erst bei rekursivem Raytracing zum Tragen!
|
\item nur einfache, lokale Beleuchtung
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
|
|
||||||
\paragraph{Rekursiver Ansatz}
|
\paragraph{Rekursiver Ansatz}
|
||||||
|
Reflexion, Schatten
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Berechnung von Sekundärstrahlen am Auftreffpunkt (Reflexions- und Schattenfühler)
|
\item Berechnung von Sekundärstrahlen am Auftreffpunkt
|
||||||
\item Annäherung der Interreflektionen (mehrfache Reflexion zwischen den Objekten) durch ideale Spiegelung, d.h. Spiegelung des primären Strahls an $\bar{n}$ im Auftreffpunkt und Erzeugung des sekundären Strahls
|
\item Annäherung der Interreflektionen durch ideale Spiegelung
|
||||||
\item beim Auftreffen des Strahls auf ein weiteres Objekt B Berechnung der diffusen und spekularen Reflexion der jeweiligen Lichtquelle (Schattenfühler, Phong-Modell) sowie Erzeugung eines weiteren Strahls durch ideale Spiegelung
|
\item beim Auftreffen des Strahls auf weiteres Objekt Berechnung der diffusen und spekularen Reflexion der jeweiligen Lichtquelle sowie Erzeugung eines weiteren Strahls durch ideale Spiegelung
|
||||||
\item Addition der Sekundärstrahlen an Objekt B zum Farbwert des Pixel am Objekt A (Anteil bei jeder weiteren Rekursion meistens fallend, da reflektierter Anteil bei jeder Reflexion abgeschwächt wird) $\rightarrow$ Rekursion kann abgebrochen werden, wenn Beitrag vernachlässigbar!
|
\item Addition der Sekundärstrahlen an Objekt B zum Farbwert des Pixel am Objekt A $\rightarrow$ Rekursion kann abgebrochen werden, wenn Beitrag vernachlässigbar!
|
||||||
|
\item Anzahl der Operationen wächst zusätzlich, d.h. Multiplikation des Aufwandes mit der Anzahl der Reflexionen und Refraktionen und Lichtquellen
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
|
|
||||||
\paragraph{Brechungseffekte}
|
\paragraph{Brechungseffekte}
|
||||||
Transparenz unter Berücksichtigung der Brechung beim Ray-Tracing: Richtung des gebrochenen Strahls berechnet sich aus dem Einfallswinkel zum Normalenvektor sowie den material- und wellenlängenabhängen Brechungsindices.
|
Richtung des gebrochenen Strahls berechnet sich aus Einfallswinkel zum Normalenvektor sowie den material- und wellenlängenabhängen Brechungsindices. $\eta_{e\lambda}*sin(\theta_e) = \eta_{t\lambda}*sin(\theta_t)$
|
||||||
$$\eta_{e\lambda}*sin(\theta_e) = \eta_{t\lambda}*sin(\theta_t)$$
|
|
||||||
Beispiel Luft-Glas: $\eta_{\text{Luft, rot}}*\sin(\theta_{\text{Luft}})=\eta_{\text{Glas,rot}}*sin(\theta_{\text{Glas}}) \Rightarrow 1.0*\sin(30^\circ)=1.5*sin(\theta_{\text{Glas}})\rightarrow \theta_{\text{Glas}} \approx \arcsin(\frac{\sin(30^\circ)}{1.5})\approx 20^\circ$
|
|
||||||
|
|
||||||
%
|
%
|
||||||
Die Farbe im betrachteten Punkt wird nicht durch die Farbe von Hintergrundobjekt B1 (wie im Fall nichtbrechender Transparenz) sondern durch die Farbe von B2 beeinflusst!
|
|
||||||
|
|
||||||
Berechnung des Einheitsvektors $\vec{V}_t(\vec{V}_e,n,\theta_t)$ in Richtung der Brechung:
|
Berechnung des Einheitsvektors $\vec{V}_t(\vec{V}_e,n,\theta_t)$ in Richtung Brechung
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item An Grenzflächen mit unterschiedlichen Brechungsindizes tritt neben der Transparenz ($\vec{V}_t$) auch Reflexion (Komponente mit der Richtung $\vec{V}_r$) auf.
|
\item An Grenzflächen mit unterschiedlichen Brechungsindizes tritt neben Transparenz ($\vec{V}_t$) auch Reflexion ($\vec{V}_r$) auf
|
||||||
\item $\vec{M}$ ist ein Einheitsvektor (Länge=1) mit der Richtung von $\vec{n}*\cos(\theta_e)-\vec{V}_e$ und
|
\item $\vec{M}$ ist ein Einheitsvektor mit der Richtung von $\vec{n}*\cos(\theta_e)-\vec{V}_e$
|
||||||
\item es gilt: $\vec{M}*sin(\theta_e)=\vec{n}*\cos(\theta_e)-\vec{V}_e \rightarrow \vec{M}=\frac{\vec{n}*\cos(\theta_e)-\vec{V}_e}{\sin(\theta_e)}$
|
\item es gilt: $\vec{M}*sin(\theta_e)=\vec{n}*\cos(\theta_e)-\vec{V}_e \rightarrow \vec{M}=\frac{\vec{n}*\cos(\theta_e)-\vec{V}_e}{\sin(\theta_e)}$
|
||||||
\item Effekte an transparentem Material:
|
\item Simulation brechungsbedingter Verzerrungen wird so möglich
|
||||||
\item Simulation brechungsbedingter Verzerrungen wird so möglich (z.B. bei optischen Linsen, Wasser).
|
\item Transparentes/reflektierendes Material erzeugt 2 weiter zu verfolgende Sekundärstrahlen
|
||||||
\item Transparentes und reflektierendes Material erzeugt 2 weiter zu verfolgende Sekundärstrahlen.
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\paragraph{Erweiterungen}
|
\paragraph{Erweiterungen}
|
||||||
Unzulänglichkeiten des einfachen rekursiven Ansatzes:
|
Unzulänglichkeiten des einfachen Ansatzes
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Reale Objekte sind eher diffus spekular, d.h. ein ganzes Set von Sekundärstrahlen wäre zu verfolgen.
|
\item Reale Objekte sind eher diffus spekular, d.h. ein ganzes Set von Sekundärstrahlen wäre zu verfolgen.
|
||||||
\item Die ideale Spiegelung zur Erzeugung von Sekundärstrahlen ist eine sehr starke Vereinfachung
|
\item Die ideale Spiegelung zur Erzeugung von Sekundärstrahlen ist eine sehr starke Vereinfachung
|
||||||
\item Aus der Umkehrbarkeit von Licht- und Beleuchtungsrichtung ließe sich eine Menge von Sekundarstrahlen aus dem Phong-Modell $(\cos^n(\theta)$-Term) ermitteln.
|
\item Aus Umkehrbarkeit von Licht- und Beleuchtungsrichtung ließe sich Menge von Sekundarstrahlen ermitteln
|
||||||
\item Aus Aufwandsgründen (rein theoretisch wären unendlich viele Sekundärstrahlen zu berücksichtigen) muss vereinfacht werden, z.B. Monte-Carlo-Ray-Tracing
|
\item muss aus Aufwandsgründen vereinfacht werden
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
**Monte Carlo Ray-Tracing**:
|
\paragraph{Monte Carlo Ray-Tracing}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Reflexion ist selten ideal spekular, meist entsteht ein Bündel von Strahlen
|
\item Reflexion ist selten ideal spekular, meist entsteht ein Bündel von Strahlen
|
||||||
\item Ansatz: Verfolgung mehrerer 'zufälliger' Sekundärstrahlen, deren Beitrag zum Farbwert des Pixel statistisch gewichtet wird.
|
\item Verfolgung mehrerer zufälliger Sekundärstrahlen, deren Beitrag zum Farbwert des Pixel statistisch gewichtet
|
||||||
\item Je gestreuter die Reflexion, um so mehr Sekundärstrahlen sind nötig. Sehr breite Remissionskeulen oder gar diffuse Interreflexionen sind wegen des Aufwandes nicht (bzw. nur schwer) behandelbar.
|
\item Je gestreuter Reflexion, um so mehr Sekundärstrahlen nötig
|
||||||
|
\item Breite Remissionskeulen oder diffuse Interreflexionen sind wegen des Aufwandes nicht behandelbar
|
||||||
|
\item Weiteres Anwachsen der Anzahl an erforderlichen Operationen durch zusätzliche Verfolgung sehr vieler Sekundärstrahlen
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Beleuchtungsphänomen Kaustik:
|
Beleuchtungsphänomen Kaustik:
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Das Licht der Lichtquelle werde zuerst spekular, dann diffus reflektiert. Beispiel: Lichtstrahlen, die von Wasserwellen reflektiert auf eine diffuse Wand auftreffen.
|
\item Das Licht der Lichtquelle werde zuerst spekular, dann diffus reflektiert
|
||||||
\item Vom Auge bzw. Pixel ausgehendes Ray Tracing versagt wegen des vorzeitigen Abbruchs der Rekursion am diffus remittierenden Objekt.
|
\item Vom Auge ausgehendes Ray Tracing versagt wegen des vorzeitigen Abbruchs der Rekursion am diffus remittierenden Objekt.
|
||||||
\item Inverses Ray Tracing [Watt/Watt 1992] : Man erzeugt einen von der Lichtquelle ausgehenden Strahl und reflektiert diesen an glänzenden Oberflächen. Auch Photon Mapping kann hier helfen.
|
\item Inverses Ray Tracing [Watt/Watt 1992]: Man erzeugt einen von der Lichtquelle ausgehenden Strahl und reflektiert diesen an glänzenden Oberflächen
|
||||||
\item Die reflektierten Lichtstrahlen wirken als zusätzliche Lichtquellen, die dann zu diffusen Reflexionen führen können.
|
\item Die reflektierten Lichtstrahlen wirken als zusätzliche Lichtquellen, die dann zu diffusen Reflexionen führen
|
||||||
|
\item Exponentielle Komplexität wenn alle Objekte gleichzeitig transparent und reflektierend sind.
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Optimierungsmöglichkeiten (einfache Hüllgeometrien, Raumzerlegung, ...):
|
Optimierungsmöglichkeiten
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Berechnung von achsenparallelen Hüllquadern (Bounding Boxes) oder Hüllkugeln (Bounding Spheres) um Objekte aus mehreren Polygonen.
|
\item Berechnung von achsenparallelen Bounding Boxes oder Bounding Spheres um Objekte
|
||||||
\item Zunächst Test, ob der Strahl die Hülle schneidet und falls ja
|
\item Zunächst Test, ob der Strahl die Hülle schneidet und falls ja
|
||||||
\item $\rightarrow$ Schnittpunktberechnung von Strahl mit allen Polygonen in der Hülle
|
\item $\rightarrow$ Schnittpunktberechnung von Strahl mit allen Polygonen
|
||||||
\item $\rightarrow$ zunächst Berechnung des Schnittpunktes mit der jeweiligen Polygonebene
|
\item $\rightarrow$ Berechnung des Schnittpunktes mit jew. Polygonebene
|
||||||
\item $\rightarrow$ danach effizienter Punkt-im-Polygon-Test
|
\item $\rightarrow$ danach effizienter Punkt-im-Polygon-Test
|
||||||
\item Effiziente Zugriffsstruktur auf die Hüllquader: Bäume für rekursive Zerlegungen des 3D-Raumes (Octrees), Binary-Space-Partition-Trees
|
\item Effiziente Zugriffsstruktur auf die Hüllquader: Bäume für rekursive Zerlegungen
|
||||||
\item Verwendung von direktem, hardware-unterstützten Rendering (z.B. Gouraud- oder Phong-Shading) anstelle von einfachem, nichtrekursivem Ray-Tracing, nur bei Bedarf Erzeugung von Sekundärstrahlen.
|
\item Verwendung von direktem, hardware-unterstützten Rendering
|
||||||
\item Verwendung von Hardware mit RTX-Unterstützung
|
\item Verwendung von Hardware mit RTX-Unterstützung
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\paragraph{Zusammenfassung}
|
\paragraph{Zusammenfassung}
|
||||||
Anwendung:
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Erzeugung realistischerer Bilder als bei lokalem Shading, da indirekte (spekuläre) Beleuchtungsphänomene physikalisch (geometr. und radiometr.) viel genauer als bei direkter Schattierung berechnet werden können.
|
\item Erzeugung realistischerer Bilder, da indirekte Beleuchtungsphänomene physikalisch viel genauer
|
||||||
\item Ray-Tracing ist aufgrund der hohen Komplexität für interaktive Anwendungen (oft noch) wenig geeignet (hardware- und szenenabhängig), mögliche Lösung: Vorberechnung der Bildsequenzen im Stapel-Betrieb (batch mode)
|
\item Ray-Tracing ist aufgrund der hohen Komplexität für interaktive Anwendungen oft wenig geeignet
|
||||||
\item Fotorealistisches Visualisieren (Designstudien usw.)
|
\item Interaktive Programme (CAD, Spiele) verwenden noch eher direktes Rendering mit Texturen
|
||||||
\item Computeranimation in Filmen
|
\item effiziente räumliche Suchstrukturen können die Anzahl auszuführender Schnittoperationen reduzieren
|
||||||
\item Interaktive Programme (CAD, Spiele) verwenden noch eher direktes Rendering mit Texturen (shadow map, environment map) um Schatten, Spiegeleffekte oder Brechung zu simulieren.
|
\item Implementierung ist konzeptionell einfach + einfach parallelisierbar
|
||||||
\item Aufwendige Teiloperation: Geometrischer Schnitt im Raum:
|
\item RT ist sehr gut geeignet, wenn die spiegelnde Reflexion zwischen Objekten frei von Streuung ist
|
||||||
\item für jedes Pixel: Berechnung des Schnittes eines Strahles mit potentiell allen Objekten der Szene (einfaches Ray-Tracing, ohne Rekursion)
|
\item Cone-Tracing - statt eines Strahles wird ein Kegel verwendet, der die Lichtverteilung annähert
|
||||||
\item z.B. Bildschirm mit 1.000 x 1.000 Pixeln und 1.000 Objekten
|
|
||||||
\item **Rekursives Ray-Tracing** für den ideal spiegelnden Fall: Anzahl der Operationen wächst zusätzlich, d.h. Multiplikation des Aufwandes mit der Anzahl der Reflexionen und Refraktionen und Lichtquellen (Schattenfühler) $\rightarrow$ für ca. 4 Rekursionsstufen bei 2 Lichtquellen haben wir etwa $4*(2 + 1) = 12$ Millionen Strahlen, was schon bei 1.000 Objekten 12 Milliarden Schnittoperationen bedeutet.
|
|
||||||
\item **Monte-Carlo-Ray-Tracing** für die Approximation diffuser Anteile: Weiteres Anwachsen der Anzahl an erforderlichen Operationen durch zusätzliche Verfolgung sehr vieler Sekundärstrahlen (durchschnittlich 10 pro Reflexion) $\rightarrow$ Mehrere 100 Millionen bis Milliarden Strahlen (bzw. Billionen Schnittoperationen)
|
|
||||||
\item Durch **effiziente räumliche Suchstrukturen** kann die Anzahl der tatsächlich auszuführenden Schnittoperationen wesentlich reduziert werden. Die Anzahl der Schnitte steigt nicht mehr linear (sondern etwa logarithmisch) mit der Anzahl der Objekte (siehe räumliche Datenstrukturen). Damit ist auch bei großen Szenen nur noch die Anzahl der Strahlen wesentlich $\rightarrow$ je nach Bildauflösung und Verfahren, mehrere Millionen bis Milliarden Strahlen!
|
|
||||||
\item Eigenschaften des Ray-Tracing-Verfahrens:
|
|
||||||
\item Implementierung ist konzeptionell einfach + einfach parallelisierbar.
|
|
||||||
\item Hohe Komplexität durch Vielzahl der Strahlen, deshalb meistens Beschränkung auf wenige Rekursionen.
|
|
||||||
\item Exponentielle Komplexität bei Monte-Carlo-Ray-Tracing bzw. wenn alle Objekte gleichzeitig transparent (Brechung) und reflektierend sind.
|
|
||||||
\item Resultat:
|
|
||||||
\item RT ist sehr gut geeignet, wenn die spiegelnde Reflexion zwischen Objekten (und/oder die Brechung bei transparenten Objekten) frei von Streuung ist.
|
|
||||||
\item Die diffuse Reflexion zwischen Objekten wird beim Ray-Tracing durch ambiente Terme berücksichtigt. Eine bessere Beschreibung dieser Zusammenhänge ist mit Modellen der Thermodynamik möglich.
|
|
||||||
\item Weitere Ansätze:
|
|
||||||
\item Cone-Tracing - statt eines Strahles wird ein Kegel verwendet, der die Lichtverteilung annähert [Watt/Watt 1992].
|
|
||||||
\item Radiosity (siehe Abschnitt weiter unten)
|
|
||||||
\item Photon Mapping (nächster Abschnitt)
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
\subsection{ Photon Mapping}
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Verfahren von Henrik Wann Jensen 1995 veröffentlicht
|
|
||||||
\item angelehnt an Teichencharakter des Lichts
|
|
||||||
\item 2-stufiges Verfahren
|
|
||||||
\item Quelle: Vorlesung von Zack Waters, Worcester Polytechnic Inst.
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
|
\paragraph{Photon Mapping} [Henrik Jensen 1995]
|
||||||
%
|
%
|
||||||
|
|
||||||
\begin{enumerate*}
|
1. Phase: Erzeugung der Photon Map
|
||||||
\item Phase: Erzeugung der Photon Map
|
|
||||||
\item Photonenverteilung in der Szene: Von der Lichtquelle ausgestrahlte Photonen werden zufällig in der Szene gestreut. Wenn ein Photon eine Oberfläche trifft, kann ein Teil der Energie absorbiert, reflektiert oder gebrochen werden.
|
|
||||||
\item Speichern der Photonen in der Photon Map Daten enthalten also u.a. Position und Richtung beim Auftreffen sowie Energie für die Farbkanäle R,G,B
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Photon wird in 3D-Suchstruktur (kd-Baum) gespeichert (Irradiance cache)
|
|
||||||
\item Reflektionskoeffizienten als Maß für Reflektionswahrscheinlichkeit (analog Transmissionswahrscheinlichkeit)
|
|
||||||
\item dafür: Energie bleibt nach Reflexion unverändert. Neue Richtung wird statistisch auf Basis der BRDF gewählt.
|
|
||||||
\end{itemize*}
|
|
||||||
\item Phase: Aufsammeln der Photonen aus Betrachtersicht (gathering)
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Verwende Ray-Tracing um für den Primärstrahl von der Kamera durch einen Pixel den Schnittpunkt x mit der Szene zu bestimmen. Basierend auf den Informationen aus der Photon Map werden für x folgende Schritte ausgeführt:
|
|
||||||
\begin{enumerate*}
|
|
||||||
\item Sammle die nächsten N Photonen um x herum auf durch Nächste-Nachbar-Suche in der Photon Map (N = konst., z. B. 10)
|
|
||||||
\item S sei die (kleinste) Kugel, welche die N Photonen enthält.
|
|
||||||
\item Für alle Photonen: dividiere die Summe der Energie der gesammelten Photonen durch die Fläche von S ($\rightarrow$ Irradiance) und multipliziere mit der BRDF angewendet auf das Photon.
|
|
||||||
\item Dies ergibt die reflektierte Strahldichte, welche von der Oberfläche (an der Stelle x) in Richtung des Beobachters abgestrahlt wird.
|
|
||||||
\end{enumerate*}
|
|
||||||
\end{itemize*}
|
|
||||||
\end{enumerate*}
|
|
||||||
|
|
||||||
\subsection{ Radiosity}
|
|
||||||
Grundprinzip des Radiosity-Verfahrens:
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Ansatz: Erhaltung der Lichtenergie in einer geschlossenen Umgebung
|
\item Von Lichtquelle ausgestrahlte Photonen werden zufällig in Szene gestreut. Photon Energie kann absorbiert, reflektiert oder gebrochen werden.
|
||||||
\item Die Energierate, die eine Oberfläche verlässt, wird Radiosity (spezifische Ausstrahlung) genannt.
|
\item Speichern der Photonen in der Photon Map, also Position, Richtung beim Auftreffen und Energie für Farbkanäle RGB
|
||||||
\item Die gesamte Energie, die von einer Oberfläche (Patch, Polygon) emittiert oder reflektiert wird, ergibt sich aus Reflexionen oder Absorptionen anderer Oberflächen (Patches, Polygone).
|
\item Photon wird in Suchstruktur gespeichert (Irradiance cache)
|
||||||
\item Es erfolgt keine getrennte Behandlung von Lichtquellen und beleuchteten Flächen, d.h. alle Lichtquellen werden als emittierende Flächen modelliert.
|
\item Reflektionskoeffizienten als Maß für Reflektionswahrscheinlichkeit (analog Transmissionswahrsch.)
|
||||||
\item Da nur diffuse Strahler (Lambertstrahler) betrachtet werden, herrscht Unabhängigkeit der Strahldichte vom Blickwinkel vor.
|
\item Energie bleibt nach Reflexion unverändert. Neue Richtung wird statistisch auf Basis der BRDF gewählt
|
||||||
\item Die Lichtinteraktionen werden im 3D-Objektraum (ohne Berücksichtigung der Kamera) berechnet.
|
|
||||||
\item Danach lassen sich beliebig viele Ansichten schnell ermitteln (Ansichtstransformation, perspektivische Projektion, Verdeckungsproblematik, Interpolation).
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Die gesamte von Patch $A_s$ stammende Strahldichte an der Stelle von $dA_r$ ist: $L_r=\beta_r(\lambda)*\int_{A_s}\frac{L_s}{\pi * r^2}*\cos(\theta_s)*\cos(\theta_r)*dA_s$ (s=Sender, r=Reveiver)
|
2. Phase: Aufsammeln der Photonen (gathering)
|
||||||
|
\begin{itemize*}
|
||||||
|
\item Ray-Tracing um für Primärstrahl von der Kamera durch einen Pixel den Schnittpunkt x mit der Szene zu bestimmen
|
||||||
|
\item Sammle die nächsten N Photonen um x herum auf durch Nächste-Nachbar-Suche in der Photon Map (N = konst.)
|
||||||
|
\item S sei die (kleinste) Kugel, welche die N Photonen enthält
|
||||||
|
\item Für alle Photonen: dividiere die Summe der Energie der gesammelten Photonen durch die Fläche von S ($\rightarrow$ Irradiance) und multipliziere mit der BRDF angewendet auf das Photon.
|
||||||
|
\item Dies ergibt die reflektierte Strahldichte, welche von der Oberfläche (an der Stelle x) in Richtung des Beobachters abgestrahlt wird.
|
||||||
|
\end{itemize*}
|
||||||
|
|
||||||
|
\subsection{ Radiosity}
|
||||||
|
\begin{itemize*}
|
||||||
|
\item Ans: Erhaltung der Lichtenergie in geschlossener Umgebung
|
||||||
|
\item Radiosity: Energierate, die eine Oberfläche verlässt %(spezifische Ausstrahlung)
|
||||||
|
\item gesamte Energie, die von Oberfläche emittiert oder reflektiert wird, ergibt sich aus Reflexionen oder Absorptionen anderer Oberflächen
|
||||||
|
\item Es erfolgt keine getrennte Behandlung von Lichtquellen und beleuchteten Flächen
|
||||||
|
\item nur diffuse Strahler $rightarrow$ Unabhängigkeit der Strahldichte vom Blickwinkel
|
||||||
|
\item Lichtinteraktionen im 3D-Objektraum berechnet
|
||||||
|
\item Danach viele Ansichten schnell ermittelt %(Ansichtstransformation, perspektivische Projektion, Verdeckungsproblematik, Interpolation).
|
||||||
|
\end{itemize*}
|
||||||
|
|
||||||
|
Strahldichte an $dA_r$ (s=Sender, r=Reveiver): $L_r=\beta_r(\lambda)*\int_{A_s}\frac{L_s}{\pi * r^2}*\cos(\theta_s)*\cos(\theta_r)*dA_s$
|
||||||
%
|
%
|
||||||
|
|
||||||
Für das Polygon $A_r$ ist die mittlere Strahldichte zu ermitteln!
|
mittlere Strahldichte: $L_r=\beta_r(\lambda)*\frac{1}{A_r}*\int_{A_r}\int_{A_s}\frac{L_s}{\pi*r^2}*\cos(\theta_s)*\cos(\theta_r)*dA_s*dA_r$
|
||||||
$$L_r=\beta_r(\lambda)*\frac{1}{A_r}*\int_{A_r}\int_{A_s}\frac{L_s}{\pi*r^2}*\cos(\theta_s)*\cos(\theta_r)*dA_s*dA_r$$
|
|
||||||
Die Geometrieanteile aus dieser Gleichung werden als Formfaktoren bezeichnet (+Sichtbarkeitsfaktor $H_{sr}$).
|
Sichtbarkeitsfaktor $H_{sr}$
|
||||||
$$F_{sr}=\frac{1}{A_R}\int_{A_r}\int_{A_s}\frac{\cos(\theta_s)*\cos(\theta_r)}{\pi*r^2}*H_{sr}*dA_s*dA_r, H_{sr}=\begin{cases}1\rightarrow A_s \text{ sichtbar}\\ 0\rightarrow A_s \text{ unsichtbar}\end{cases}$$
|
$$F_{sr}=\frac{1}{A_R}\int_{A_r}\int_{A_s}\frac{\cos(\theta_s)*\cos(\theta_r)}{\pi*r^2}*H_{sr}*dA_s*dA_r, H_{sr}=\begin{cases}1\rightarrow A_s \text{ sichtbar}\\ 0\rightarrow A_s \text{ unsichtbar}\end{cases}$$
|
||||||
Für Flächen, die klein im Verhältnis zu ihrem Abstand sind, ergibt sich eine Vereinfachung des Formfaktors. In diesem Fall können die Winkel $\theta_s,\theta_r$ und Radius r über den zu integrierenden Flächen als konstant (Mittelwerte) angenommen werden.
|
|
||||||
|
Für im Verhältnis zum Abstand kleinen Flächen können $\theta_s,\theta_r$ und Radius r konstant angenommen werden.
|
||||||
$$F_{sr}=A_S \frac{\cos(\theta_s)*cos(\theta_r)}{\pi*r^2}*H_{sr}$$
|
$$F_{sr}=A_S \frac{\cos(\theta_s)*cos(\theta_r)}{\pi*r^2}*H_{sr}$$
|
||||||
|
|
||||||
Bei dicht benachbarten Flächen gelten die obigen, vereinfachenden Annahmen u.U. nicht mehr. Es müsste exakt gerechnet oder in diesen Bereichen feiner untergliedert werden.
|
Jedes Patch wird nun als opaker Lambertscher Emitter und Reflektor betrachtet.
|
||||||
Wird statt $\beta \lambda \beta$ vereinfachend ein konstanter Remissionsfaktor R (R diff im monochromatischen Fall oder $R_{diff R}, R_{diffG}, R_{diffB}$ für die drei typischen Farbkanäle) eingeführt, so ergibt sich zwischen der Strahldichte $L_r$ der bestrahlten Fläche und der Strahldichte $L_s$ der bestrahlenden Fläche der folgende Zusammenhang: $L_r=R_r*F_sr*L_s$
|
|
||||||
|
|
||||||
Jedes Patch wird nun als opaker Lambertscher (d.h. ideal diffuser) Emitter und Reflektor betrachtet (d.h. alle Lichtquellen werden genauso wie einfache remittierende Flächen behandelt, allerdings mit emittierendem Strahldichte-Term $L_{emr}$). $L_r=L_{emr}+R_r*\sum_S F_{sr}*L_s$
|
emittierende Strahldichte: $L_r=L_{emr}+R_r*\sum_S F_{sr}*L_s$
|
||||||
|
|
||||||
Es ergibt sich schließlich als Gleichungssystem:
|
Es ergibt sich schließlich als Gleichungssystem:
|
||||||
$$ \begin{pmatrix} 1-R_1F_{11} & -R_1F_{12} &...& -R_1F_{1n}\\ 1-R_2F_{21} & -R_2F_{22} &...& -R_2F_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ 1-R_nF_{n1} & -R_nF_{n2} &...& -R_nF_{nn} \end{pmatrix} * \begin{pmatrix} L_1\\L_2\\\vdots\\L_n \end{pmatrix} = \begin{pmatrix} L_{em1}\\L_{em2}\\\vdots\\L_{emn} \end{pmatrix}$$
|
$$ \begin{pmatrix} 1-R_1F_{11} & -R_1F_{12} &...& -R_1F_{1n}\\ 1-R_2F_{21} & -R_2F_{22} &...& -R_2F_{2n}\\ \vdots & \vdots & \ddots & \vdots \\ 1-R_nF_{n1} & -R_nF_{n2} &...& -R_nF_{nn} \end{pmatrix} * \begin{pmatrix} L_1\\L_2\\\vdots\\L_n \end{pmatrix} = \begin{pmatrix} L_{em1}\\L_{em2}\\\vdots\\L_{emn} \end{pmatrix}$$
|
||||||
Das Gleichungssystem ist für jedes Wellenlängenband, das im Beleuchtungsmodell betrachtet wird, zu lösen ($R_r, R_{rR}, R_{rG}, R_{rB}, L_{emr}$ sind im Allgemeinen wellenlängenabhängig).
|
($R_r, R_{rR}, R_{rG}, R_{rB}, L_{emr}$ sind allg. wellenlängenabhängig)
|
||||||
|
|
||||||
\paragraph{Adaptives Refinement}
|
\paragraph{Adaptives Refinement}
|
||||||
Adaptives Radiosity-Verfahren:
|
Adaptives Radiosity-Verfahren:
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item vereinfachte Formfaktor-Berechnung ist ungenau bei eng beieinander liegenden Flächenstücken (z. B. in der Nähe von Raumecken), oder bei kontrastreichen Übergängen)
|
\item vereinfachte Formfaktor-Berechnung ist ungenau bei eng beieinander liegenden Flächenstücken
|
||||||
\item deshalb adaptive Unterteilung solcher Flächen in feinere Polygone
|
\item adaptive Unterteilung solcher Flächen in feinere Polygone
|
||||||
|
\item Notwendigkeit durch erste Berechnung geschätzt
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Im adaptiven Radiosity-Verfahren werden deshalb große Flächen (insbesondere dort wo Flächen relativ hell sind im Vergleich zur Nachbarfläche $\rightarrow$ kontrastreiche Übergänge) unterteilt. Die Notwendigkeit wird durch erste Berechnung mit grober Unterteilung geschätzt.
|
|
||||||
|
|
||||||
\paragraph{Progressive Refinement}
|
\paragraph{Progressive Refinement}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item das Radiosity-Verfahren ist sehr aufwendig (Bestimmung aller Formfaktoren, Anwendung des Gauß-Seidel-Verfahrens zum Lösen des Gleichungssystems)
|
\item das Radiosity-Verfahren ist sehr aufwendig
|
||||||
\item jedoch viel weniger Samples als Monte-Carlo-Raytracing (1 mal pro Kachel-Paar mal Anzahl Interationen)!
|
\item viel weniger Samples als Monte-Carlo-Raytracin
|
||||||
\item beim progressive Refinement ist die inkrementelle Approximation des Ergebnisses des exakten Algorithmus durch ein vereinfachtes Verfahren wünschenswert
|
\item inkrementelle Approximation des Ergebnisses des exakten Algorithmus
|
||||||
\item ein entsprechender Algorithmus, der die Patches einzeln behandelt, stammt von Cohen, Chen, Wallace und Greenberg
|
|
||||||
\item akkumuliert mehr Energie in jedem Schritt, verletzt Gleichgewicht der Strahlung $\rightarrow$ Korrektur notwendig:
|
\item akkumuliert mehr Energie in jedem Schritt, verletzt Gleichgewicht der Strahlung $\rightarrow$ Korrektur notwendig:
|
||||||
$L_r^{k+1}=L_{emr} + R_r*\sum_s F_{sr}* L_s^k$
|
$L_r^{k+1}=L_{emr} + R_r*\sum_s F_{sr}* L_s^k$
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
|
|
||||||
\paragraph{Radiosity Eigenschaften}
|
\paragraph{Radiosity Eigenschaften}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item ausschließlich Berücksichtigung der diffusen Reflexion
|
\item ausschließlich Berücksichtigung der diffusen Reflexion
|
||||||
\item blickwinkelunabhängig, direkt im 3D-Raum arbeitend
|
\item blickwinkelunabhängig, direkt im 3D-Raum arbeitend
|
||||||
\item realistische Schattenbilder, insbesondere Halbschatten (viele, bzw. flächig ausgedehnte Lichtquellen)
|
\item realistische Schattenbilder, insbesondere Halbschatten
|
||||||
\item sehr rechenintensiv, deshalb meist Vorausberechnung einer Szene in 3D
|
\item sehr rechenintensiv, deshalb meist Vorausberechnung
|
||||||
\item $\rightarrow$ Beleuchtungsphänomene wie z.B. indirektes Licht (besonders augenfällig in Innenräumen, Museen, Kirchen, Theaterbühnen usw.) sind mit Radiosity sehr gut/realistisch darstellbar.
|
\item $\rightarrow$ Beleuchtungsphänomene wie z.B. indirektes Licht sehr gut/realistisch darstellbar
|
||||||
\item $\rightarrow$ die Kombination von Radiosity und Ray Tracing (und ggfs. anderen Verfahren/Filtern etc) ermöglicht computergenerierte Szenen mit sehr hohem Grad an Realismus.
|
\item $\rightarrow$ Kombination von Radiosity und Ray Tracing ermöglicht Szenen mit sehr hohem Grad an Realismus
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\subsection{ Zusammenfassung}
|
\end{multicols}
|
||||||
\begin{itemize*}
|
\newpage
|
||||||
\item BRDF für physikbasierte, lokale Berechnung der Reflexion von Lichtquellen als Funktion von Einfallswinkel und Betrachterwinkel (evtl. wellenlängenabhängig, oder einfach durch RGB)
|
\begin{multicols}{3}
|
||||||
\item Rendergleichung (Kajiya) = BRDF, Integral über alle Lichtquellen (bzw. Hemisphäre)
|
|
||||||
\item für indirekte Beleuchtung / Global Illumination: (verschiedene algorithmische Verfahren unter Verwendung der lokalen Beleuchtung (BRDF)
|
|
||||||
\item (rekursives) Raytracing (einfache Spiegelung, Brechung, Schatten)
|
|
||||||
\item Monte Carlo RT, (gestreute Spiegelung, diffuse Reflexion), Backward Ray Tracing (Kaustik), Photon Mapping $\rightarrow$ jedoch extrem rechenaufwendig!)
|
|
||||||
\item Radiosity (indirekte diffuse Reflexion - sichtunabhängige Voraus-berechnung in 3D für statische Szenen)
|
|
||||||
\item verschiedene Verfahren können kombiniert werden um die globale Beleuchtungsphänomene effizienter zu berechnen. - z. B. Radiosity + Ray Tracing: Indirekte diffuse Beleuchtung + Spiegelung und Schatten, etc.
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
\section{Texture Mapping}
|
\section{Texture Mapping}
|
||||||
\subsection{ Bildbasiertes Rendering}
|
\subsection{Bildbasiertes Rendering}
|
||||||
\paragraph{Überblick}
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item typische Anwendung: Applizieren von 2D-Rasterbildern auf 3D-Modellen
|
\item typisch: Applizieren von 2D-Rasterbildern auf 3D-Modellen
|
||||||
\item Beispiele: Hausfassade, Holz-, Marmor-, Steintexturen, Tapeten, Stoffe etc.
|
\item 3D-Objekte mit relativ einfachen Polygonen modelliert
|
||||||
\item 3D-Objekte mit relativ einfachen Polygonen modelliert. - Details als Texturen, (d.h. als Raster-Bilder) - gelegentlich 'Impostor' genannt.
|
\item Details als Texturen - 'Impostor' genannt.
|
||||||
\item Texture-Mapping als Erweiterung des einfachen Pattern-Filling (siehe. Polygonfüllalgorithmus)
|
\item Texture-Mapping als Erweiterung des einfachen Pattern-Filling
|
||||||
\item als Verallgemeinerung auch Image-based Rendering genannt
|
\item als Verallgemeinerung auch Image-based Rendering genannt
|
||||||
\item Verwendung unterschiedlicher 3D-Transformationen und Beleuchtungsarten
|
\item Verwendung unterschiedlicher 3D-Transformationen und Beleuchtungsarten
|
||||||
\item Spezielle Effekte! (Reflexionen, Schatten, ..)
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Erzeugung von Texturen:
|
Erzeugung von Texturen:
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item 'reale' Texturen aus realen rasterisierten/digitalen Fotografien (aus Pixeln = 'Picture-Elementen' werden Texel = 'Texturelemente') vs.
|
\item 'reale' Texturen aus realen rasterisierten/digitalen Fotografien (Pixel werden Texel)
|
||||||
\item 'berechnete' Texturen $\rightarrow$ synthetische Computergrafik-Bilder:
|
\item 'berechnete' Texturen $\rightarrow$ synthetische Computergrafik-Bilder
|
||||||
\item vorberechnete reguläre Texturen (basieren auf Texeln) vs.
|
\item vorberechnete reguläre Texturen (basieren auf Texeln)
|
||||||
\item nach Bedarf erzeugte statistische bzw. prozedurale Texturen (Absamplen von mathematischen Beschreibungen, ggf. beliebig genau)
|
\item nach Bedarf erzeugte statistische bzw. prozedurale Texturen
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Anwendung von Texturen - Grundprinzipien:
|
Anwendung von Texturen - Grundprinzipien:
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Transformation des Texturraums in den Bildraum der Darstellung: Verwendung unterschiedlicher geometrischer Transformationen (je nach Anwendungszweck)
|
\item Texturraum in den Bildraum der Darstellung
|
||||||
\item Resampling: transformiertes Texturraster wird aufs Bildraster 'gerundet'
|
\item Verwendung untersch. geometrischer Transformationen
|
||||||
|
\item Resampling: transformiertes Texturraster wird auf Bildraster gerundet
|
||||||
\item Filtern: Verhindern/Abmildern von resampling-basierten Aliasing-Effekten
|
\item Filtern: Verhindern/Abmildern von resampling-basierten Aliasing-Effekten
|
||||||
\item Beleuchtung: RGB-Werte der Textur dienen als Materialattribute bei der Beleuchtungsrechnung
|
\item Beleuchtung: RGB-Werte der Textur dienen als Materialattribute bei der Beleuchtungsrechnung
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Unterschiedliche Arten des Texturmappings (Transformationsfunktion):
|
Unterschiedliche Arten des Texturmappings
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Parametrisches Mapping: Ein Rasterbild wird auf ein 3D-Polygon aufgebracht, indem man den Eckpunkten (x,y,z) des Polygons 2D-Texturkoordinaten (u,v) explizit zuordnet.
|
\item Parametrisches Mapping: Rasterbild wird auf 3D-Polygon gebracht, indem man den Eckpunkten des Polygons 2D-Texturkoordinaten explizit zuordnet
|
||||||
\item affines Texturmapping: direkte affine Abbildung der Textur auf projizierte Polygone im Bildraum
|
\item affines Texturmapping: direkte affine Abbildung der Textur auf projizierte Polygone im Bildraum
|
||||||
\item perspektivisches Texturmapping: Zwischenabbildung der Textur in den 3D-Objektraum und perspektivische Projektion in den Bildraum
|
\item perspektivisches Texturmapping: Zwischenabbildung der Textur in den 3D-Objektraum und perspektivische Projektion in den Bildraum
|
||||||
\item Projektives Texturmapping: Verwendung unterschiedlicher Projektionsarten (parallel, perspektivisch, eben, zylindrisch, sphärisch)
|
\item Projektives Texturmapping: Verwendung unterschiedlicher Projektionsarten (parallel, perspektivisch, eben, zylindrisch, sphärisch)
|
||||||
@ -1805,7 +1688,9 @@
|
|||||||
\item Texturinhalt als Material, Beleuchtung, Geometrie interpretiert
|
\item Texturinhalt als Material, Beleuchtung, Geometrie interpretiert
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\newpage
|
\end{multicols}
|
||||||
|
\newpage
|
||||||
|
\begin{multicols}{3}
|
||||||
\section{Grafik Pipeline}
|
\section{Grafik Pipeline}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item algorithmisches Konzept, sowie Realisierung der Grafikkartenhardware ist vergleichbar mit Fließband
|
\item algorithmisches Konzept, sowie Realisierung der Grafikkartenhardware ist vergleichbar mit Fließband
|
||||||
@ -1919,7 +1804,9 @@
|
|||||||
%\subsection{Hardware-Architektur
|
%\subsection{Hardware-Architektur
|
||||||
%
|
%
|
||||||
|
|
||||||
\newpage
|
\end{multicols}
|
||||||
|
\newpage
|
||||||
|
\begin{multicols}{3}
|
||||||
\section{Bildverarbeitung}
|
\section{Bildverarbeitung}
|
||||||
\subsection{Operationen auf dem Bildraster}
|
\subsection{Operationen auf dem Bildraster}
|
||||||
Problem der Vorwärtstransformation:
|
Problem der Vorwärtstransformation:
|
||||||
|
Loading…
Reference in New Issue
Block a user