Skip to content

Commit

Permalink
docs
Browse files Browse the repository at this point in the history
  • Loading branch information
101001000 committed Aug 30, 2021
1 parent 046c75c commit 37c7916
Show file tree
Hide file tree
Showing 24 changed files with 1,538 additions and 113 deletions.
35 changes: 35 additions & 0 deletions docs/memoria/Chapters/Chapter01.tex
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,38 @@ \section{Objetivos}
La implementación cuenta con características cercanas al estado del arte: es capaz de renderizar escenas del orden de millones de triángulos en tiempos razonables; usa un modelo de sombreado realista desarrollado por Disney; permite el uso de mapas de textura y además funciona en GPU.

Un aspecto importante en cuanto a la implementación es que se hace uso del menor número de librerías posibles, con el fin de indagar a fondo en la arquitectura de un motor de renderizado de Path Tracing de manera íntegra. Así pues se desmitifica el trabajo que normalmente se delega a las librerías gráficas, y se expondrá de manera clara el funcionamiento de cada pieza de un motor de renderizado de Path Tracing en GPU.


\section{Plan de trabajo}

\subsection{Trabajo previo}

Este motor gráfico tiene sus raices en un trabajo final previo realizado en la asignatura "Programación de GPUs y aceleradores". En este trabajo previo se hizo una prueba de concepto de un motor "Path tracing" extremadamente sencillo

El objetivo de este trabajo ha sido implementar el mayor número de características de un motor gráfico de producción y analizarlas una a una. Es por ello que la planificación ha carecido de una estructura formal, y ha sido remodelada constantemente a partir de los logros y el progreso obtenido hasta la fecha.

A continuación se muestra una línea del tiempo con los hitos logrados:


%@todo add hyperlinking

\begin{table}[h]
\renewcommand\arraystretch{1.4}
\captionsetup{singlelinecheck=false, font=blue, labelfont=sc, labelsep=quad}
\caption{Timeline}\vskip -1.5ex
\begin{tabular}{@{\,}r <{\hskip 2pt} !{\foo} >{\raggedright\arraybackslash}p{5cm}}
\toprule
\addlinespace[1.5ex]

Noviembre 2020 & Incialización de proyecto, prototipo inicial de trazado de rayos en CUDA y visualización con SFML, implementación de texturas\\
Diciembre 2020 & Mapeado UV, Disney BRDF, carga de modelos .obj\\
Enero 2021 & BVH construcción y recorrido\\
Abril 2021 & SAH y comienzo de escritura de la memoria, visualizador BRDF\\
Febrero 2021 & HDRI y NEE\\
Marzo 2021 & Muestreo por importancia de HDRI\\
Mayo 2021 & Funciones de benchmarking\\
Julio 2021 & Port One Api\\
Agosto 2021 & Implementación de mapas de normales, BOKEH\\

\end{tabular}
\end{table}
146 changes: 105 additions & 41 deletions docs/memoria/Chapters/Chapter03.tex

Large diffs are not rendered by default.

10 changes: 7 additions & 3 deletions docs/memoria/Chapters/Chapter04.tex
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
\chapter{Optimizaciones estructurales}

Un algoritmo con buenos resultados visuales viene con unos costes computacionales asociados. A parte de buscar fotorrealismo y fidelidad gráfica, un motor de renderizado gráfico requiere de mejoras y optimizaciones para alcanzar tiempos competentes.

La importancia de las optimizaciones implementadas en este capítulo no solo se limita a mejorar la productividad de los artistas con mejoras de rendimiento, si no que hace posible la visualización real de escenas que tardarían tiempos del orden de miles de años, reduciendo el enfoque de fuerza bruta a uno más sofisticado.

\section{Muestreo por importancia}
\label{sec:mi}

El simple hecho de simular los rebotes de los fotones no es eficiente. Se puede buscar una manera para que cada rayo cargue con información "más útil". Este procedimiento se denomina "Muestreo por importancia" y es actualmente una línea de investigación en constante desarrollo puesto que como se verá a continuación, permite mejoras muy significativas en cuanto al tiempo de convergencia de la imagen final.
El simple hecho de simular los caminos de los fotones no es eficiente. Se puede buscar una manera para que cada rayo cargue con información "más útil". Este procedimiento se denomina "Muestreo por importancia" y es actualmente una línea de investigación en constante desarrollo ya que como se verá a continuación, permite mejoras muy significativas en cuanto al tiempo de convergencia de la imagen final.

Así pues este término es bastante general. Esta implementación consta de tres muestreos por importancia distintos: Muestreo por importancia de BRDF, Estimación de Evento Próximo (NEE) y Muestreo por importancia del entorno.
Así pues este término es bastante general. Esta implementación consta de tres muestreos por importancia distintos: Muestreo por importancia de BRDF, Estimación de Evento Próximo (NEE) y Muestreo por importancia del mapa de entorno.

Algo que todos los muestreos por importancia tienen en común es su funcionamiento elemental: Emitir más rayos en las direcciones que más interesan y a su vez, dividir el resultado por la función de distribución de probabilidad (PDF en adelante). Esto quiere decir que si vamos a emitir el doble de rayos en una dirección que en otra, será necesario dividir este resultado por dos, puesto que se ha recabado el doble de radiación lumínica. Así pues, también se tendrá que multiplicar el resultado menos muestreado por el doble, ya que al muestrearse la mitad, se obtiene la mitad de radiación.
Algo que todas las técninas de muestreo por importancia tienen en común es su funcionamiento primario: Emitir más rayos en las direcciones que más interesan y a su vez, dividir el resultado por la función de distribución de probabilidad (PDF en adelante). Esto quiere decir que si se emiten el doble de rayos en una dirección que en otra, será necesario dividir este resultado por dos, puesto que se ha recabado el doble de radiación lumínica. Así pues, también se tendrá que multiplicar el resultado menos muestreado por el doble, ya que al muestrearse la mitad, se obtiene la mitad de radiación.

En la implementación, todo muestreo consiste en una función que genera rayos aleatorios a aquellos lugares donde interesa más muestrear y la función de probabilidad de distribución apropiada derivada de la función de muestreo, que ha de devolver la probabilidad con la que se ha elegido ese rayo. Como se verá más adelante, no siempre es fácil derivar esta función de probabilidad cuando se cuenta con una función de muestreo compleja.

Expand Down
Binary file added docs/memoria/Images/smoothshading.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions docs/memoria/bib.tex
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
\begin{thebibliography}{9}


\bibitem{importancesamplingcourse}
askjdaisd
\\\texttt{http://www.igorsklyar.com/system/documents/papers/4/fiscourse.comp.pdf}

\bibitem{triintersection}
Lambert, Johann Heinrich. Photometria. Leipzig, 1760.
\\\texttt{https://cadxfem.org/inf/Fast\%20MinimumStorage\%20RayTriangle\%20Intersection.pdf}
Expand Down
Loading

0 comments on commit 37c7916

Please sign in to comment.