Commit 71370c33 authored by Lukas Tietze's avatar Lukas Tietze

Texte aufr盲umen und etwas schreiben

parent 82346b64
%-------------------------------------------------------------------------------------------------------------
% Bibliotheken f眉r tikz
%-------------------------------------------------------------------------------------------------------------
\usetikzlibrary{arrows, arrows.meta, shapes, trees, calc, decorations.pathreplacing, positioning}
%-------------------------------------------------------------------------------------------------------------
% Stile f眉r Tikz
%-------------------------------------------------------------------------------------------------------------
\tikzset{current/.style = {draw, circle, fill=yellow!30, inner sep=1pt, minimum size=6mm}}
\tikzset{unvisited/.style = {draw, circle, fill=white, inner sep=1pt, minimum size=6mm}}
\tikzset{visited/.style = {draw, circle, fill=green!20, inner sep=1pt, minimum size=6mm}}
\tikzset{goodResult/.style = {draw, rectangle, fill=green!30, inner sep=1pt, minimum width=3cm}}
\tikzset{badResult/.style = {draw, rectangle, fill=red!30, inner sep=1pt, minimum width=3cm}}
\tikzset{variableNode/.style = {draw, circle, fill=white, inner sep=1pt, minimum size=6mm}}
\tikzset{currentVariableNode/.style = {draw, circle, fill=green!20, inner sep=1pt, minimum size=6mm}}
\tikzset{activeVariableNode/.style = {draw, circle, fill=orange!20, inner sep=1pt, minimum size=6mm}}
\tikzset{clauseNode/.style = {draw, rectangle, fill=white, inner sep=1pt, minimum size=6mm}}
\tikzset{activeClauseNode/.style = {draw, rectangle, fill=orange!20, inner sep=1pt, minimum size=6mm}}
\tikzset{emptyNode/.style = {inner sep=0pt, outer sep=0pt, anchor=base, baseline}}
%-------------------------------------------------------------------------------------------------------------
% Abk眉rzungen, Displaystyles, etc.
%-------------------------------------------------------------------------------------------------------------
\newcommand\todo[1]{\textcolor{red}{[#1]}\message{TODO: #1}}
\newcommand\dprod[0]{\displaystyle\prod}
\newcommand\tprod[0]{\textstyle\prod}
\newcommand\dsum[0]{\displaystyle\sum}
\newcommand\tsum[0]{\textstyle\sum}
%-------------------------------------------------------------------------------------------------------------
% Messages
%-------------------------------------------------------------------------------------------------------------
\newcommand\xamsg[4]{
\frac{
\dprod_{b\in N(#1)\setminus #2}m_{b\to #1}^{[#4]}(#3)
}
{
\dprod_{b\in N(#1)\setminus #2}m_{b\to #1}^{[#4]}(1) +
\dprod_{b\in N(#1)\setminus #2}m_{b\to #1}^{[#4]}(0)
}
}
\newcommand\axmsg[3]{
1-\dprod_{y\in N(#1)\setminus #2}m_{y\to #1}^{[#3]}(1-value(y, #1))
}
\newcommand\xmsg[2]{
\frac{
\dprod_{b\in N(#1)}m_{b\to #1}^{[#2]}(1)
}
{
\dprod_{b\in N(#1)}m_{b\to #1}^{[#2]}(1) +
\dprod_{b\in N(#1)}m_{b\to #1}^{[#2]}(0)
}
}
\newcommand\xamsgempty{
\frac{
\dprod_{\emptyset}
}
{
\dprod_{\emptyset} +
\dprod_{\emptyset}
}
}
%-------------------------------------------------------------------------------------------------------------
% true/false
%-------------------------------------------------------------------------------------------------------------
\newcommand\true{\textit{wahr}}
\newcommand\false{\textit{falsch}}
%-------------------------------------------------------------------------------------------------------------
% besondere Elemente f眉r tikz
%-------------------------------------------------------------------------------------------------------------
\newcommand\connection[3][]{
\ifthenelse
{
\equal{#1}{}
}
{
\draw (#2) -- (#3);
}
{
\draw (#2) -- (#3) node[midway, fill=white] {\small{#1}};
}
}
\newcommand\negConnection[3][]{
\ifthenelse
{
\equal{#1}{}
}
{
\draw[dashed] (#2) -- (#3);
}
{
\draw[dashed] (#2) -- (#3) node[midway, fill=white] {\small{#1}};
}
}
\newcommand\fadingConnection[3][]{
\ifthenelse
{
\equal{#1}{}
}
{
\draw[dash pattern=on 1cm off 0.1cm on 0.1cm off 0.05cm on 0.05cm off 0.05cm on 0.05cm off 5cm] (#2) -- (#3);
}
{
\draw[dash pattern=on 1cm off 0.1cm on 0.1cm off 0.05cm on 0.05cm off 0.05cm on 0.05cm off 5cm] (#2) -- (#3) node[near start, fill=white] {\small{#1}};
}
}
\newcommand\arrowconnection[3][]{
\ifthenelse
{
\equal{#1}{}
}
{
\draw[draw, -latex] (#2) -- (#3);
}
{
\draw[draw, -latex] (#2) -- (#3) node[midway, fill=white] {\small{#1}};
}
}
%-------------------------------------------------------------------------------------------------------------
% Seitenumbr眉che und abstract Title
%-------------------------------------------------------------------------------------------------------------
\newcommand\emptypage{
\newpage\null\thispagestyle{empty}\newpage
}
\newcommand\file[1]{
\texttt{#1}
}
\ifcsname abstitlestyle\endcsname
\renewcommand{\abstitlestyle}[1]{\centering\Large{\textbf{#1}}}
\fi
\ifcsname\glossaryname\endcsname
\renewcommand*{\glossaryname}{Glossar}
\fi
\newcommand{\gquote}[1]{\glqq#1\grqq}
\newcommand{\cgFuncRef}[1]{$\rightarrow$ \lstinline{lib::CgContext::#1()}\\}
\ No newline at end of file
\newcommand{\gquote}[1]{\glqq#1\grqq}
\ No newline at end of file
\section{M枚gliche Lichteffekte}
In diesem Abschnitt sollen einige Lichteffekte genannt und kurz erl盲utert werden. Das Ziel einer Masterarbeit
w盲re es, zu pr眉fen wie diese Lichteffekte mittels Raytracing gerendert werden
k枚nnen und diese Techniken zu implementieren. Dabei soll immer auch der Vergleich zur Implementierung dieser
Technik bei einem \gquote{klassischen} Rasterisierer gezogen werden.\\
Zun盲chst muss eine Standardszene erstellt werden, an der die Effekte veranschaulicht werden k枚nnen. Diese
Szene muss daher eine Lichtquelle und mehrere Objekte enthalten. Es muss mindestens ein Reflektor und ein
Refraktor enthalten sein.
%
\subsection{Einfaches Sampling}
Der einfachst m枚gliche Raytracer schie脽t nur einen Strahl pro Pixel in die Szene und ermittelt ohne weitere
Rekursion die Farbe dieses Pixels anhand des getroffenen Objekts. Dies ist der erste zu implementierende
Schritt, im Ergebnis muss die Szene sichtbar sein, es werden jedoch noch keinerlei Lichtberechnungen
durchgef眉hrt.
%
\subsection{Harte Schatten}
Schatten stellen einen wichtigen Faktor f眉r den Realismusgrad einer Szene dar. Bei einem Rasterisierer werden
dazu Shadowmaps genutzt, also Renderings der Szene aus Sicht der Lichtquelle(n). Durch geschicktes
Interpolieren zwischen mehreren Shadowmaps wird damit ein relativ gutes Ergebnis erzielt, das jedoch bei
kleinen Details oft nicht realistisch erscheint.
Beim Raytracing lassen sich Schatten sehr direkt berechnen: Trifft ein Strahl auf ein Objekt in der Szene
wird ein Strahl zur Lichtquelle geschickt. Dieser Strahl nennt sich Schattenf眉hler. Trifft der Schattenf眉hler
ein Objekt, so liegt der getroffene Punkt im Schatten, sonst wird der getroffene Punkt von der Lichtquelle
beleuchtet. Damit lassen sich relativ einfach harte Schatten erzeugen. Nach diesem Punkt lassen sich
Lichtberechnungen (z.B. nach Blinn-Phong) ausf眉hren\\
Nach diesem Schritt muss die Szene mit einfacher Beleuchtung nach dem Blinn-Phong-Modell und harten Schatten
zu sehen sein.
%
\subsection{Reflexion}
Reflexion und Refraktion sind zwei weitere grafische Effekte, die den Realismusgrad einer Szene stark
erh枚hen. Bei genauerer Betrachtung sind sehr viele Objekte in der realen Welt zu einem gewissen Grad
spiegelnd. F眉r Rasterisierer stellt dieser Effekt bisweilen Probleme dar. M枚gliche Implementierungen sind
Stencil Reflection, Environment mapping und Screen Space Reflections.\\
Nach diesem Schritt muss in der Szene der Reflektor die umliegende Szene reflektieren.
%
\paragraph{Stencil Reflection} erzeugt zwar die besten und genauesten Ergebnisse, da die Szene wirklich gespiegelt
gerendert wird, ist jedoch auch sehr kostspielig (Szene muss ein zus盲tzliches Mal pro Reflektor gerendert
werden) und eignet sich nur f眉r ebene Reflektoren.
%
\paragraph{Screen Space Reflections} berechnet Reflexionen im Screen Space.
Dies ist relativ schnell, jedoch k枚nnen durch die Beschr盲nkung auf den ScreenSpace
nur Objekte reflektiert werden, die auch tats盲chlich im Bild sichtbar sind, was schnell zu unrealistischen
Ergebnissen f眉hren kann.
%
\paragraph{Environment mapping} rendert die Szene von einem Punkt des Raumes aus in eine Cubemap und sampelt
diese Cubemap f眉r Reflexionen. Dieses Verfahren kann gute Ergebnisse liefern, ben枚tigt jedoch ein wenig
k眉nstlerisches Geschick, da jede Cubemap nur f眉r einen einzigen Punkt im Raum exakt ist und daher unter
Umst盲nden zwischen mehreren Cubemaps interpoliert werden muss.
%
\paragraph{Raytraycing} erm枚glicht Reflexionen auf eine sehr allgemeine Art.
Trifft ein Strahl auf ein reflektierendes Objekt, so wird einfach ein weiterer Strahls entsprechend des
Reflexionsgesetzes geschickt um die reflektierte Farbe zu bestimmten. Man kennt dabei den ausgehenden Strahl
und muss nur den einfallenden Strahl zur眉ckverfolgen.
Dies erm枚glicht eine relativ einfache Implementierung von Reflexionen, die zus盲tzlich auch pixelgenau und vom
Reflektor unabh盲ngig sind. Dieser Effekt ist korrekt, wenn man von einer relativ groben Oberfl盲che ausgeht,
bei der jeder getroffene Punkt ein perfekter, ebener Reflektor ist. Au脽erdem wird hier von einer punktf枚rmigen
Lichtquelle ausgegangen.
%
\subsection{Refraktion}
Refraktion, also die Brechung des Lichts ist ein weiterer subtiler Effekt, der in der Realit盲t an
transparenten Objekten auftritt. Bei einem Rasterisierer l盲sst sich das Problem wieder mit Cubemaps l枚sen,
ganz 盲hnlich wie bei der Erstellung von Reflexionen. Beim Raytracing wird das Problem wieder sehr allgemein
gel枚st: der einfallende Strahl wird entsprechend des Snelliusschen Brechungsgesetzes (Snell's law)
zur眉ckverflogt. Der Vorteil liegt hier wieder in der Genauigkeit des Prozesses. \\
Nach diesem Schritt soll in der Szene eine Refraktion der Szene an einem geeigneten Objekt zu sehen sein. Dies
kann z.B. eine transparente Kugel sein. Zus盲tzlich l盲sst sich hier der Frage nachgehen, warum mit diesem
Vorgehen keine Kaustiken erzeugt werden k枚nnen. In der Realit盲t w眉rde eine Glaskugel das einfallende Licht auf
einen Punkt b眉ndeln, 盲hnlich einem Brennglas. Mit dieser Technik l盲sst sich der Effekt jedoch nicht erzeugen.
%
\subsection{Antialiasing}
Antialiasing l盲sst sich bei Raytracing ohne einen zus盲tzlichen Renderpass implementieren, indem Strahlen nicht
in der Mitte eines Pixels, sondern an verschiedenen Punkten erzeugt werden. Kleine 脛nderungen werden dabei
眉ber mehrere Frames hinweg akkumuliert.\\
Nach diesem Schritt sollten Kanten gegl盲ttet erscheinen.
%
\subsection{Entrauschung (Denoising)}
Beim stochastischen Raytracing erreichen Strahlen in jedem Frame andere Punkte der Szene. Dadurch kann
sich die Farbe eines Pixels in jedem Frame leicht 盲ndern und es entsteht ein verrauschtes Bild. In diesem
Schritt soll ein geeigneter Entrauschungsalgorithmus gefunden, implementiert und diskutiert werden.\\
Der Schritt l盲sst sich am besten implementieren, indem das Ergebnis des Raytracing in eine Textur gespeichert
wird, die dann in einem Post-processing-Schritt entrauscht wird. Es bietet sich auch an, einen Algorithmus
zu entwickeln, der beim Post-processing jeweils die letzten X Frames in die Berechnung einbezieht. Dadurch
stehen f眉r jedes Bild mehr Daten zur Verf眉gung, was zu eine besseren Endergebnis f眉hren k枚nnte. Probleme sind
bei schnellen Bewegungen zu erwarten, da das Bild dann verzerrt werden kann. Ein solcher Algorithmus soll
entwickelt und getestet werden.
%
\subsection{Globale Beleuchtung}
Bisher wurden pro Trefferpunkt nur sehr wenige Strahlen genutzt: ein Schattenf眉hler und eventuell ein Strahl
f眉r eine Reflexion oder Refraktion. In diesem Schritt soll das Konzept der globalen Beleuchtung umgesetzt
werden. Dazu soll nicht mehr nur die minimal n枚tige Anzahl an Strahlen erzeugt werden.
Es wird nun versucht, die Rendergleichung anzun盲hern. Dazu werden von einem Trefferpunkt aus mehrere Strahlen
in zuf盲llige Richtungen ausgesendet um die Umgebung des Trefferpunktes zu sampeln. Aus den getroffenen (oder
nicht getroffenen) Objekten wird dann die Farbe das Punktes ermittelt. Dieses Vorgehen zieht die
mikroskopische Oberfl盲chenstruktur von Objekten in Betracht und simuliert eine Oberfl盲che, bei der jeder Punkt
aus \textit{vielen} ebenen, perfekten Reflektoren besteht (Mikrofacettenmodell). Au脽erdem wird hier von einer
nicht-punktf枚rmigen Lichtquelle ausgegangen.\\
Ein wichtiger Punkt dabei ist die Anzahl der Strahlen so zu w盲hlen, dass die Performance nicht darunter
leidet, aber trotzdem noch ein gutes Ergebnis erzielt wird. \\
Hier l盲sst sich auch die BRDF vertiefen, da diese die Verteilung und Anzahl der Strahlen bestimmt.
Mit dieser Technik lassen sich zun盲chst Ambient Occlusion, weiche Schatten und Color Bleeding implementieren.
Am Ende dieses Schrittes muss die Szene leichte Schatten in kleinen Vertiefungen aufweisen, die
Schatten von Objekten d眉rfen keine harten Schatten mehr sein und die Farbe von Objekten muss leicht auf
umliegende Objekte abstrahlen. Dies l盲sst sich zum Beispiel mit farbigen W盲nden und einem wei脽en Block direkt
daneben gut darstellen.\\
%
\subsubsection{Ambient Occlusion}
Ambient Occlusion beschreibt den Effekt, dass bei ambienter Beleuchtung tiefer gelegene Stellen eines Objekts,
z.B. L枚cher oder Ritzen weniger beleuchtet sind. F眉r Rasterisierer kann der Effekt durch ein Screen
Space-Verfahren (SSAO, Screen Space Ambient Occlusion) recht gut angen盲hert werden.
%
\subsubsection{Weiche Schatten}
In der Realit盲t besitzen die meisten Schatten einen dunklen Kernschatten und weniger dunklen Halbschatten,
sodass der 脺bergang von Schatten zu beleuchteter Fl盲che flie脽end ist. Bei einem Rasterisierer l盲st sich der
Effekt gut ann盲hern, indem eine Mipmap der Shadowmap gesampelt wird. Beim Raytracing m眉ssen hierf眉r mehrere
Strahlen genutzt werden, wie es die Rendergleichung vorsieht.
%
\subsubsection{Color Bleeding}
Color Bleeding bezeichnet den Fakt, dass Objekte auch Licht von benachbarten Objekten reflektieren und so die
Beleuchtung nicht nur von der Lichtquelle, sondern auch von der Umgebung eines Objektes abh盲ngt. Bei einem
Rasterisierer w眉rde man hierf眉r wieder auf zuvor erzeugte Cubemaps zur眉ckgreifen. Beim Raytracing ergibt sich
dieser Schritt automatisch durch die Ann盲herung der Rendergleichung.
%
\subsection{Multiple Importance Sampling f眉r \gquote{Glossy Reflection}}
Das bisherige Ergebnis sollte schon recht gut aussehen, hat allerdings einige Schw盲chen. Zum Beispiel sehen
matte Reflektoren eher sehr verrauscht aus. Dies liegt an der hohen Varianz der Strahlen, wenn nur die BRDF
ber眉cksichtigt wird. Eine Verbesserung stellt daher das Multiple Importance Sampling (MIS) dar. Dabei wird
beachtet, dass Lichtquellen meist einen h枚heren Beitrag zur Beleuchtung eines Punktes liefern, als die
Umgebung des Punktes. Das bedeutet, dass Lichtstrahlen nicht nur entsprechend der BRDF erzeugt werden,
sondern, dass zu Lichtquellen immer Strahlen geschickt werden. Um weiche Schatten zu behalten m眉ssen auch
mehrere Strahlen zu verschiedenen Punkten einer Lichtquelle geschickt werden.\\
Nach diesem Schritt sollten alle Arten von Reflexionen physikalisch plausibel und realit盲tsnah dargestellt
werden.
%
%
% Die Datei ist zun盲chst nur f眉r Notizen gedacht!
%
\section{Vorl盲ufige Gliederung}
%
\begin{enumerate}
......@@ -11,22 +8,10 @@
\item Umsetzung mit Vulkan \& NVIDIA-Erweiterung
\item Hardwareunterst眉tzung
\end{enumerate}
%
\item Die Rendergleichung und ihre Umsetzung mittels Raytracing
\item Implementierungsgrundlagen eines Raytracers mit Vulkan \& NVIDIA-Erweiterung
% Zu viel oder am Thema vorbei?
% \item Umsetzung grafischer Effekte mit Raytracing
% \begin{enumerate}
% \item Harte Schatten
% \item Reflexion
% \item Refraktion
% \item Weiche Schatten
% \item Anti-Aliasing
% \item Globale Beleuhtung mit Monte-Carlo-Simulation und BRDF
% \item glossy reflection mit Multiple Importance Sampling
% \end{enumerate}
%
%
\item Darstellung von Strahlenb眉scheln
\begin{enumerate}
\item Physikalische Grundlagen
......
\section{Implementierung}
Alle besprochenen Prinzipien sollen praktisch umgesetzt werden. Es soll dabei ein Raytracer programmiert
werden, der eine beliebige Szene in Echtzeit rendern kann. Dazu bieten sich vor allem eine Cornell-Box oder
das Sponza-Atrium an. Auch einzelne Objekte wie ein Utah-Teapot oder Suzanne k枚nnen zur Darstellung der
Ergebnisse n眉tzlich sein.\\
Zielsetzung sollen dabei etwa 15 Bilder pro Sekunde bei gegebenenfalls geringer Aufl枚sung sein. Die
Demonstration verschiedener Techniken wiegt schwerer als die Entwicklung einer hoch optimierten Engine.
Dazu soll die Grafikschnittstelle Vulkan mit der Raytracing-Erweiterung von
NVIDIA (\texttt{NV\_VK\_RAY}) genutzt werden. Wichtige Punkte sind hierbei der Aufbau der Raytracing-Pipeline
und die verschiedenen Shader. F眉r die Umsetzung der Aufgabe werden nur Raygen-, Closest-Hit- und Miss-Shader
ben枚tigt. Da jedoch auch der technische Aspekt von Raytracing beleuchtet werden soll, ist es g眉nstig auch
Any-Hit- und Intersection-Shader genauer zu beleuchten. Auch eine kurze Exkursion zur Grafikschnittstelle
Vulkan bietet sich an.\\
Ebenfalls sollte hier (kurz) auf die spezielle Hardware f眉r Raytracing eingegangen werden, da GPUs mit
Raytracing-Kernen (RT-Cores) Raytracing in Echtzeit 眉berhaupt erst erm枚glichen. Die Hardware stellt bei der
Implementierung den limitierenden Faktor dar und erm枚glicht nur ein bestimmtes \gquote{Strahlenbudget}. Die
RT-Cores einer Grafikkarte k枚nnen nominell $N$ Strahlen pro Sekunde berechnen. In einer realen Anwendung ist
der nominelle Wert jedoch schwer zu erreichen. Bei einer Aufl枚sung von $X\times Y$ Pixeln und $R$ Bildern pro
Sekunde stehen pro Pixel pro Bild h枚chstens $\frac{N}{X\times Y \times R}$ Strahlen
zur Verf眉gung. Dies ist bei einer Implementierung immer zu bedenken und macht bei jedem grafischen Effekt eine
Abw盲gung zwischen Qualit盲t und Geschwindigkeit n枚tig.\\
Die Implementierung an sich soll stufenweise erfolgen und sich an den grafischen Effekten des folgenden
Abschnitts orientieren, sodass f眉r jeden Effekt eine Erweiterung der Implementierung stattfinden kann.
%
\ No newline at end of file
\section{Problem: Darstellung von Godrays/Strahlenb眉scheln}
Sogenannte Godrays lassen sich beobachten, wenn Licht an mikroskopisch kleinen Teilchen in einem Medium (z.B.
Luft oder Wasser) in Richtung des Beobachters gebrochen wird. Wenn die Lichtquelle dazu verdeckt ist, d.h.
wenn der Beobachter im Schatten steht, werden Lichtstrahlen sichtbar.
Dieser Effekt l盲sst sich w盲hrend der Morgen- und Abendd盲mmerung besonders gut an Wolken beobachten, wenn diese
die Sonne verdecken. Auch unter Wasser oder wenn die Sonne in einen nebligen Wald scheint, l盲sst sich der Effekt
beobachten. Der Effekt ist recht eindrucksvoll und kann deswegen eine computergrafisch dargestellte Szene bereichern.
\subsection{Physikalische Grundlagen}
Wenn Licht an mikroskopisch kleinen Teilchen in einem Medium (z.B. Luft oder Wasser) gestreut wird und der
Beobachter im Schatten steht, zeichnen sich die Lichtstrahlen im Medium ab (siehe \ref{g:1}).
Dieser Effekt wird Tyndall-Effekt \footnote{Siehe z.B. \url{https://de.wikipedia.org/wiki/Tyndall-Effekt}}
genannt. Diese sichtbaren Strahlen werden auch Strahlenb眉schel genannt und verdienen den Namen
\gquote{Godrays} (also g枚ttliche Strahlen) ihrer 盲u脽erst eindrucksvollen Wirkung.
Der Effekt l盲sst sich besonders gut w盲hrend der Morgen- und Abendd盲mmerung beobachten oder wenn eine kleine
Wolke die Sonne verdeckt.
Auch unter Wasser oder wenn die Sonne in einen nebligen Wald scheint, l盲sst sich der Effekt
beobachten. Aufgrund der Eindr眉cklichkeit des Effekts kann er eine computergrafisch dargestellte Szene
extrem bereichern.
%
\begin{figure}[ht]
\centering
\includegraphics[width=0.9\textwidth]{data/images/Streuung2.png}
\label{g:1}
\caption{Darstellung der Lichtbrechung an Partikeln}
\end{figure}
%
Andere Namen f眉r diesen Effekt sind \gquote{crepuscular rays}, Wolkenstrahlen oder eben Strahlenb眉schel. Das
Problem l盲sst sich mittels Raytracing nur ann盲hern. F眉r eine physikalisch korrekte Darstellung m眉ssten
unz盲hlige Partikel simuliert werden, daher soll hier nach einer physikalisch plausiblen Darstellung gesucht
werden.
\ No newline at end of file
\subsection{Darstellung durch computergrafische Algorithmen}
Dieser Effekt soll nun computergrafisch dargestellt, also in eine Szene gerendert werden. Dabei existieren
nat眉rlich sehr einfache M枚glichkeiten, wie eine zuvor erzeugte Textur an einen bestimmten Platz zu rendern und
sehr aufw盲ndige wie die physikalisch plausible Berechnung von Lichtbrechungen.\\
Das Ziel dieser Arbeit soll die Entwicklung eines Algorithmus' sein, der den oben besprochenen Effekt
physikalisch plausibel in beliebigen Szenen darstellen kann.
\ No newline at end of file
\section{Bisherige Arbeit}
%
\subsection{Backward Raytracing}
\paragraph{Quelle:} J. Arvo, \gquote{Backwards ray tracing} in SIGGRAPH Course
Notes, 1986, vol. 12, p. 100. \\
......@@ -24,7 +25,7 @@ befinden, das Licht von der Lichtquelle zum Beobachter hin reflektiert. Der Algo
Echtzeitanwendungen leider kaum
umsetzbar, da er sehr rechenintensiv ist. Allerdings ist der Algorithmus ein guter Ansatz f眉r echte globale
Beleuchtung.
%
\subsection{Realistic Real-time Underwater Caustics and Godrays}
\paragraph{Quelle:} Papadopoulos, Charilaos \& Papaioannou, Georgios. (2010). Realistic Real-time Underwater Caustics and Godrays. 19th International Conference on Computer Graphics and Vision, GraphiCon'2009 - Conference Proceedings.
\url{http://graphics.cs.aueb.gr/graphics/docs/papers/GraphiCon09_PapadopoulosPapaioannou.pdf}
......@@ -32,4 +33,26 @@ Beleuchtung.
Papadopoulos und Papaioannou stellen einen Algorithmus vor, der einen sehr 盲hnlichen Ansatz zur hier
vorgestellten Umsetzung 2 bietet. Es wird versucht Schnittpunkte von Lichtstrahlen mit der Szene zu finden
und dann Linien-Primitive von den Schnittpunkten zur Lichtquelle zu zeichnen. Allerdings wird diese
Berechnung im Lightspace vorgenommen und nicht mittels Raytracing ausgef眉hrt.
\ No newline at end of file
Berechnung im Lightspace vorgenommen und nicht mittels Raytracing ausgef眉hrt.
%
\subsection{Ray Tracing Essentials Part 5: Ray Tracing Effects}
\paragraph{Quelle:} \url{https://news.developer.nvidia.com/ray-tracing-essentials-part-5-ray-tracing-effects/}
%
In diesem Video sagt Eric Haines in Bezug auf grafische Effekte beim Raytracing:
%
\begin{quote}
You can also atmospheric effects, so if, say you have a beam of light, you can do a thing called ray
marching, where the ray hits the beam, marches through it and light scattering in and light scattering out
and so and you just kind of walk through that thing and sample it as you go. And you can get these nice beams
of light, godrays, kind of effects.
\end{quote}
%
\paragraph{Anmerkung:} Der Begriff \gquote{ray marching} ist nicht eindeutig.
Prinzipiell beschreibt es - wie der Name vermuten l盲sst - eine Familie von Techniken, bei denen eine Strahl
abgetastet wird, bzw. bei denen entlang eines Strahls eine Funktion berechnet wird. H盲ufig wird die Technik
genutzt um den Schnittpunkt eines Strahls mit der Szene zu bestimmen (z.B. wenn die Objekte der Szene nicht
als Dreiecke sondern als mathematische Definitionen vorliegen).
\paragraph{Technik:}
Dieser kurze Ausschnitt des Videos stellt die Inspiration f眉r L枚sungsansatz 1 dar. Ein dichtes
Medium wird in der Szene modelliert und wenn ein Strahl dieses Medium durchl盲uft wird entlang des Strahls
die Lichtquelle gesampelt, der Strahl wird also \gquote{abgewandert}.
\ No newline at end of file
\section{Was ist Raytracing?}
Zun盲chst sollen die theoretischen Grundlagen des Raytracing beschrieben werden. Dazu geh枚rt die Einf眉hrung der
Terminologie, z.B. die Erkl盲rung, was ein Strahl in diesem Kontext 眉berhaupt ist. Weiterhin sollen auch die
physikalischen Grundlagen der Technik kurz erkl盲rt werden - vor allem in Hinblick auf das Prinzip der globalen
Beleuchtung und die Rendergleichung.\\
Hier bietet sich auch die Vertiefung der verschiedenen (Ab-)Arten des Raytracing an, da viele dieser Techniken
noch von Bedeutung sein werden.
Dabei sind vor allem die stochastischen Ans盲tze zu erw盲hnen, die
versuchen die Rendergleichung anzun盲hern, indem Strahlen in zuf盲llige Richtungen erzeugt werden
(Monte-Carlo-Integration). Zur Bestimmung der groben Richtung der Strahlen werden dabei die BRDF oder
\textit{Multiple Importance Sampling} (MSI) genutzt, welche hier auch vertieft werden k枚nnen.\\
Da durch diese Techniken oft ein verrauschtes Bild entsteht, bietet sich ein Exkurs zu Entrauschungstechniken
(Denoising) an, ist jedoch nicht essentiell f眉r das eigentliche Thema.
%
\ No newline at end of file
......@@ -8,8 +8,6 @@ Wasser sein. Das Medium wird durch ein Objekt in der Szene umrissen.
\subsection{Umsetzung mittels Sampling der Lichtquelle aus dem Medium heraus}
%
Dieser Algorithmus ist anscheinend z.B. in Minecraft RTX implementiert, jedoch noch nicht weiter
beschrieben oder ausgearbeitet, daher lohnt sich die 脺berpr眉fung und Implementierung des Verfahrens.\\
Ein m枚glicher Algorithmus zur L枚sung des Problems besteht darin, beim Durchgang eines Strahls durch ein
dichtes Medium mittels Schattenf眉hlern abzutasten, inwiefern der Strahl von der Lichtquelle aus erreichbar ist
und daraufhin zu berechnen, wieviel Licht entlang des Strahls zum Beobachter zur眉ckgeworfen wird. Das grobe
......
......@@ -2,29 +2,29 @@
\begin{center}
\begin{tabular}{|lc|}
\hline
\textbf{Phase} & \textbf{Gesch盲tzter Zeitbedarf in h} \\
\textbf{Phase} & \textbf{Gesch盲tzter Zeitbedarf in h} \\
\hline
\textbf{Planung} & \textbf{240} \\
Algorithmus entwickeln & 120 \\
脛nderungen an Infrastruktur planen & 30 \\
Implementierung planen & 60 \\
脺berlegung zu Grenzf盲llen & 30 \\
\textbf{Planung} & \textbf{340} \\
Quellenarbeit/Recherche & 100
Algorithmus entwickeln & 120 \\
脛nderungen an Infrastruktur planen & 30 \\
Implementierung planen & 60 \\
脺berlegung zu Grenzf盲llen & 30 \\
\hline
\textbf{Implementierung} & \textbf{330} \\
Verbesserung des bestehenden Programms & 100 \\
Anpassung f眉r den jeweiligen Algorithmus & 50 \\
Implementierung selbst & 80 \\
Bug-Fixes & 100 \\
\textbf{Implementierung} & \textbf{260} -90 \\
Verbesserung \& Anpassung der Engine & 100 \\
Implementierung selbst & 60 \\
Bug-Fixes & 100 \\
\hline
\textbf{Evaluierung} &\textbf{180} \\
Erstellung von Szenen f眉r Grenzf盲lle & 40 \\
Visuelle Evaluierung & 30 \\
Bewertung der Implementierung & 30 \\
Bewertung anhand theoretischer Aspekte & 80 \\
\textbf{Evaluierung} & \textbf{100} \\
Erstellung von Szenen f眉r Grenzf盲lle & 30 \\
Visuelle Evaluierung & 10 \\
Bewertung der Implementierung & 30 \\
Bewertung anhand theoretischer Aspekte & 30 \\
\hline
\textbf{Texterzeugung} &\textbf{150} \\
\textbf{Texterzeugung} & \textbf{200} \\
\hline
\textbf{Gesamt:} & \textbf{900} \\
\textbf{Gesamt:} & \textbf{900} \\
\hline
\end{tabular}
\end{center}
\ No newline at end of file
......@@ -22,41 +22,25 @@
\usepackage[hidelinks]{hyperref}
\usepackage{glossaries}
\usepackage[style]{abstract}
%
\pdfminorversion=7
\counterwithin{figure}{section}
\counterwithin{table}{section}
\counterwithin{equation}{section}
% \counterwithin{algorithm}{section}
\setcounter{secnumdepth}{3}
\lstset{language=C++,
basicstyle=\small,
keywordstyle={\bfseries \color{red}},
identifierstyle={\color{blue}},
commentstyle={\color{gray}},
showstringspaces=false}
%
\include{components/commands}
%
\begin{document}
\pagenumbering{gobble}
\input{components/title}
\clearpage
% \pagenumbering{roman}
% \tableofcontents
% \clearpage
\pagenumbering{arabic}
\input{components/preamble.tex}
\input{components/v2/grundlagen.tex}
\input{components/v2/problem.tex}
\input{components/v2/umsetzung.tex}
\input{components/v2/bewertung.tex}
\input{components/v2/quellen.tex}
\input{components/v2/gliederung.tex}
\input{components/v2/zeitplan.tex}
% \input{components/raytracing}
% \input{components/implementierung}
% \input{components/effekte}
% \input{components/entwicklung.tex}
\input{components/grundlagen.tex}
\input{components/problem.tex}
\input{components/umsetzung.tex}
\input{components/bewertung.tex}
\input{components/quellen.tex}
\input{components/gliederung.tex}
\input{components/zeitplan.tex}
\end{document}
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