...
 
Commits (2)
......@@ -6,13 +6,13 @@
\end{quotation}
%
Raytracing ist eine Rendertechnik, bei der der Verlauf von Lichtstrahlen und deren Interaktion mit der Umgebung
simuliert wird um photorealisitscher Bilder zu erstellen. Sowohl theoretische Grundlagen, als auch
simuliert wird um photorealisitsche Bilder zu erstellen. Sowohl theoretische Grundlagen, als auch
Implementierung der Technik sind seit Ende der 1960er Jahre bekannt. Die Technik rückte jedoch erst vor
wenigen Jahren in den Fokus der breiten Masse, als mit NVIDIAS RTX-Serie erstmals erschwingliche Grafikkarten
wenigen Jahren in den Fokus der breiten Masse, als mit NVIDIAs RTX-Serie erstmals erschwingliche Grafikkarten
mit Hardwarebeschleunigung für Raytracing auf den Markt kamen und Raytracing in Echtzeit ermöglichten.\\
Durch den Einsatz in der Spielebranche erlangte die Technik inzwischen einen hohen Bekanntheitsgrad und bietet
sich daher auch als Forschungsthema an. Die Technik unterscheidet sich dabei grundlegend vom klassischen und
praktisch allgegenwärtigen Ansatz des Rasterisierens. Dadurch bietet sie viele Möglichkeiten, bringt aber auch
praktisch allgegenwärtigen Ansatz des Rasterisierens. Dadurch bietet Raytracing viele neue Möglichkeiten, bringt aber auch
neue Probleme mit sich, die es zu lösen gilt. Gerade weil die Technik einen sehr allgemeinen Ansatz für das
Darstellen beliebiger Szenen in hoher Qualität bietet, scheint eine Vertiefung der Prinzipien des Raytracing
Rendern in hoher Qualität bietet, scheint eine Vertiefung der Prinzipien des Raytracings
für zukünftige Forschung und Entwicklung wichtig.
......@@ -12,7 +12,7 @@
\vspace*{1.5cm}
\Huge{Themenvorschlag Masterarbeit}
\\
\Large{Fortgeschrittene Beleuchtungseffekte mit Raytracing}
\Large{Darstellung von Godrays mit Raytracing}
\\
\vspace{2cm}
Lukas Tietze
......
\section{Bewertung}
Die beiden Umsetzungen sollen danach entsprechend der folgenden Kriterien bewertet werden:
%
\paragraph{Qualität:}
\begin{enumerate}
\item Sieht der Effekt subjektiv gut aus?
\item Sind deutliche Artefakte sichtbar?
\item Werden die Strahlen physikalisch plausibel dargestellt?
\end{enumerate}
%
\paragraph{Performance:}
\begin{enumerate}
\item Ist die Technik für eine Echtzeitanwendung geeignet?
\item Sind die Performancekosten für das erreichte Ergebnis gerechtfertigt?
\item Gibt es noch Optimierungspotenzial?
\end{enumerate}
%
......@@ -4,42 +4,61 @@
\section{Vorläufige Gliederung}
%
\begin{enumerate}
\item Aufgabenstellung
\item Aufgabenstellung \& Motivation
\item Einführung: Was ist Raytracing?
\begin{enumerate}
\item Theoretische Grundlagen
\item Umsetzung mit Vulkan \& NVIDIA-Extension
\item Hardwareunsterstützung
\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
\item Umsetzung grafischer Effekte mit Raytracing
% Zu viel oder am Thema vorbei?
\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 Lichtschäften
% \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
\item Bisherige Konzepte: Post-Processing
\item Ansatz über Raymarching (Begriff ist mehrdeutig!)
\item Untersuchung der Möglichkeit der Projektion von Strahlen auf die Bildebene
\item Bisherige Forschung
%
\item Umsetzung durch Raytracing im Medium
%
\begin{enumerate}
\item Konzept
\item Grundlagen
\item Implementierung
\end{enumerate}
%
\item Umsetzung durch Projektion von Strahlen auf die Bildebene
\begin{enumerate}
\item Konzept
\item Grundlagen
\item Implementierung
\end{enumerate}
%
\end{enumerate}
%
\item Auswertung der Methoden
\begin{enumerate}
\item Qualität
\item Performance
\item Vergleich zu bisherigen Techniken
\end{enumerate}
%
\item Anhänge, Quellen, etc.
\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
......
\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.\\
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
\paragraph{Strahl/Ray:} Ein Strahl (oder eben Ray) besteht aus einem Startpunkt und einer Richtung (Punkt- und
Richtungsvektor). Der
Kerngedanke 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
Echtzeit. Für jeden Schnittpunkt kann danach ein Shader aufgerufen werden, um den Treffer zu
verarbeiten und die Farbe des Trefferpunktes zu bestimmen. Prinzipiell kann ein Strahl eine Vielzahl von
Treffern auslösen, häufig wird jedoch nur der Treffer, der dem Startpunkt des Strahls am nächsten liegt,
beachtet.
%
\paragraph{Ray-Payload:} Die Informationen, die mit einem Strahl verknüpft sind. Diese sind frei definierbar
......@@ -15,15 +17,15 @@ und beinhalten zum Beispiel die Farbe des getroffenen Objekts, oder lediglich ei
ü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.
in der Szene ausgesendet werden um zu prüfen, ob der getroffene Punkt von der Lichtquelle aus 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
\paragraph{Stochastisches Raytracing:}
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.
Monte-Carlo-Simulation anzunähern. Dazu werden Strahlen zufällig leicht variiert, was am Ende ein verrauschtes
Bild erzeugt, aber bessere Ergebnisse liefert (z.B. für weiche Schatten).
\section{Problem: Darstellung von Lichtschäften}
Lichtschäfte lassen sich beobachten, wenn sich Licht an mikroskopisch kleinen Teilchen in einem Medium (z.B.
\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 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.\\
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.
%
\begin{figure}[ht]
\centering
......@@ -12,10 +12,7 @@ beobachten. Der Effekt ist eindrucksoll und kann deswegen eine computergrafisch
\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
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
\section{Bisherige Arbeit}
\subsection{Backward Raytracing}
\paragraph{Quelle:} J. Arvo, \gquote{Backwards ray tracing} in SIGGRAPH Course
Notes, 1986, vol. 12, p. 100. \\
\url{https://courses.cs.washington.edu/courses/csep557/13wi/projects/trace/extra/Backward.pdf}
\paragraph{Anmerkung:}
Der Begriff \gquote{Backward Raytracing} wird in entgegengesetzter Bedeutung genutzt. Manche Quellen
z.B. \url{https://de.wikipedia.org/wiki/Raytracing}
sehen das Verfolgen von Strahlen vom Beobachter in die Szene als Umkehrung der physikalischen Ausbreitung des
Lichtes (von der Lichtquelle in die Szene, dann zum Beobachter) und nennen daher die etablierte Methode \gquote{Backward Raytracing}.
Andere Quellen (z.B. J. Arvo) sehen das verfolgen von Strahlen vom Beobachter in die Szene als
\gquote{normales}, bekanntes und bereits implementiertes Verfahren an und bezeichnen daher die Umkehrung
dieses Verfahrens (also die physikalisch korrekte Richtung) als \gquote{Backward Raytracing}.
\paragraph{Technik:}
Strahlen werden von der Lichtquelle aus verfolgt und ihre Schnittpunkte mit der Szene werden ähnlich wie beim
Shadow-Mapping in einer \gquote{Illumination-Map} eingetragen. Diese Illumination-Map wird dann in einem
zweiten Schritt (der sog. \gquote{Forward phase}) mit normalem Raytracing zum Shading genutzt. Dadurch wird
ein Problem von Refraktion und Reflexion gelöst. Das Problem besteht darin, dass ein transparenter Körper
Licht aus allen möglichen Richtungen in Richtung des Beobachters brechen kann. Es ist damit nahezu unmöglich
alle Strahlen zu berechnen, die in einem lichtbrechenden Körper in die Richtung des Beobachters gebrochen
werden. \\
Das gleiche Problem betrifft auch Strahlenbüschel: An jedem Punkt eines dichten Mediums könnte sich ein Partikel
befinden, das Licht von der Lichtquelle zum Beobachter hin reflektiert. Der Algorithmus ist für
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}
\paragraph{Technik:}
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
\section{Umsetzung mittels Sampling im Medium}
\section{Umsetzung}
Es soll versucht werden Strahlenbüschel mittels Raytracing umzusetzen. Für die folgenden Überlegungen sei noch
der Begriff \gquote{dichtes Medium} definiert:
%
\paragraph{Dichtes Medium:} Ein Medium, in dem viele Partikel vorhanden sind, die das Licht streuen und
so die Entstehung von Strahlenbüscheln ermöglichen. Dies kann zum Beispiel staubige Luft, Nebel, oder einfach
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, wie viel Licht entlang des Strahls zum Beobachter zurückgeworfen wird. Das grobe
und daraufhin zu berechnen, wieviel Licht entlang des Strahls zum Beobachter zurückgeworfen wird. Das grobe
Vorgehen ist das folgende:
%
\begin{enumerate}
......@@ -17,25 +25,62 @@ Vorgehen ist das folgende:
\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 Entlang dieses Abschnittes werde einige 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.
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
\begin{tabular}{|l|l|}
\hline
Objekt & Beschreibung \\
\hline
gelber kreis & Lichtquelle \\
schwarzer Balken & Objekt, welches das Licht blockiert \\
grüne Strahlen & gesampelte Strahlen \\
rote Strahlen & Schattenfühler \\
\hline
\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
genauer wird das Ergebnis, desto teurer wird jedoch auch die Berechnung. Auch für die genaue Art der
Verrechnung der einzelnen Samples muss eine Formel entwickelt werden.
\subsection{Umsetzung mittels Berechnung von der Lichtquelle aus}
Der zweite Lösungsansatz verfolgt einen ähnlichen Ansatz wie Photon-Mapping, indem versucht wird die
Strahlen von der Lichtquelle aus zu verfolgen. Der Ansatz könnte eine höhere Qualität erzeugen, jedoch auch
teurer sein. Er beinhaltet einen zweistufigen Renderprozess, der wie folgt abläuft:
%
\begin{enumerate}
\item Die Szene wird wie gewöhnlich mittels Raytracing gerendert, dabei wird jedoch auch ein
Tiefenpuffer erstellt.
\item In einem zweiten (potenziell parallelen) Renderschritt werden die Strahlenbüschel in eine Textur gerendert
%
\begin{enumerate}
\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 erhält man einen Strahlenverlauf im
Medium mit Anfangspunkt, Richtung und Länge
\item Diese Linie wird auf die Kameraebene projiziert.
\item Entlang der projizierten Linie wird mit einem geeigneten Algorithmus (z.B.
Bresenham-Algorithmus) eine Linie in einer Texture erzeugt.
\end{enumerate}
%
\item Beide Bilder werden mithilfe der Tiefenwerte kombiniert.
\end{enumerate}
%
Für diesen Algorithmus besteht die Herausforderung wieder darin die Anzahl, Position und Richtung der
ausgesendeten Strahlen zu bestimmen und so zu minimieren, das die Performance nicht zu stark leidet.
%
\begin{figure}[ht]
\centering
\includegraphics[width=0.9\textwidth]{data/images/Projektion_Strahlenverlauf.png}
\caption{Grafische Darstellung der Idee: Der Verlauf eines Strahls wird per Bresenham-Algorithmus
rasterisiert.}
\end{figure}
%
\ No newline at end of file
\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
Anfangspunkt, Richtung und Länge erhalten
\item Diese Linie wird auf die Kameraebene projiziert.
\item Entlang der Linie wird mit einem geeigneten Rasterungsalgorithmus für Linien (z.B.
Bresenham-Algorithmus) eine Linie in einer Texture erzeugt.
\end{itemize}
%
Diese Textur muss einen Helligkeits- und einen Tiefenwert enthalten, damit sie in einem weiteren
Renderingschritt mit dem vom Raytracing erzeugten Bild verbunden werden kann. Hier sind die Tiefenwerte
wichtig, das heißt, auch der Raytracing-Prozess muss so umgebaut werden, dass er einen Tiefenpuffer erzeugt.
%
\begin{figure}[ht]
\centering
\includegraphics[width=0.9\textwidth]{data/images/Projektion_Strahlenverlauf.png}
\caption{Grafische Darstellung der Idee: Der Verlauf eines Strahls wird per Bresenham-Algorithmus
rasterisiert.}
\end{figure}
%
\ No newline at end of file
\section{Vorläufiger Zeitplan}
\begin{center}
\begin{tabular}{|lc|}
\hline
\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 \\
\hline
\textbf{Implementierung} & \textbf{330} \\
Verbesserung des bestehenden Programms & 100 \\
Anpassung für den jeweiligen Algorithmus & 50 \\
Implementierung selbst & 80 \\
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 \\
\hline
\textbf{Texterzeugung} &\textbf{150} \\
\hline
\textbf{Gesamt:} & \textbf{900} \\
\hline
\end{tabular}
\end{center}
\ No newline at end of file
......@@ -41,18 +41,19 @@
\begin{document}
\pagenumbering{gobble}
\input{components/title}
% \clearpage
\clearpage
% \pagenumbering{roman}
% \tableofcontents
% \clearpage
\pagenumbering{arabic}
\input{components/preamble}
\input{components/v2/grundlagen}
\input{components/preamble.tex}
\input{components/v2/grundlagen.tex}
\input{components/v2/problem.tex}
\input{components/v2/umsetzung1.tex}
\input{components/v2/umsetzung2.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}
......