martes, 13 de octubre de 2015

Rendering Avanzado: El Viaje Alucinante

Para la asignatura de Rendering Avanzado, mi compañera Jessica Mejías y yo hicimos dos prácticas y un trabajo de investigación.

La primera práctica consistía en hacer un recorrido a lo largo de una vena en OpenGL y que en algún momento se produjera una transformación. Nosotras hicimos nuestra transformación de modo que la vena se fuera dañando poco a poco y que luego, para reparar la vena con algún tipo de medicamento, tuviera lugar una criogenización.

Nuestra vena tiene forma de corazón, y consiste en un cilindro generado proceduralmente siguiendo un conjunto de curvas de Bézier enlazadas que dan forma a la vena, y por cuyos puntos pasa la cámara.


Como comenté antes, en primer lugar la vena se va dañando poco a poco, como si sufriera un deterioro fibrótico:


Luego hay un instante de ruido, supuestamente en el momento de la toma del medicamento, y entonces empieza la criogenización, muy poco a poco, hasta terminar completamente congelada. Los glóbulos blancos y rojos que están en posiciones aleatorias dentro de la vena también sufren la transformación.

Hemos utilizado ruido de Perlin seamless (sin costuras) tanto en el shader de fragmentos como en el de vértices de la vena, para dar el color y también las protuberancias de las paredes de la vena, a modo de displacement mapping. Para las transformaciones, creamos un shader personalizado que utiliza un mapa celular modificado. Todos los shaders los hemos programado usando GLSL.

El usuario puede controlar la cámara desde el teclado (modo automático o manual, movimiento, rotación, zoom), además de elegir el modo de renderizado (polígonos rellenos, modo alámbrico o puntos) y si el movimiento es lineal o corresponde a los latidos del corazón.



En el vídeo el movimiento de la cámara a veces no parece del todo fluido debido a la calidad del vídeo, pero en nuestra práctica el movimiento sí es fluido, ya que se consigue interpolando entre los puntos de las curvas de Bézier.