En este vídeo os explico como utilizar Z-depth AOVs en Arnold, Nuke y Fusion para modificar el punto de atención de tus renders en base a la distancia de los sujetos con respecto a la cámara.

Los suscriptores de elephant vfx pro, podéis descargaros el material que utilizo durante la demo.

Una de las opciones más útiles existentes en Clarisse son los shading layers. Pueden utilizarse para diferentes tareas, y además combinarse entre si para crear sistemas de shading complejos. En esta ocasión vamos a ver como utilizar los shading layers para renderizar y crear variaciones de crowd (multitudes) de forma muy rápida, y sobre todo, muy sencilla. Necesitando apenas unos minutos para gestionar el shading y sus variaciones en centenares de personajes.

Este post viene acompañado de un video de alrededor de una hora para los suscriptores del programa elephant vfx pro.
Todos los suscriptores ya habéis recibido un email con toda la información.

  • Lo primero que he hecho, es crear un setup IBL, con un día más bien nublado sin dirección de luz muy marcada.
  • He importado el cache de animación con crowd en un context llamado geometry y también he creado un context donde crearé todos los shaders y texturas.
  • Como se puede observar en la imagen, los caches de animación están completamente desorganizados en la escena, tal cual vienen del paquete de simulación. Gracias a los shading layers podremos asignar fácilmente los correspondientes shaders y texturas, también variaciones de los mismos.
  • Clarisse nos permite asignar shading layers bien por nomenclatura exacta de los assets que van a recibir el shader o bien por localización de los mismos. Por ello, también he creado algunos context adicionales, para explorar ambas metodologías.
  • Gracias a una estructura de shading layers muy simple y a unas reglas básicas, tanto de nomenclatura como de localización, con apenas una docena de shaders podemos renderizar un sistema de crowd complejo en apenas unos minutos de trabajo.
  • En el caso de querer ver en viewport el comportamiento de un shading layer específico, basta con seleccionar el modo previz, apuntar al context donde tenemos los crowd y seleccionar el shading layer.
  • Finalmente subimos el sampling en el raytracer para renderizar la escena con calidad final.

En el siguiente video disponible para suscriptores del programa elephant vfx pro, podéis ver todo el proceso detallado y con explicaciones adicionales, duración alrededor de una hora.

El otro día un alumno del curso "Técnicas guerrilla para la creación de planos VFX" me escribió un email preguntándome si Arnold no tenía AOVs para RAW lighting y albedo, ya que anteriormente trabajaba con otros motores de render que si disponían de los mencionados AOVs.

La respuesta es si y no. Es decir, por defecto si miramos la lista de AOVs de Arnold, no veremos ninguno llamado RAW lighting o albedo. Pero si, podemos fácilmente crearlos, os explico un par de soluciones.

  • En los AOVs de Arnold, como veis en la imagen los AiStandard no disponen de AOVs para RAW lighting o albedo.
  • La solución más sencilla es utilizar los AlShaders. Que como podéis comprobar, si que incluyen AOVs tanto para RAW lighting como albedo. Solucionado.
  • Supongamos que tenemos que utilizar AiStandard, aun así, podemos controlar de forma individual este tipo de información. Lo que necesitamos hacer es renderizar los AOVs que comúnmente renderizamos, dependiendo de las necesidades de cada uno, pero generalmente seran AOVs primarios y AOVs tecnicos.
  • También necesitamos hacer un albedo a mano, es decir, sustituyendo todos los shaders AiStandard de la escena por Surface shaders de Maya, que como sabéis, no les afecta la iluminación. En una escena muy compleja, esta tarea puede ser tediosa, pero raramente necesitaremos el albedo de toda la escena, solo de algunos hero assets. Además, esta tarea puede ser automatizada mediante scripting. ¿Algún voluntario?
  • Una vez en Nuke, voy a importar el beauty y el albedo pass.
  • Si dividimos uno por el otro obtenemos el RAW lighting. Con lo que podemos manipular la iluminación sin afectar a el color.
  • También podremos manipular el color independientemente de la iluminación. En este caso estoy tocando el color utilizando un color correction y clonando parte de la textura utilizando un roto paint.
  • Vuelvo a juntar los dos componentes, luz y color utilizando un multiply.
  • Si no hubiera realizado ningún ajuste a la iluminación o al color, esta operación debería de darnos exactamente el mismo resultado del beauty.
  • Finalmente como tenia tambien la informacion de sombras almacenadas en el alpha, provenientes de un shadow catcher, voy a ponerle un suelo a la imagen :)

Llego tarde, pero más vale tarde que nunca. Aunque ya hace tiempo que estoy interesado en VR (realidad virtual) y AR (realidad aumentada) apenas he tenido tiempo de estudiar al respecto y realizar pruebas. Hasta el momento he estado más interesado en capturar live action para VR que en generar contenido 3D, aunque ahora también estoy empezando a estudiar al respecto.

Hace un par de días tuve la oportunidad de probar el HTC Vive durante unas cuantas horas y definitivamente, poco a poco iré realizando más pruebas relacionadas con realidad virtual, al tiempo que voy estudiando la materia. Me interesa especialmente la evolución que sufrirá la narrativa, y los cambios que veremos en el lenguaje cinematográfico tal cual lo conocemos hoy.

Probando el HTC Vive.

Probando el HTC Vive.

Como primer ejercicio tanto de captura como de generación de contenido 3D, he realizado una prueba muy sencilla, pero que me sirve como primer contacto para renderizar imágenes estereoscópicas mediante estereográfica y probarlas utilizando el headset más simple y barato del mercado, Google Cardboard y UMI 3D. (más info abajo).

Antes de explicar la sencillísima forma de renderizar este tipo de imágenes, vamos a explicar un poco del contexto necesario para entender de forma muy básica algunos principio de VR.

Existen dos tipo de sistemas de realidad virtual. Aquellos en los que podemos rotar la cabeza alrededor de un mundo virtual, y aquellos en los que además de rotar, también podemos trasladarnos por el espacio, incluso interactuar con el. En el caso de las Google Cardboard y otros headsets para smartphones, solo podemos rotar la cabeza para inspeccionar alrededor del entorno. Para ello, nos servimos del giroscopio y del acelerómetro que incorporan los teléfonos hoy en día.

Hoy por hoy utilizamos dos tipos de formatos de imagen. Cuando hablamos de contenido pre-renderizado. Por un lado tenemos las imágenes lat-long, o también llamadas equirectangular, y por otro lado las imágenes cúbicas. Las dos se mapean de forma esférica para crear un mundo virtual. Básicamente necesitaremos generar dos imágenes esféricas, una para cada ojo.

Las imágenes lat-long son geniales, porque podemos ver todo el mundo en un solo golpe de vista. El problema que acarrean, es que el 66% de la imagen corresponde a los polos de la esfera virtual donde se mapean, y en esos polos hay demasiada distorsión.

Proyeccion lat-long.

Las imágenes cúbicas para este tipo de contenido son quizás más efectivas que las lat-long, ya que las imágenes se mapean virtualmente en el interior de un cubo, de tal forma que los polos estarán proyectados en dos caras del cubo, lo que corresponde a un 33% del total de la imagen. Esto significa menos distorsión cuando se convierte a espacio esférico.

Proyección cúbica.

Estereografía. Es el acto de proporcionar dos imágenes desde dos cámaras distintas. Entre cada una de las dos cámaras existe un desfase que representa la distancia entre un ojo y el otro. En el caso de cine stereo, esto se realiza renderizando una imagen para el ojo izquierdo y otra para el derecho, y ambas se proyectan en una pantalla plana. 
En el caso de VR, necesitamos renderizar no solo izquierda y derecha, si no también frontal y trasera, siempre manteniendo el mismo desfase entre cámaras, para así poder rotar en todas direcciones.

Por supuesto, hay mucha teoría y conceptos básicos que necesitamos conocer a la hora de trabajar con VR, pero para este simple ejercicio, creo que este es contexto suficiente.

Trabajando en software 3D

  • En esta ocasión, voy a combinar material rodado con material generado mediante VFX.
  • Ya tendremos tiempo en otra ocasión para hablar sobre sistemas y metodologías de captura de fotografía y video. Hoy nos basta con saber que he capturado una imagen panorámica utilizando un rig Nodal Ninja y un fisheye lens, montado sobre una Canon 5 Mark III. La resolución capturada es de alrededor de 12k
  • Con esa imagen puedo fácilmente crearme un mundo virtual fotorrealista, ya que está basado en fotografías. Como este es un ejemplo sencillo, no quiero perder tiempo en crearme un mundo virtual por completo empezando desde cero. Además, lo que más me interesa en VR es precisamente combinar elementos reales con elementos virtuales.

Tate Modern, Londres.

  • Esta imagen de arriba es el panorama que he creado a partir de varias fotografías realizadas en Tate Modern, aquí en Londres. Puedes descargarte este panorama y otros completamente gratuitos aquí. Además, son imágenes HDRI, con lo que podré utilizar el mismo mapa para iluminar mi escena, al menos en parte.
  • Como el mapa panorámico es 360 x 180 puedo cubrir todo el campo de visión para posteriormente rotar mi cabeza con el headset de VR y mirar en cualquier dirección.
  • El siguiente paso es crear los elementos virtuales de mi escena. En este ejercicio simplemente voy a posicionar un robot en el centro de la escena y un par de esferas.
  • Lo ideal es colocar la cámara virtual en aquella posición del entorno donde quieres que los espectadores estén colocados posteriormente en la experiencia de realidad virtual. Recuerda que en este ejemplo utilizamos un headset de smartphone, con lo que el espectador no podrá caminar alrededor del entorno, solo mirar en todas direcciones.
  • Como podéis ver más abajo, la escena es muy simple. Utilizo el propio HDRI panorámico para iluminar. También estoy utilizando un par de softboxes como key lights.
  • Vray no renderiza el fondo en sus environment lights (how clever...). Así que como quiero ver el entorno en el render tengo que crear un environment override con la misma imagen panorámica que utilizo para iluminar, asegurándome que está en la misma orientación.
  • Tambien utilizo un shadow catcher para proyectar las sombras de mis assets 3D en el entorno live action.
  • En este punto, si realizo un render, deberia de obtener el resultado esperado. Simplemente trabajo mi escena como lo haria en cualquier otra ocasion. En este caso con una camara rectilinear y con resolucion HD.
  • El siguiente paso es añadir un Vray extra attribute para convertir nuestra cámara en una cámara estereoscópica. Por defecto dejamos la distancia entre ojos A 6.5cm que es más o menos lo normal en el ser humano. También dejamos desactivada la opción de especificar un punto de enfoque concreto, a menos que creativamente queramos dirigir la mirada del espectador a un lugar concreto del entorno.
  • Si volvemos a renderizar, obtendremos un render para cada ojo. Ya tenemos estereoscopía.
  • Ahora que ya tenemos un render para cada ojo, lo siguiente que tenemos que hacer es renderizarlo de forma esférica para poder mapearlo en un mundo virtual. En este caso vamos a utilizar una proyección cúbica, que como vimos anteriormente tiene menos distorsión.
  • Para ello basta con crear un override de camara tipo cube 6x1
  • Finalmente tenemos que indicar la resolución del render. Esto depende del dispositivo VR que vayas a utilizar, aplicación, soporte, etc. Los desarrolladores de hardware tienen documentación al respecto, recurre a ella. En este caso, para Google Cardboard y similares utilizamos una resolución de 9216x1536. 
  • Como buena práctica es recomendable desactivar el filtrado, para así no acentuar los posibles errores de stitching.
  • Si chequeamos el render en Nuke obtendremos algo similar a esta imagen.
  • Perfecto, ya solo nos queda publicar nuestra imagen para visualizarla en un dispositivo VR.
  • Estoy utilizando irisVR que permite subir las imágenes a través de una aplicación web, para posteriormente visualizarlas a través de su propia app (apple y android) utilizando tu VR headset.
  • Simplemente tienes que crearte una cuenta gratuita y subir las imágenes.
  • Una vez subidas las imagenes, apareceran en tu libreria.
  • Ya utilizando tu smartphone, ejecuta la app de irisVR llamada Scope y en tu libreria podras ver todas tus imagenes subidas a traves de la web.
  • Selecciona cualquier de ellas y la propia app te indicara que coloques tu movil en el VR headset.
  • En este caso estoy utilizando dos diferentes, Google Cardboard y UMI Box 3.
  • Y con esto ya tenemos nuestros renders 3D y fotografias listas para ver en un VR headset.
  • Asi es como se ven el el movil cuando no tenemos el headset puesto.
  • Obviamente esta experiencia dista mucho de interactuar con contenido digital o fotogrametría dentro de un headset como el HTC Vive, pero como primer ejercicio no estaámal. Seguiremos hablando de VR en el futuro a medida que aprendamos mas al respecto.

