Tuesday, March 31, 2009

point cloud based GI


Hace dias trataba de hablar de los "point clouds" y occlusion, pero no tenia un ejemplo sencillo a la mano. Cuando tuve el ejemplo sencillo, no encontre mucha diferencia entre usar raytraced occlusion y el point cloud based occlusion (incluso usando displacement).

Al final, decidi que era un mejor ejercicio usar GI. Primero, el ejemplo es algo similar al cornell box con su point light y sombras.

Luego, hay que escribir el ptc (point cloud) al disco. Para esto, estoy usando un atmosphere shader. Esto permite iluminar y crear los shaders de manera independiente y sin considerar integrar o modificar la parte de escritura en los shaders mismos (lo dejamos al final). Por default, lo que esta fuera de la vista de la camara no entra al ptc, por eso es necesario definir un par de opciones en el pre-World mel del render pass (y habilitar "Standard Atmosphere"):

RiAttribute -n "cull" -p "hidden" "integer" "0" -p "backfacing" "integer" "0";
RiAttribute -n "dice" -p "rasterorient" "integer" "0";


Con esto, obtenemos un ptc de la escena. Aqui entra Ci (o surface color) y algunas otras variables. Una vez que tenemos el ptc, es necesario definir como se va a utilizar: como surface shader? atmosphere shader?

En mi caso, yo preferí light shader. De esta forma es sencillo utilizar el resultado, sumarlo a la iluminación actual y bakear de nuevo.


Primero, el render usando un ambient light con indirect diffuse en base al ptc se ve como en la imagen de la derecha.

En esta imagen, tenemos la parte de luz indirecta, pero abajo de la esfera hay una "fuga", probablemente porque en el shader de esfera y caja no tengo occlusion. Al no considerarse al momento de escribir el ptc, el calculo de gi bla bla... en fin, la imagen se ve bien, pero tiene un no se que que me ladra. Le falta "textura de occlusion indirecta" ;)

Para no modificar mis luces ni shaders, puedo bakear esta solución y re-renderear. Para esto, se usa el render pass donde tenemos los atributos de "dicing", "backface culling" y "hidden" en 0.

También asignamos de nuevo el atmosphere shader que escribe el archivo. Obviamente usamos un nuevo nombre para escribir el ptc, de lo contrario, el shader asignado al ambient light (que calcula gi) tratara de leer de un archivo que esta siendo abierto para escribir lo que esta leyendo.

Una vez listo, desconectamos el atmosphere shader y leemos en el ambien light el ptc recien escrito.

El render ya incluye un rebote de luz mas (secondary diffuse bounces).

El proceso se puede convertir en: aplique, enjuague, repita.
Y depende del look que se este buscando, pero por ahi del 4o rebote ya no es significativo el cambio (al menos en este ejemplo).

Finalmente, esta es la imagen y ptc del 4o rebote. El shading rate es de 1, con una resolucion de 640x480. El render time es de 77 segundos. Ahora, el reto es probar el mismo workflow con una secuencia, donde intervenga subdivs, motion blur y tal vez mas elementos.

Pueden encontrar el código y explicación aqui:
http://www.3delight.com/en/modules/PunBB/viewtopic.php?id=1365


Wednesday, March 18, 2009

/sbin/init 6


Please stand by while rebooting the system...

Friday, March 13, 2009

SCARRED


Hi, I'm jc and this is my scarred story...

Bueno, esto es 8 dias después de la extracción. La herida no es tan pequeña como se hubiera esperado, pero con un poco de baba de caracol todo se soluciona. La hinchazón todavia es notoria, pero según el médico, es normal. Al parecer el higroma se había extendido un poco.

Aún existe un 5% de probabilidades de reincidencia ^_^

Tuesday, March 10, 2009

cel shading

3delight permite renderear outlines de cualquier variable, que es muy util cuando se esta trabajando toon rendering o ilustración. Esta opción esta disponible en "Secondary displays", en el checkbox "Edge detection" y pueden utilizarse mas de una variable en el mismo AOV (separados por comas: Ci,Oi,z).


Una vez que se habilita esa salida, es necesario definir un "secondary display" (en Add) y definir un path para la imagen y un nombre de variable de salida. Por default, el edge detection se realiza sobre Ci (que es el color de la superficie) y se basa en la iluminación que tenemos en la escena. Es decir, si tenemos un point light, el edge detection se basa en las zonas iluminadas por el point light (y el shader que por default es un lambert). Para obtener una salida independiente, podemos definir que la variable a detectar sea diferente a Ci (puede ser P, Oi, z, N) y que el "Display AOV" sea un componente que este presente en el calculo pero que no tenga ningun valor (en mi caso, estoy usando specular para obtener N en fondo negro). Si se utiliza el default, se considera rgba (el resultado del edge detect se suma a rgba).

Utilizando estas salidas, una pasada de normales y nuke, podemos convertir un aburrido espacio inutilizado en un refrescante espacio de expresión artística!



Monday, March 2, 2009

sprites & opacityPP - secuencia


Esta es la secuencia de los sprites. La mitad del cuadro es del blast. Como pueden ver, el exporter de 3delight no soporta aun el "camera shake" ;)

El render tomo cerca de 70 horas. Tenemos 1600 archivos de la simulación de Maya con un warp a 300 frames (para tener motion blur con un multiples exposiciones, que en el video de youtube no van a poder observar), dof, mb y un shading rate muy bajo (creo que lo ideal es renderear los sprites en una capa con un shading rate alto) y algunas pasadas.

Hay un pop como a la mitad del video. No he revisado los renders de pasadas, pero creo que es el diffuse cuando hay cambio en el ángulo entre el sprite, el spotLight y la camara.




Sunday, March 1, 2009

MaidenFest


Anoche fue el espectacular regreso de Iron Maiden a México!
Llegamos al foro Sol justo a tiempo para ver y escuchar a Morbid Angel, que la neta, si rockean. Ademas la gente que estaba adelante estaba muy prendida, asi que se presto para echar desmadre :)

Después de solamente 5 canciones, salió Atreyu. No se a que idiota se le ocurrió cambiar a Morbid Angel por estos tios. No dejamos de enseñarles el dedo grosero y aventarles basura (cajas de pizza, hielo, vasos de chela, refresco..). Al final, el vocalista dijo "Mexico, you're fucking awesome, 'specially the fat girl on the front".

Cuando empezaron a preparar el escenario para Carcass, nos metimos de nuevo entre la gente (tambien con Morbid nos fuimos al frente ^_^). Esta vez senti mas pesado el ambiente, pero valió la pena. Ya veremos de nuevo a mr. Amott y Arlendsson cuando llegue el dia de ver Arch Enemy!.

Para Iron Maiden ya nos fuimos un poquito mas atras. El concierto estuvo de juevos!! (como diria Eddie Vedder :p ).