El proyecto ha sido realizado por Guillermo Enguita Lahoz y Jorge Grima Terrén e implementa dos algoritmos de renderización Path Tracing y Photon Mapping, así como una herramienta de Tone Mapping. Ambos algoritmos han sido implementados utilizando C++, sin utilizar librerías externas.
Para la compilación, es necesario el uso de la herramienta CMake, que generará tres ejecutables diferentes MAIN_PATH_TRACER, MAIN_PHOTON_MAPPER y TONE_MAPPER. Los ejecutables del Path Tracer y el Photon Mapper se deberán invocar desde el directorio raíz del proyecto.
cmake CMakeLists.txt
make
Para renderizar imágenes con el Path Tracer implementado, se debe invocar el ejecutable con los siguientes parámetros:
./MAIN_PATH_TRACER <altura> <aspect ratio (16:9) (4:5) (...)> <apertura>
<paths por pixel> <nº de workers> [ejemplo_completo | luz_puntual | luz_area]
Un ejemplo de invocación, que generará una escena con esferas de distintos materiales dentro de una Cornell Box, sería el siguiente:
./MAIN_PATH_TRACER 1080 16:9 0 100 10 luz_puntual
El resultado será una imagen en resolución 1080p, renderizada con 20000 random walks, renderizada con 100 paths por píxel, utilizando 10 hilos.
Para renderizar la misma escena, pero utilizando luces de área, invocar con:
./MAIN_PATH_TRACER 1080 16:9 0 100 10 luz_area
Por último, se puede renderizar una escena más compleja, que utiliza modelos obj y texturas, invocando con:
./MAIN_PATH_TRACER 1080 16:9 0 100 10 ejemplo_completo
Las imagen resultante se almacenará en formato ppm en el directorio raíz del proyecto, con el nombre escena-pt.ppm.
Para renderizar imágenes con el Photon Mapper implementado, se debe invocar el ejecutable con los siguientes parámetros:
./MAIN_PHOTON_MAPPER <altura de la imagen> <aspect ratio (16:9) (4:5) (...)> <apertura>
<nº de random walks> <nº fotones estimacion> <nº fotones estimacion causticas>
<radio maximo> <radio maximo causticas> <max fotones> <paths por pixel> <nº workers>
[ejemplo_completo | luz_puntual]
Un ejemplo de invocación, que generará una escena con esferas de distintos materiales dentro de una Cornell Box, sería el siguiente:
./MAIN_PHOTON_MAPPER 1080 16:9 0 20000 100 100 0.5 0.5 100000 100 10 luz_puntual
El resultado será una imagen en resolución 1080p, renderizada con 20000 random walks, 100000 fotones en el photon map. Para las estimaciones de densidad en ambas mapas se utilizarán 100 fotones, a una distancia máxima de 0.5. La imagen será renderizada con 100 paths por píxel, utilizando 10 hilos.
Para renderizar un ejemplo más completo, con modelos obj y texturas, invocar con:
./MAIN_PHOTON_MAPPER 1080 16:9 0 20000 100 100 0.5 0.5 100000 100 10 ejemplo_completo
Las imagen resultante se almacenará en formato ppm en el directorio raíz del proyecto, con el nombre escena-pm.ppm.
Dentro del proyecto, se ofrece también una herramienta de Tone Mapping, que nos permitirá modificar las imágenes generadas en formato ppm, aplicando distintos filtros. Las opciones de invocación son las siguientes:
./TONE_MAPPER <imagen fuente> <imagen destino>
Con las siguientes opciones:
-c: aplicar un filtro Clamp a la imagen
-e: realizar una ecualización de la imagen
-ce <V>: aplica tanto una ecualización, utilizando <V> como máximo, como un Clamp
-g <gamma>: aplica un filtro Gamma a la imagen, con valor definido por <gamma>
-cg <V> <gamma>: aplica un Clamp con valor máximo <V> y un filtro Gamma
-r: aplica un filtro Reinhard a la imagen
-re: aplica un filtro Reinhard extendido