Durante varios años he utilizado RenderMan como motor de render primario en muchos de los estudios de efectos visuales en los que he trabajado. En diferentes tipos de proyectos, cine de animación, cine de imagen real, etc. Desde hace ya un buen tiempo, no utilizo RenderMan, ni en el trabajo ni en casa. Personalmente encuentro en Arnold Render la mejor solución disponible en el mercado para mis necesidades, y en el estudio para el que trabajo, donde las decisiones las toman otros, prácticamente tampoco utilizamos el render de Pixar, aunque de vez en cuando algún que otro plano acaba renderizandose con RenderMan.

Dicho todo esto, creo que es un buen momento para realizar una serie de posts sobre RenderMan, a modo de introducción o primer contacto con el software. Como sabéis, la tecnología REYES está siendo suplantada por RIS lo que imagino ayudará a RenderMan a posicionarse de nuevo en el mercado frente a competidores que utilizan similar tecnología desde hace ya varios años.

¿Qué hay de nuevo en la version 19?

Precisamente eso, la tecnología RIS. Es decir, y resumiendo mucho, un nuevo sistema de lighting y shading enfocado en global illumination. Además seguimos teniendo la posibilidad de utilizar REYES si así lo creemos conveniente.

Integrators y BxDF's, son los dos componentes más importantes en RIS, una arquitectura path-tracing (uni & bi-directional) donde global illumination funciona por defecto, sin necesidad de realizar ningún tipo de tarea compleja por parte del usuario. Tambien como novedad en esta version 19 de RenderMan, disponemos de un render interactivo,  que facilitara sobre todo, las tareas de look-development.

También en esta version 19 RenderMan dice adiós a RSL (RenderMan Shading Language) para utilizar BxDF's, un nuevo sistema de shading del que hablaremos más adelante.

Los integrators disponibles en RIS son Path Tracer y VCM. El primero especialmente efectivo para escenas exteriores, donde predomine la iluminación directa. El segundo recomendado por ejemplo en escenas interiores, o cualesquiera donde predomine la iluminación indirecta y existan muchos rebotes de luz. VCM es bi-directional path tracing.

Pronto hablaremos sobre integrators y sampling en RIS, de momento dejo unas sencillas imágenes utilizando Path Tracer y VCM con Max Samples 1 y Max Samples 128. Podéis apreciar a simple vista las diferencias entre integrators y sampling. También podéis ver a la derecha de las imágenes la influencia de ambos en los tiempos de render.

Estoy iluminando la escena sólamente con un HDRI proporcionado por Pixar en la web de RenderMan. Por fin, crear un setup de IBL se puede hacer en RenderMan con un solo click, como en el resto de raytracers.

En las imágenes de abajo utilizo Path Tracer como integrator.

En las siguientes imágenes utilizo VCM como integrator. Al ser una escena exterior iluminada principalmente con luz directa la diferencia no es muy aparente, aunque si se nota en los tiempos de render.

Nótese que si ponemos el parámetro Max Path Length a 1 sólo utilizaremos direct lighting.

Como siempre ha ocurrido en RenderMan, seguimos generando RIB files a la hora del render. Puedes acceder a ellos para analizar lo que ocurre en tu escena y hacer debugging.

Como comentaba al principio del post, seguimos teniendo la posibilidad de elegir REYES si así lo creyésemos conveniente.

También tenemos la opción de render incremental, que a mi particularmente me gusta tener siempre activada. De esta forma se generará una imágen de baja calidad y progresivamente se irá limpiando de ruido hasta realizar la imágen final. En las imágenes de abajo podemos ver el render standard vs incremental.

Standard.

Incremental.

Además del render offline, RIS tiene la opción de render interactivo (IPR), que nos permitirá modificar la escena al tiempo que se renderiza.

En el siguiente post, hablaremos sobre el nuevo sistema de shading en RIS.
Si tienes alguna pregunta o sugerencia, puedes escribirnos en el blog o en el foro.

Posted
AuthorXuan Prada
2 CommentsPost a comment

Ya hemos hablado en ocasiones anteriores sobre Isotropix Clarisse, si buscas por el tag "Clarisse", podrás ver todas las entradas al respecto.
En esta ocasión vamos a hablar de una tarea muy común cuando trabajamos con este software, que consiste en renderizar sistemas de partículas simuladas en otro software, en este caso Maya.

Como sabéis, Clarisse es un raytracer moderno que funciona de forma muy particular, una especia de scene assembler donde importamos todo el contenido realizado en un software 3D, y una vez en Clarisse nos beneficiamos de su tecnología para renderizar todos nuestros componentes 3D. Clarisse está siendo bastamente utilizado por estudios de efectos visuales digitales de la talla de Double Negative, ILM, Tippett Studio, etc. Iremos posteando más tutoriales, artículos y cursos en un futuro cercano.

En esta ocasión, vamos a ver como importar un sistema de partículas simulado en Maya para poder renderizarlo de forma muy rápida en Clarisse. Es un ejemplo extremadamente sencillo, pero espero ilustre la metodología de trabajo entre estos dos software.

  • Una vez tenemos el sistema de partículas terminado en Maya, basta con exportarlo via Alembic, el formato estándard para intercambio de archivos 3D en VFX.
  • Antes de continuar, es buena idea crear algún tipo de iluminación para poder ir viendo el restultado de nuestra escena 3D. En esta ocasión he creado un simple rig Image Baseg Lighting. En un post anterior explico como hacerlo de forma muy sencilla.
  • En la versión 2.0 de Clarisse existe una herramienta en el self lighting que permite crear un rig IBL con un solo click.
  • Para importar el archivo Alembic tenemos que ir a File -> Import -> Scene y seleccionar el archivo exportado previamente desde Maya.
  • Este archivo debería importarnos dos sistemas de partículas, un plano que sirve como suelo y la cámara para renderizar la escena.
  • Es buena idea crear diferentes context para mantener la escena organizada a medida que gana en complejidad.
  • En el context geo, he importado dos ficheros .obj uno llamado toy_man y otro toy_truck. Estas son las geometrías que voy a utilizar en mis dos sistemas de partículas.
  • También he movido el suelo a este context para tenerlo todo bien organizado.
  • Del mismo modo he movido los sistemas de partículas y la cámara a sus correspondientes context.
  • En el context materials, he creado dos standard shaders y dos file textures. Uno para cada geometría.
  • En el context particles, he creado un nuevo sistema scatterer y lo he renombrado a scatterer_typeA.
  • En el apartado geometry support del scatterer he añadido el sistema de particulas particles_typeA. Y en la sección geometry he añadido toy_man.obj
  • También estoy añadiendo algo de variación en la rotación de las partículas.
  • Si movemos el timeline podremos ver la animación de las partículas.
  • No olvides asignar los materiales creados anteriormente.
  • Para el segundo sistema de partículas, vamos a crear otro scatterer. Al igual que con el primer scatterer necesitamos indicar el geometry support y el geometry a utilizar, en este caso en toy_truck.obj
  • También estoy introduciendo variación en la rotación y posición.
  • Ya que estos modelos son bastante más grandes que los muñequitos, voy a introducir un offset en el sistema de partículas para que tengan menor presencia en pantalla.
  • Finalmente, vamos a añadir motion blur a la escena para lanzar el render final.
  • Vete a raytracer -> Motion Blur -> 3D Motion Blur.
  • En esta ocasión estoy renderizando sólamente 40 millones de polígonos y como podrás comprobar, los tiempos de render son fantásticos.