Commit 4610f5eb by Kai Westerkamp

Fixes

parent 96685438
Pipeline #144 passed with stage
......@@ -59,14 +59,13 @@ In dieser Ausarbeitung wird ein Algorithmus vorgestellt der die Gleichung mit ei
\begin{center}
\label{img:Phong}
\includegraphics[width=.6\textwidth]{Bilder/Phong.png}
\caption{Richtungen im Phong Beleuchtungsmodel. N ist die Oberflächennormale, V der Viewvektor, L der Lichtvektor und R die Reflektion von L an N (Vorlesung Fotorealistische Bildsynthese 02\_ BRDF)}
\caption{Richtungen im Phong Beleuchtungsmodel. N ist die Oberflächennormale, V der Viewvektor, L der Lichtvektor und R die Reflektion von L an N (Vorlesung Fotorealistische Bildsynthese 02\_BRDF)}
\end{center}
\end{figure}
Eine einfache BRDF ist durch das Phong Beleuchtungsmodell gegeben.
Die Beleuchtung wird in eine diffuse und spekulare Komponente getrennt.
Der diffuse Anteil wird berechnet durch $k_d*I_L*(N\cdot L)$ und der spekulrare Anteil durch $k_s*I_L* (R\cdot V)^n$ (siehe \ref{img:Phong}).
Der diffuse Anteil wird berechnet durch $k_d*I_L*(N\cdot L)$ und der spekulrare Anteil durch $k_s*I_L* (R\cdot V)^n$ (siehe Abbildung \ref{img:Phong}).
Hierbei ist $I_L$ die einfallende Lichtintensität, $k_d$ und $k_s$ materialabhängige Konstanten und $n$ der Phong Exponent, der die Größe der spekularen Glanzlichter beeinflusst.
\todo{siehe Bild Nummer 3.1, da nur dort die Größen eingeführt werden}
\section{Spherical Gaussians}
......@@ -128,8 +127,7 @@ Beim Receiver wird hier die SG der Lichtquelle eingesetzt.
\subsection{Reflektiertes Licht}
Im Folgenden approximieren wir die Gleichung \ref{reflectorEQ}, um eine besser berechenbare Funktion zu erhalten.
Der Kosinus-Term $max(0,i\cdot n_r)$ durch die mittlere Richtung des Dreiecks T annähern.
\todo{verstehe ich nicht - liegt vielleicht am fehlenden Verb}
Der Kosinus-Term $max(0,i\cdot n_r)$ ist für ein Dreieck T eine glatte Funktion die durch die mittlere Richtung $i_T$ des Dreiecks angenähert werden kann.
Damit erhält man die Konstante $max(0,i_T(r)\cdot n_r)$, die man aus dem Integral ziehen kann.
Die BRDF $f_r(i,y,r)$ ist wie in Kapitel \ref{ch:Content2:sec:Section1} beschreiben als Summe von SGs darstellbar $f_r(i,y,r) \approx G_T(i)$.
Das Integral über 2 SGs kann durch ein SG angenähert werden (siehe Anhang von \cite{Wang09asia}).
......@@ -161,7 +159,6 @@ L(x,o) \approx H(r'_h) \int_{\Omega^T} G(r;r_h,\lambda_h,c_h)dr
\caption{ Intergation eines sphärischen Dreiecks $\omega_T$ \cite{Wang09asia}}
\end{center}
\end{figure}
\todo{hier etwas herleitung vlt?}
Um die Gleichung \ref{recieverEQFinal}auszuwerten, muss $\int_{\Omega^T} G(v;p,\lambda)dv$ berechnet werden.
Mit der Mittelachse P des SG ergibt sich aus dem Bild \ref{img:triangle}, dass $$\Omega_t = \Omega_{\triangle ABC} = \Omega_{\triangle PBC}-\Omega_{\triangle PAB}-\Omega_{\triangle PCA}$$ ist.
Durch Integration über die Winkel und einigen Umformungen ergibt sich ein Integral über eine eindimensionale reelle Funktion \ref{1DFunction}, die durch eine stückweise definierte lineare Funktion angenähert werden kann.
......@@ -235,11 +232,10 @@ Damit erhalten wir ein Integral über zwei SGs, das, wie oben beschrieben, einen
\label{ch:Content4:sec:Section2}
Bei der Abschätzung der Funktion $V_{\Omega_N}(r)$ kann zu großen Fehlern kommen.
Ist der Fehler eines Knotens zu groß, so wird er in die beiden Kinderknoten aufgesplittet.
Um die Obergrenze des Fehlers in Geichung \ref{recieverNode} abzuschätzen, berechnen wir die größten und kleinsten Werte der SG $g_{min}$ \& $g_{max}$,
Um die Obergrenze des Fehlers in Geichung \ref{recieverNode} abzuschätzen, berechnen wir die größten und kleinsten Werte der SG $g_{min}$ und $g_{max}$,
der Winkel $\Omega_N$, $||\Omega_N ||_{min}$, $||\Omega_N ||_{max}$ und der Texturwerte $t_{min}$, $t_{max}$.
\todo{willst du wirklich das Kaufmannsund? Ich würde hier das Wort ``und'' schreiben. }
Der Fehler lässt sich dann mit $H(r'_h)*(t_{max}*g_{max}*||\Omega_N ||_{max} -t_{min}*g_{min}*||\Omega_N ||_{min})$ berechnen.
Die Texturwerte werden in dem jeweiligen Knoten gespeichert und die restlichen Werte können aus der Bounding Box und der Normaleinverteilung des Knotens errechnet werden. \todo{Normal''ein''verteilung ?}
Die Texturwerte werden in dem jeweiligen Knoten gespeichert und die restlichen Werte können aus der Bounding Box und dem Normalenkegel des Knotens errechnet werden. \todo{Normal''ein''verteilung ?}
\todo{sind hier die Fehlerwerte gemeint, die auch im Knoten gespeichert werden?}
\begin{figure}
......@@ -264,7 +260,7 @@ Hier wird die Shadowmap der Lichtquelle für 16 gleichmäßig verteilte Samples
Aus den Werten wird der Durchschnitt berechnet und zu dem Dreieck gespeichert.
Die Sichtbarkeit zwischen Reflektor und Retriever ist schwieriger zu bestimmen.
Zunächst werden während der Initialisierung 200 virtuelle Lichter in der Szene verteilt um zur Laufzeit Imperfect Shadow Maps \cite{ISM} zu berechnen. \todo{warum 200? Es können auch andere Werte sinnvoll sein}
Zunächst werden während der Initialisierung 200 virtuelle Lichter in der Szene verteilt um zur Laufzeit Imperfect Shadow Maps \cite{ISM} zu berechnen.
Imperfect Shadow Maps sind Shadow Maps mit geringer Auflösung für jede virtuelle Lichtquelle.
In den Knoten der Baumstruktur werden die drei nächsten Lichter gespeichert.
Bei der Berechnung der Sichtbarkeit wird der Mittelpunkt der Knoten, bzw. des Dreiecks in die Ebene der drei Punktlichtquellen projiziert.
......@@ -277,19 +273,22 @@ Für kleinere Dreiecksnetze ist es effizienter die Reflexion von allen Dreiecken
Während eines eigenen Renderdurchgangs wird zunächst die direkte Beleuchtung der Szene bestimmt.
Anschließend muss für jeden Pixel ein Schnitt durch den Baum bestimmt werden.
Dafür wird zunächst für jeden Vertex ein Schnitt bestimmt, die dann für die Pixel gemittelt werden. \todo{ist das Relatvpronomen ``die'' richtig? Ich denke, es muss ``der'' (der Schnitt)heißen.}
Dafür wird zunächst für jeden Vertex ein Schnitt bestimmt.
Für einen Pixel werden dann die 3 Schnitte der Eckpunkte gemittelt.
Im finalen Rendervorgang wird dann der Schnitt ausgewertet, für jeden Pixel die Reflexion berechnet und mit den Werten aus den Shadow Maps gewichtet.
Um die Performance zu verbessern, kann die Schnitt-Selektion in CUDA implementiert werden.
Jedoch gibt es noch keine effizienten Prioritätenlisten für CUDA. Die Schnitt-Selektion wird in 5 normale Warteschlangen mit unterschiedlichen Fehlern aufgeteilt. \todo{Stimmt das nach meiner Änderung noch?}
Die erste Schlange speichert z.B alle Knoten mit Fehlern größer als 16\% und nach dem Splitten werden die Kinder zu einer Liste mit Fehler größer als 8\% hinzugefügt. \todo{immer beide Kinder? Ein Kind könnte doch genauer sein}
Jedoch gibt es noch keine effizienten Prioritätenlisten für CUDA. Die Schnitt-Selektion wird in 5 normale Warteschlangen mit unterschiedlichen Fehlern aufgeteilt.
Die erste Schlange speichert z.B alle Knoten mit Fehlern größer als 16\% und nach dem Splitten werden die Kinder zu einer Liste mit zugehörigem Fehler, z.B.größer als 8\% hinzugefügt.
So erhält man eine nicht ganz akkurate Prioritätenliste, aber eine ausreichend genaue für diesen Zweck.
%% ==============
\chapter{Ergebnisse und Vergleiche}
\label{ch:Content6}
%% ==============
Soll ich sowas überhaupt behandeln? \todo{unbedingt ;-)}
\begin{figure}
\begin{center}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment