Hace como un mes, nos fuimos a dar la vuelta a Tequisquiapan, a unos 40 minutos de Queretaro. La idea era ir a volar en globo y despues viajar a Queretaro. No tenia idea de como era (me lo imaginaba como Tequesquitengo :p ), y me quede con ganas de volver por ahi del 29 de mayo (Feria Nacional del Queso y el Vino!!!).
Y bueno, aqui una foto del inicio del vuelo. Tengo mas, pero esas mejor las meto al flickr. Ese dia no estaba muy bueno porque la velocidad del viento era muy alta (ademas del peligro, el vuelo iba a durar muy poco). Al principio parecia que se iba a cebar, pero justo cuando desayunabamos, nos avisaron que se podia volar desde otro punto!
Nuestro vuelo duro como 40 minutos.. es diferente a aventarse de paracaidas, pero tambien vale la pena.
Este ejercicio fue para probar DRAs o delayed rib archives. Esto es, escribir una secuencia de ribs y leerla al momento de renderear y solamente cuando sea visible en la camara (es la diferencia entre 'delayed' e 'immediate'). Esto permite ahorrar memoria ram cuando tenemos muchos elementos (Los habia usado para algunos shots de Navidad S. A., pero esta fue mi primera vez con 3delight, ademas, esta ocasión si pude especificar que pasadas queria tener :p ).
Para este render, se usaron 180 ribs (que incluyen shaders con AOVs) integrados a la escena de maya con "cajas" donde se leen los archivos (3delight > Add Rib Archive).
Este nodo se puede duplicar y mover en la escena, lo que crea nuevas instancias del objeto que se esta leyendo. Pero que pasa si es un ciclo? Bueno, hice un pequeño mel que permite ciclar los archivos (solo duplica el Add Rib Archive el numero que quieras y selecciona todos los nodos antes de ejecutar el script):
global proc exp_delay(string $path_rib, int $maximo) { int $num; string $temporal; string $sse []= `ls -sl -dag`;
Ese codigo en el script editor se manda a llamar con: exp_delay("/mnt/projects/rib_arch/3delight/source/rib/rib_source", 180);
donde la primera cadena es la ruta a los archivos. No tiene extension ni tampoco el padding del numero (el script considera algo como source.0000.rib). El numero '180' es el numero de ribs que tenemos (181, si contamos el 0000). Y 'enter'.
Este script crea expresiones que no estan unidas al nodo en si, pero permite asignar una nueva cadena de texto cada vez que avanzamos en el tiempo. Esto tiene la ventaja de que no tocamos el pre-MEL en el renderpass. Ademas, puede haber un gran numero de nodos y podemos asignar nuevas expresiones cada vez (eliminando las anteriores, claro).
Lo que estoy pensando ahora es que los nodos donde leemos los ribs deben estar fuera de grupos (en la "raiz" del outliner), porque el script no considera grupos (creo que debe ser`ls -l -sl -dag`).
El modelo es de Juan Carlos Lepe. Animación y rig de Fernando Najera (gracias chicos, sin ustedes nada de esto seria posible!!).
Cuando instalé la version 8.0.1 de 3delight, pense en como implementar código que ya existia en nodos que pudieran conectarse cuando fueran necesarios, que permitieran entradas o salidas con nodos de maya (en el hypershade) y sobre todo que permitieran definir AOVs (render passes). Primero pense en compilar archivos .sl y quedarme con .sdl que tuviera las pasadas mas comunes: constant color, diffuse, specular, reflection, occlusion, subsurface scattering, normals, depth y un par de mattes. Con cada variación en cada pasada; el código creció. Utilizando headers y separando secciones se tiene organización, pero no es posible conectar un "file node" a los sdls.
La respuesta estaba en el nodo rendermanCode. Aqui se pueden definir variables (shading parameters) y el código que utiliza esas variables (shading code). También se pueden definir variables de salida que se conectan a otros nodos usando el hypershade y también variables que podemos usar como AOVs. Asi descartartamos fragmentos cuando no son necesarios.
Con la versión 8.0.1, tenia un problema con la pasada de environment reflection y subsurface: un poco del reflejo se sumaba al subsurface. Al parecer entre esa version y la que estoy usando ahora (8.0.39), se corrigió ese "detalle" y las pasadas ya no tienen mas errores.
Wednesday, February 18, 2009
Estos dias con la depurada de archivos en el servidor (al menos la basura que yo genero), me encontre con mis primeros renders de fur:
resolución alta (HD)
dof
motion blur
densidad
deepshadows
dynamic hair
Asi que recorte un pedacito de un cuadro y aqui esta. Es la primer revision del srf_fur y no habia modificado algunas variables (como surfacenormal o basecolor). Tampoco tenian atenuación.
Estos dias me reencontre con renderman. No con prman, sino con 3delight (ya saben, el de la primera licencia gratuita en http://www.3delight.com).
El reto fue fur (mas bien lo que me obligo a retomarlo). Y como la ultima vez que lo intente no me fue nada bien (mental ray + maya fur + hair), pense que esta vez tambien iba a chaquetear!
La verdad, la forma en que manejan los modulos (con el plugin para maya 2009 - 3dfm), es un poco mas complicado que con prman. Al final, entendiendo como funcionan los Attributes (geo, light, etc etc) y los renderpasses (con sus respectivos render layers) y shaderdl y los parametros para render desde terminal, ya es mas facil.
Creo que mas adelante podre postear un par de cosas, pero por lo pronto un pequeño fragmento de un still (es lo que puedo mostrarles).
En la imagen tenemos motion blur + depth of field y es bastante eficiente. La resolucion es HD720. Aunque es posible renderear pasadas, no es lo recomendable.
Han sido dias muy largos. Desde la ultima entrada del blog, hasta hoy han sucedido muchas cosas. Entre las mas importantes esta que ya no trabajamos donde soliamos trabajar.
Ahora estamos (jc y yo) en un sitio nuevo, llamado the FX shop: http://www.thefxshop.com y nos dedicamos a hacer efectos visuales.
Por el momento no puedo mostrarles nada, pero espero que pronto cambie un poco eso.. la realidad es que mucho del material es HD, y no encuentro donde subirlo -__-
En fin, para que esto no solo sea rollo, les digo que maya 2008 ext 2 patch 1 si puede escribir framebuffers. Hay algo de codigo en http://www.writingshaders.com/framebuffers.html y algo de instrucciones en http://www.lamrug.org/forum. Lo que llevo hasta ahora es un geometry shader que escribe indices numericos (tambien basado en codigo fuente de lamrug.org), pero sin utilizar el mifb_make_10...
EDIT: Elimine el codigo. Saben donde encontrarlo.
Si tienen alguna duda, solo escribanme a eddgarpv.. al hotmail.
Ya pueden escribir multiples canales o framebuffers a una misma imagen exr. La desventaja es que es sin compresion y para mas de 10 pases en HD es posible que cada imagen sobrepase de 200megas. Eso se soluciona con recomprimir con nuke o shake 4.1, para que escriba los mismos canales pero con compresion (zip, por ejemplo) y cada imagen sera de menos de 2megas.
Parece que para poder especificar la compresion en el geometry shader, es necesario hacerlo a traves del API de C++ :/
Este es un tutorial que muestra algunos usos de los nuevos shaders incluidos en maya 2008 (y max 2008). Son parte de la liberia Production y que por cierto, no son accesibles directamente desde Maya...
El pdf pueden descargarlo de: DEAD LINK :( espero que les agrade.
Ahh.. por cierto, hice una animacion muy sencilla: