Commit 5924c9cb authored by Lukas Tietze's avatar Lukas Tietze

Neuer Entwurf

parent cd62ecbf
......@@ -5,11 +5,10 @@
%
\begin{enumerate}
\item Aufgabenstellung
\item Einführung: Was ist Raytracing?
\begin{enumerate}
\item Theoretische Grundlagen
\item Umsetzung mit Vulkan & NVIDIA-Extension
\item Umsetzung mit Vulkan \& NVIDIA-Extension
\item Hardwareunsterstützung
\end{enumerate}
......@@ -38,14 +37,11 @@
\item Qualität
\item Performance
\end{enumerate}
\begin{enumerate}
\end{enumerate}
\end{enumerate}
%
Nützliche Links:
http://graphics.cs.aueb.gr/graphics/docs/papers/GraphiCon09_PapadopoulosPapaioannou.pdf
https://graphics.stanford.edu/courses/cs348b-03/papers/veach-chapter9.pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.671.766&rep=rep1&type=pdf
https://nvpro-samples.github.io/vk_raytracing_tutorial/vkrt_tuto_intersection.md.html#environmentsetup/intersectionshader
https://www.saschawillems.de/blog/2016/08/13/vulkan-tutorial-on-rendering-a-fullscreen-quad-without-buffers/
\ No newline at end of file
% http://graphics.cs.aueb.gr/graphics/docs/papers/GraphiCon09_PapadopoulosPapaioannou.pdf
% https://graphics.stanford.edu/courses/cs348b-03/papers/veach-chapter9.pdf
% http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.671.766&rep=rep1&type=pdf
% https://nvpro-samples.github.io/vk_raytracing_tutorial/vkrt_tuto_intersection.md.html#environmentsetup/intersectionshader
% https://www.saschawillems.de/blog/2016/08/13/vulkan-tutorial-on-rendering-a-fullscreen-quad-without-buffers/
\ No newline at end of file
\section{Grundlagen von Raytracing}
Zunächst sollen die Grundlagen von Raytracing und die wichtigen Begriffe kurz umrissen werden um eine Basis
für die Verständlichkeit des Dokuments zu legen. Dies ist auch in der Ausarbeitung selbst erforderlich und
kann dort noch mehr vertieft werden.\\
%
\paragraph{Strahl/Ray:} Ein Strahl (oder eben Ray) besteht aus einem Startpunkt und einem Richtungsvektor. Der
Kern des Raytracings ist, die Schnittpunkte eines solchen Strahls mit der Szene zu berechnen. Dieser Prozess
wird in aktuellen Grafikkarten durch spezielle Rechenkerne beschleunigt und ermöglicht so Raytracing in
Echtzeit. Für jeden Schnittpunkt kann danach ein bestimmter Shader aufgerufen werden, um den Treffer zu
verarbeiten, häufig wird jedoch nur der Treffer, der am nächsten zum Startpunkt des Strahls liegt
beachtet.
%
\paragraph{Ray-Payload:} Die Informationen, die mit einem Strahl verknüpft sind. Diese sind frei definierbar
und beinhalten zum Beispiel die Farbe des getroffenen Objekts, oder lediglich eine Flag, die anzeigt ob
überhaupt ein Objekt getroffen wurde.
%
\paragraph{Schattenfühler:} Schattenfühler sind besondere Strahlen, die von einem Trefferpunkt eines Strahls
in der Szene ausgesendet werden um zu prüfen, ob der getroffene Punkt von der Lichtquelle erreichbar ist.
Somit lässt sich prüfen, ob ein Punkt von einer Lichtquelle aus im Schatten liegt oder nicht.
%
\paragraph{Stochastisches Raytracing:} Ein Sammelbegriff für Techniken, die statt eines Strahls mehrere
zufälligen variierte Strahlen nutzt und den Mittelwert bildet.
Um für einen Punkt eine korrekte Beleuchtung zu berechnen müssten
theoretisch - der Rendergleichung folgend - unendlich viele Strahlen ausgesendet werden, um alle einfallenden
Lichtstrahlen zurückzuverfolgen. Beim stochastischen Raytracing wird versucht, die Rendergleichung durch eine
Monte-Carlo-Simulation anzunähern.
\section{Problem: Darstellung von Lichtschäften}
Lichtschäfte lassen sich beobachten, wenn sich 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 Unterwasser oder wenn die Sonne in einen nebligen Wald schein lässt sich der Effekt
beobachten. Der Effekt ist eindrucksoll und kann deswegen eine computergrafisch dargestellte Szene bereichern.\\
%
\begin{figure}[ht]
\centering
\includegraphics[width=0.9\textwidth]{data/images/Streuung2.png}
\caption{Darstellung der Lichtbrechung an Partikeln}
\end{figure}
%
Der Effekt lässt sich recht einfach durch Rendern eines transparenten Objekts erzeugen. \\
%
Für die folgenden Überlegungen seien noch folgende Begriffe definiert:
%
\paragraph{Dichtes Medium:} Ein Medium, in dem viele Partikel vorhanden sind, die das Licht reflektieren und
so zur Entstehung von Lichtschäften führen können. Dies kann zum Beispiel staubige Luft, Nebel, oder einfach
Wasser sein. Das Medium wird durch ein Objekt in der Szene angenähert.
\ No newline at end of file
\section{Umsetzung mittels Sampling im Medium}
%
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, wie viel Licht entlang des Strahls zum Beobachter zurückgeworfen wird. Das grobe
Vorgehen ist das folgende:
%
\begin{enumerate}
\item Strahl trifft auf dichtes Medium
%
\begin{enumerate}
\item Der Eintrittspunkt wird in der Ray-Payload vermerkt.
\end{enumerate}
%
\item Strahl trifft auf anderes Objekt oder tritt aus dichtem Medium aus
\begin{enumerate}
\item Der Strahlenabschnitt innerhalb des dichten Mediums wird bestimmt.
\item Entlang dieses Abschnittes wird eine Zahl Schattenfühler ausgesendet.
\item Für jeden Treffer wird der Anteil des zurückgeworfenen Lichtes bestimmt und aufaddiert.
\end{enumerate}
\item Die anderen Trefferpunkte des Strahls werden behandelt, die Lichtberechnung für dahinterliegende
Objekte entsprechend ausgeführt und das Ergebnis um den vorher berechneten faktor aufgehellt.
\end{enumerate}
%
\begin{figure}[ht]
\centering
\includegraphics*[width=0.9\textwidth]{data/images/Sampling.png}
\caption{Sampling der Lichtquelle beim Durchqueren eines Mediums}
\begin{tabular}{c|c}
Gelb & Lichtquelle \\
Schwarzer Balken & Objekt \\
Grüne Strahlen & gesampelte Strahlen \\
rote Strahlen & Schattenfühler
\end{tabular}
\end{figure}
%
Dabei ist natürlich vor allem auf die Performance zu achten. Je mehr Schattenfühler genutzt werden, desto
genauer wird das Ergebnis, desto teurer wird jedoch auch die Berechnung. Auch die genaue Art der Verrechnung
der einzelnen Samples muss bestimmt werden.
\ No newline at end of file
\section{Entwicklung eines eigenen Algorithmus zur Darstellung von gestreutem Licht in dichten Medien}
Abschließend soll noch ein eigener Algorithmus entwickelt werden, der Lichtstrahlen in dichten Medien rendern
kann. Die Idee dabei ist, nicht den Trefferpunkt eines Strahls auszuwerten, sonden den Weg den
er zurückgelegt hat. Dies könnte vor allem bei dichten Medien interessant sein (staubige/unreine Luft, oder
Wasser), da dort Lichtschäfte entstehen können. Damit könnten Lichtschäfte mit vertretbarem Rechenaufwand und
höherer Genauigkeit als beim Raymarching dargestellt werden. \\
Der Grundaufbau ist ähnlich zum Photon-Mapping (welches wiederum dem Shadow-Mapping ähnelt):
%
\begin{itemize}
\item Es werden Strahlen von der Lichtquelle aus in Richtung des dichten Mediums geschossen.
\item Wenn ein Strahl in das Medium ein- und wieder austritt lässt sich ein Strahlenverlauf im Medium mit
......
......@@ -47,8 +47,12 @@
% \clearpage
\pagenumbering{arabic}
\input{components/preamble}
\input{components/}
% \input{components/grundlagen}
\input{components/v2/grundlagen}
\input{components/v2/problem.tex}
\input{components/v2/umsetzung1.tex}
\input{components/v2/umsetzung2.tex}
\input{components/v2/quellen.tex}
\input{components/v2/gliederung.tex}
% \input{components/raytracing}
% \input{components/implementierung}
% \input{components/effekte}
......
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