diff --git a/doc/Themenvorschlag/components/v2.tex b/doc/Themenvorschlag/components/v2/gliederung.tex similarity index 67% rename from doc/Themenvorschlag/components/v2.tex rename to doc/Themenvorschlag/components/v2/gliederung.tex index 968e532a10af1ab2b3c4225e7f506424f231be70..05ed7ab1b337205a0e7c8c049d555e40cd28063e 100644 --- a/doc/Themenvorschlag/components/v2.tex +++ b/doc/Themenvorschlag/components/v2/gliederung.tex @@ -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 diff --git a/doc/Themenvorschlag/components/v2/grundlagen.tex b/doc/Themenvorschlag/components/v2/grundlagen.tex new file mode 100644 index 0000000000000000000000000000000000000000..70f1b97926f2eb632fa989e8b2ee2a85b301a722 --- /dev/null +++ b/doc/Themenvorschlag/components/v2/grundlagen.tex @@ -0,0 +1,29 @@ +\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. + + + diff --git a/doc/Themenvorschlag/components/v2/problem.tex b/doc/Themenvorschlag/components/v2/problem.tex new file mode 100644 index 0000000000000000000000000000000000000000..14f8d41e7fb997d39e1576d0834e312af5450a1f --- /dev/null +++ b/doc/Themenvorschlag/components/v2/problem.tex @@ -0,0 +1,21 @@ +\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 diff --git a/doc/Themenvorschlag/components/v2/quellen.tex b/doc/Themenvorschlag/components/v2/quellen.tex new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/doc/Themenvorschlag/components/v2/umsetzung1.tex b/doc/Themenvorschlag/components/v2/umsetzung1.tex new file mode 100644 index 0000000000000000000000000000000000000000..facf77e066d9daaa46da82e44d6bbfe0a6592bb9 --- /dev/null +++ b/doc/Themenvorschlag/components/v2/umsetzung1.tex @@ -0,0 +1,41 @@ +\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 diff --git a/doc/Themenvorschlag/components/entwicklung.tex b/doc/Themenvorschlag/components/v2/umsetzung2.tex similarity index 60% rename from doc/Themenvorschlag/components/entwicklung.tex rename to doc/Themenvorschlag/components/v2/umsetzung2.tex index 93e34aeb7dc2d3f0d27d1bc03ab2f82dd98821e8..4277f874c1d39783c65ca4c47101200287113a8e 100644 --- a/doc/Themenvorschlag/components/entwicklung.tex +++ b/doc/Themenvorschlag/components/v2/umsetzung2.tex @@ -1,11 +1,3 @@ -\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 diff --git a/doc/Themenvorschlag/data/images/Lichtstreuung.pdn b/doc/Themenvorschlag/data/images/Lichtstreuung.pdn new file mode 100644 index 0000000000000000000000000000000000000000..e7a95749646d5cd2054d4efd4a09c7a092cc9656 Binary files /dev/null and b/doc/Themenvorschlag/data/images/Lichtstreuung.pdn differ diff --git a/doc/Themenvorschlag/data/images/Lichtstreuung.png b/doc/Themenvorschlag/data/images/Lichtstreuung.png new file mode 100644 index 0000000000000000000000000000000000000000..b3541e8b815be2846d0de41c40c44248ac260d5e Binary files /dev/null and b/doc/Themenvorschlag/data/images/Lichtstreuung.png differ diff --git a/doc/Themenvorschlag/data/images/Sampling.pdn b/doc/Themenvorschlag/data/images/Sampling.pdn new file mode 100644 index 0000000000000000000000000000000000000000..16cfb9fe1157d1b84f629aed6bf1b7a57a3e93db Binary files /dev/null and b/doc/Themenvorschlag/data/images/Sampling.pdn differ diff --git a/doc/Themenvorschlag/data/images/Sampling.png b/doc/Themenvorschlag/data/images/Sampling.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8a6e4bfd54b2e76542c069b90d066eddfc4175 Binary files /dev/null and b/doc/Themenvorschlag/data/images/Sampling.png differ diff --git a/doc/Themenvorschlag/data/images/Schatten1.pdn b/doc/Themenvorschlag/data/images/Schatten1.pdn deleted file mode 100644 index eb3d13fe93da0a1cd8e9296a7c50345b08098e41..0000000000000000000000000000000000000000 Binary files a/doc/Themenvorschlag/data/images/Schatten1.pdn and /dev/null differ diff --git a/doc/Themenvorschlag/data/images/Schatten1.png b/doc/Themenvorschlag/data/images/Schatten1.png deleted file mode 100644 index 6dd9d83afed0c6b5ea6c142f30b3d36651ef4c4a..0000000000000000000000000000000000000000 Binary files a/doc/Themenvorschlag/data/images/Schatten1.png and /dev/null differ diff --git a/doc/Themenvorschlag/data/images/Schatten2.pdn b/doc/Themenvorschlag/data/images/Schatten2.pdn deleted file mode 100644 index 19c44a080948b584cf56e0185908c7686787d90b..0000000000000000000000000000000000000000 Binary files a/doc/Themenvorschlag/data/images/Schatten2.pdn and /dev/null differ diff --git a/doc/Themenvorschlag/data/images/Schatten2.png b/doc/Themenvorschlag/data/images/Schatten2.png deleted file mode 100644 index b5552f594853df5c5db97c93024ef9bd19656bbc..0000000000000000000000000000000000000000 Binary files a/doc/Themenvorschlag/data/images/Schatten2.png and /dev/null differ diff --git a/doc/Themenvorschlag/data/images/Streuung2.pdn b/doc/Themenvorschlag/data/images/Streuung2.pdn new file mode 100644 index 0000000000000000000000000000000000000000..6a582efe2975f40405871dd45390876a9e5bb53a Binary files /dev/null and b/doc/Themenvorschlag/data/images/Streuung2.pdn differ diff --git a/doc/Themenvorschlag/data/images/Streuung2.png b/doc/Themenvorschlag/data/images/Streuung2.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8a999003acad38d8fd3be5aaec76cfd8335807 Binary files /dev/null and b/doc/Themenvorschlag/data/images/Streuung2.png differ diff --git a/doc/Themenvorschlag/document.tex b/doc/Themenvorschlag/document.tex index 3efa4f2aa2b3a6bd963d6ac9db800613c275e765..04debf944c3f522c3c5bd265c29d8052f3677e96 100644 --- a/doc/Themenvorschlag/document.tex +++ b/doc/Themenvorschlag/document.tex @@ -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}