sábado, 4 de octubre de 2014

Túnel wormhole: Coraline

Voy a pasar a comentar los 3 efectos que quería conseguir en el túnel. El primero es el de la película de Coraline. Me venía bien la propia forma conseguida en el túnel geométricamente. El primer paso era colorear el túnel y lo hice de forma procedural, mediante shaders.

Coraline

Para los profanos en informática gráfica: un shader es un pequeño programa que se ejecuta en tarjeta gráfica en una parte concreta del cauce de cálculos gráficos. Al ser la gráfica en realidad ciento de procesadores paralelos, cada uno tiene conocimiento de lo que esté manejando (su vértice, un fragmento a pintar...), pero no de los demás. Y podemos pasar una serie de parámetros desde el programa principal (cpu) al shader para que cambie su comportamiento. Acabo de resumir meses de estudios en un párrafo, pero espero que os hagáis una idea.

Túnel temet nosce

Quería que el túnel tuviera tonos azules, morados, violetas, como en la película. El pintado procedural se hace de la siguiente forma. Se asignan colores a una cierta distancia y se repiten. Por ejemplo azul en 0, morado en 100 y violeta en 200, así seguiríamos con azul en 300, morado en 400... Una operación módulo por centenas. E interpolaríamos entre los dos colores más cercanos según donde nos encontremos. Así pues el shader encargado de dar color a un vértice mira la profundidad de este (el túnel avanza por las z, así que la profundidad es directamente su coordenada z), por ejemplo 125. Así que el color tiene que estar entre morado y violeta, exactamente 75% morado al estar más cerca del 100 y 25% violeta. Después añadí ruido mediante textura para dar más granularidad al túnel, aunque no se consigue del todo ese efecto de piedra fluorescente que parece en el original.

Después quise añadir los haces de luz. En la película de Coraline el túnel parece emitir luz y tiene anillos de luz que van recorriendo el túnel. Trasteé con el tiempo de simulación dentro del shader, es decir pasar como parámetro de la cpu a la gráfica cuánto tiempo lleva corriendo el programa, cosa que Unity facilita; y con la distancia en coordenadas sin transformar y transformadas para intentar el efecto. Quería que los haces de luz fuera hacia el fondo y más rápido que la cámara, que nos fueran adelantando, pero no conseguí que quedasen equidistantes y efectivamente adelantasen a la cámara. Si conseguía que se movieran por el túnel pero no más rápido que la cámara. Así que les cambié en sentido y ahora van hacia la cámara, aunque bastante despacito, sí se aprecia que los haces de luz se mueven.

Lo que no me dio tiempo a hacer y sí me hubiera gustado es darle al túnel más volumen. Con mapas de normales o similares, y desplazar algo los vértices para que tuviera más relieve y los anillos del cilindro no fueran perfectos. Pero al no usar luces, sino que los materiales funcionan como si fueran emisivos era difícil de plantear y no he tenido tiempo. 

No hay comentarios :

Publicar un comentario