Skip to content

Jorgesolan/grafica

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Path Tracing y Photon Mapping en Haskell

Jorge Solán      Francisco Javier Pizarro

Introducción

Trabajo desarrollado en la asignatura de informática gráfica de cuarto de carrera del grado de Ingeniería Informática en la Universidad de Zaragoza-Unizar.

Características principales

El trabajo consiste en recrear escenas a partir de dos renders diferentes, Photon Mapping y Path Tracing.

La escena se define en el fichero correspondiente "Escena.hs", primero se define todo lo relacionado a la imágen final, número de fotones lanzados si estamos en photon mapping, intensisdad de la luz, píxeles y aspect ratio de la imagen final, además de las muestras por píxel y si se quiere realizar concurrente o distribuido, parámetros extra para la partición. Seguidamente, se pueden definir diferentes geometrias como esferas, planos, tríangulos o rectángulos, además de definir los puntos de luz y la cámara. Si se quiere utilizar mallas de triangulos con .obj es necesario indicarlo en el fichero "objs.hs".

Toda figura viene definida por sus puntos característicos, sus normales, tripleta de cómo se comporta con la luz (Difuso, Refractante o Especular), y se le puede indicar la textura que tenga el objeto, da igual el que sea.

Solo con esto ya se puede crear algunos renders simples, sin embargo este trabajo, además de la complicación de realizarlo en Haskell, se añadieron varios apartados adicionales, entre las más destacables entrarían las siguientes:

Brdf Phong con alpha modificable

Bump mapping a partir de una textura

Niebla homogénea con partículas modificables en color y cantidad


Todo lo relacionado al trabajo queda explicado en su totalidad en las memorias correspondietes a los dos renders ubicadas en este mismo proyecto.

Ejecución

Es necesario contar con las herramientas cabal, ghc, make, bash/shell, python (y para despliegues distribuidos ruby)

El primer paso es instalar las dependencias del proyecto haskell.

cabal install JuicyPixels

cabal install random

cabal install kdt

cabal install erf

cabal install binary

cabal install containers

cabal install dlist

Para ejecutar el proyecto en local lanzar el siguiente comando desde la carpeta raiz:make clean && make simulacion && cd ./tmp && ./simulacion && ./run.sh && cd .. && convert ./tmp/output.ppm a.bmp.

Los ficheros que se deberían modificar entre ejecuciones principalmente son /src/Escena.hs, para modificar los elementos(figuras básicas/luces) de la escena, así como sus propiedades(algunas propiedades deben ser modificadas en /tmp/run.sh), el fichero objs.hs cuenta con el listado de los elementos que se importan de archivos objs. Para cambiar el modo de funcionamiento de Path Tracing a Photon Mapping y viceversa modificar /etc/simulacionOrg.hs. Es posible modificar funciones en el interior de /src/PathTracer.hs y /src/PhotonMapper.hs, principalmente para añadir/quitar la niebla.

En caso de tener cualquier duda relativa a como se debe ejecutar esto, no duden en contactarnos(dado que no es simplemente darle a un botón y puede resultar complejo).

La documentación se genera mediante el comando:

haddock -o docs/ --quickjump --html --hyperlinked-source src/{Elem3D,Escena,Figuras,Files,Funciones,KdT,PathTracer,PhotonMap,simulacion,Tone_map}.hs