Principled shader (o Disney shader) en Blender Cycles

A partir de la versión 2.79 de Blender, próxima a lanzarse, o para quienes usen los daily builds disponibles desde builder.blender.org entre las mejoras y adiciones está el nuevo shader llamado Principled BSDF. Este nuevo shader está basado en el modelo de Disney también conocido como “PBR” shader, haciéndolo compatible con otros motores de render que usan el mismo modelo, lo que significa que traducir materiales entre un programa y otro es mucho más fácil.

Este “uber” shader, como se les llama normalmente incluye varias capas que permiten crear una amplia variedad de materiales. La base del shader es una mezcla controlable por el usuario entre diffuse, metal, subsurface scattering y transmisión. Y encima de esta, 3 capas reflectivas: specular, sheen y clearcoat.

A excepción de algunos materiales complejos como plásticos traslúcidos, piel avanzada, vidrios “rápidos” para arquitectura, entre otros, este nuevo shader permite la creación de casi cualquier material imaginable.

Ahora una explicación de sus características principales:

1b

Los inputs subrayados en la imagen superior son los que controlan las características principales del material.

Nota: si bien sólo hay 2 inputs de imagen (o de información RGB) en este shader, es posible conectar imágenes en blanco y negro y en escala de grises en cualquiera de los inputs. Estas imágenes serán interpretadas por blender como información numérica que va de 0 a 1.
0 = Negro
1 = Blanco

CAPA BASE:

Base color: Como su nombre lo indica, es el color del material. Diffuse, color y/o albedo maps van a este input.

Subsurface: Determina la si la luz pasa a través del objeto o no. (Piel, mármol, cera, etc.). El slider va de 0 a 1. Donde 0 equivale a un material difuso, mientras que 1 sería el equivalente a un material como la cera. Nota: la escala del objeto en la escena puede afectar el efecto del Subsurface scattering, es buena práctica trabajar en lo posible con medidas reales.

Metallic: Determina si el objeto es metálico. Igual que con la opción anterior, 0 equivale a difuso (o dielectrico, para ser más exactos) y 1 equivale a metálico. El shader permite que haya puntos intermedios entre 0 y 1, pero si se quiere realismo en el material, esta opción debería pensarse siempre en términos de 0 ó 1 exclusivamente (blanco o negro). Los mapas de “metalness” que se exportan desde programas como substance painter por ejemplo son siempre en blanco y negro, nunca vienen en escala de grises.

Transmission o Transparency: Determina la transparencia del material. 0 equivale a difuso, 1 equivale a transparente (o vidrio).

CAPAS REFLECTIVAS:

  1. Specular: Controla la capacidad para reflejar el ambiente que tiene el objeto. En un material de color negro, 1 equivale a un espejo, mientras que 0 significa que el objeto es 100% difuso.
  2. Sheen: Es un reflejo (difuso) que se genera en los bordes del objeto, muy útil para simular efectos como tela, terciopelo, o pelaje en animales.
  3. ClearCoat: Es un reflejo extra que se agrega encima del specular, común en los materiales de pintura de vehículos. Muy útil para materiales como madera pulida, mármol y cerámica. Como es una capa reflectiva adicional, tiene su propio normal input, para controlar de manera independiente.

2

COMPLEMENTARIOS:

Los demás inputs presentes en este shader son complementarios y permiten más control sobre los 7 mencionados hasta ahora:

Subsurface radius: permite controlar la cantidad de luz que pasa a través del objeto en cada canal RGB por separado; para un material como la piel por ejemplo, el efecto es más pronunciado en el canal R (rojo) que en G y B (verde y azul). Texturas y colores pueden conectarse en este input para controlar el efecto.

Subsurface color: es el color base que va a verse cuando la luz pase a través del objeto. Combinado con Subsurface radius permite controlar detalladamente el efecto de traslucidez deseado.

Specular tint: permite “manchar” el reflejo con el color del objeto en los bordes. En términos estrictos el reflejo de un material que no sea metal siempre va a ser blanco, así que este input no es físicamente correcto, sin embargo permite controlar el material desde un punto de vista más artístico.

Roughness: (Rugosidad o dureza) Controla la dureza del reflejo specular, simulando las imperfecciones microscópicas de la superficie. 0 es un reflejo perfecto, como espejo. 1 equivale a un reflejo difuso, como cartón.

Anisotropic: controla la cantidad de reflejo anisotrópico. El ejemplo más claro de este efecto es el metal cepillado. Suele usarse sólo en materiales metálicos (Metallic input=1).

Anisotropic rotation: controla la rotación del reflejo anisotrópico, va de 0 a 1.
0= 0°
1= 360°

Sheen tint: Igual que con el specular tint, este input permite que el reflejo tenga el color del objeto.

Clearcoat gloss: controla la dureza del reflejo clearcoat, y no es afectado por el input Roughness. 0 equivale a un reflejo difuso, 1 equivale a un reflejo perfecto.

IOR: Es el índice de refracción para la transmisión, es decir, tiene un efecto sobre el material sólo cuando el input transmission (transparente) está en 1. Si el IOR se deja en 1, el material será simplemente transparente, pero no habrá refracción de ningún tipo.
Para el agua el IOR es 1.33 aprox, para vidrio regular el IOR es de 1.5 aprox.
Aquí hay un recurso bastante útil para usar el índice de refracción correcto de acuerdo al material: https://pixelandpoly.com/ior.html

Normal: controla las normales del objeto.

Clearcoat Normal:  controla las normales del reflejo clearcoat. Si el input clearcoat está en 0 cualquier mapa conectado a clearcoat normal no tendrá ningún efecto sobre el material.

Tangent: controla la tangente para el reflejo anisotrópico.

Esta tabla ayuda a ejemplificar mejor lo que es posible con este nuevo shader:

20131117001743

Vamos a usar el modelo de Matt (Substance designer) para demostrar la forma de usar el shader, conectando todos los mapas exportados desde Substance Painter en sus respectivos inputs (color, metallic, roughness, normal), sin cambiar nada más en el shader:

Sample1b

Sample2
Mapa de color base
Sample3
Mapa metal
Sample4
Mapa de rugosidad (o dureza)
Sample5
Mapa normal

Comparación entre el render nativo de Substance Painter (IRay) y Blender (Cycles):

Comparacion

Hay diferencias obvias entre ambas imágenes, debido a varios factores como cámara, iluminación, render y efectos de post-producción; sin embargo es claro que el nuevo shader facilita muchísimo la transición de materiales (especialmente PBR) entre Blender y otros programas. No hay necesidad de usar complejos grupos de nodos y materiales personalizados ya que para la gran mayoría de materiales es posible usar sólo este shader. Cabe aclarar, como lo mencioné al principio, que habrá algunos materiales más complejos que necesiten soluciones personalizadas, ya sea para lograr efectos que no necesariamente son realistas, o para reducir tiempos de render en transparencias y/o vidrios por ejemplo.

El paso a seguir, luego de entender las características principales del Principled Shader, será la creación de diferentes tipos de materiales, pero eso será tema para otro artículo en el blog.
Por lo pronto, espero que este artículo sea lo suficientemente claro y sirva de referencia para la creación de materiales PBR simples. 🙂

 

Filmic en Blender y la linearidad de la luz

Este post es una traducción directa del artículo original publicado por Mike Pan en blog.thepixelary.com. Así que antes de empezar, muchas gracias a Mike por permitirme el uso de las imágenes y los ejemplos.

Gracias también a Troy Sobotka, el creador de filmic-blender, por tomarse el tiempo y el trabajo de explicar y aclarar el tema a través de twitter para entender mejor todo este asunto.

Desde la perspectiva de la física, la luz y el color son inseparables, no es posible tener uno sin el otro. En un pathtracer como Cycles, son básicamente la misma cosa. Así que estos términos se usarán para referirse a lo mismo de aquí en adelante.

Es un artículo bastante largo, así que tómense su tiempo para leerlo con comodidad y entender toda la teoría. Vamos a empezar con la escena clásica de Cornell Box con una fuente de luz:

1

Notarán que se han tomado varios puntos aleatorios en la imagen y se han incluido sus valores en RGB. Tenemos rojo, gris y blanco puro. Hasta ahora todo bien. Recuerden, esta escena está iluminada con una sola fuente de luz desde arriba. Vamos a ver qué pasa cuando doblamos la intensidad de 10 a 20.

2

Ok, la imagen en general es más brillante cómo es de esperarse. Pero si volvemos a revisar los puntos seleccionados vamos a ver que si bien la intensidad de la luz fue doblada, los valores en pixeles no son el doble de la imagen anterior…

Veamos las imágenes en comparación:

3

En esta imagen se ha agregado otra linea bajo la primera. Los valores que dicen “display” se refieren a la información que ya se presentó en las imágenes anteriores. Esos son los valores mapeados directamente desde la imagen JPEG. Los valores que dicen “scene” se refieren a la información real con la que estaba trabajando el motor de render – representan el nivel de energía o potencia de la luz en ese pixel específicamente. Como puede verse en la comparación, aunque los valores de display no se hayan doblado al aumentar la energía de la luz, los valores de scene si fueron duplicados como debería ser. (Algo muy importante para notar en el punto blanco, es que los valores no se ven reducidos a 1 en los valores de “scene”).

Entonces, si los valores de scene representan los valores reales de lo que está pasando en el mundo 3D, porqué la imagen final no nos muestra estos valores…? Y cómo es que el computador hace la transformación de valores de escena (scene) a valores de display?

Esto es lo que conocemos como Gamma. La historia y teoría de Gamma no son realmente importantes por el momento. Todo lo que deben saber es el valor mágico de 2.2. Este es el valor usado para transformar el color (o luz) de la escena en el color del display que vimos antes.

Para comprobarlo, es suficiente con aumentar cualquier valor de escena a  ½.2 y el resultado será el valor de display correspondiente.

Pero porqué es necesaria dicha transformación? Cómo se ve la escena si usamos el color “original” de la escena como lo entrega el render? Es decir, sin ninguna transformación?

4

No sólo es muy oscuro, es poco interesante y no se ve bien. Principalmente por el contraste tan marcado.

Este es el primer concepto que debe aprenderse y recordarse: Los valores de escena (scene-referred) y los valores de display (display-referred) son dos cosas completamente diferentes. De forma más simple, tenemos que aplicar una transformación gamma al espacio de color de la escena para conseguir una imagen que se vea bien en el espacio de color del display.

Así que ya sabemos cómo la transformación gamma es usada para convertir la información del render en una imagen que se ve bien, ahora el asunto es tratar de que se vea aún mejor. En vez de hacer una transformación gamma tradicional, usemos una tabla de consulta (look-up-table o lut) que está diseñada para darle a la imagen un look más cinemático, en este caso filmic-blender.

5

La diferencia entre la imagen original (izq) y la versión filmic (der) es bastante sutil. Noten que el punto más saturado (o hotspot) en la pared roja ha desaparecido, y en su lugar aparece un brillo mucho más natural. La marcada línea sobre saturada en la esfera naranja desaparece también, y el reflejo de la luz ya no se ve sobre-expuesto.

Esa es la principal ventaja de la configuración filmic-blender, es capaz de mostrar un rango dinámico mucho más amplio de la imagen, y eso permite que la imagen tenga un look mucho más refinado y natural en las zonas de alta exposición, especialmente en colores saturados.

En resumen: La configuración de Filmic (filmic-blender lut) es una poderosa herramienta que transforma los valores de escena lineales en valores de display no lineales.

Nota:
Esta transformación no es nada nuevo, quienes hayan trabajado haciendo corrección de color y/o colorización para video (o fotografía) sabrán que existen en internet muchos luts disponibles que hacen transformaciones similares; son como pequeños archivos prediseñados que aplican diferentes looks, dependiendo de lo que se quiera lograr con la imagen. Filmic resulta como una gran noticia, no porque solucione un problema o sea una nueva herramienta, sino porque mejora el flujo de trabajo, y permite que durante el proceso de iluminación se tomen decisiones más acertadas. Básicamente filmic realiza una administración de color más inteligente en Blender.

En general, con los programas de 3D se convirtió en regla común el uso de colores que no sean demasiado saturados o luces que no sean demasiado fuertes para evitar problemas incorregibles en post; y efectos como bloom, glow, saturación y exposición son agregados o corregidos en post-producción. Con Filmic, parte de estas “reglas” pueden ignorarse, para trabajar de una manera más realista, es decir, más cercana a la fotografía.


Pero filmic no hace magia por sí solo. Para sacar los mejores resultados de esta configuración, la escena debe ser iluminada de manera realista desde un principio. Cycles es un motor de render pathtracer, esto significa que para que funcione de manera correcta, los valores de luz deben ser realistas. El mundo real tiene un rango dinámico bastante amplio, algo a lo que no estamos acostumbrados en el mundo de CG.

Siempre que estén iluminando en Cycles, tengan en cuenta que el nivel de energía de una lámpara como el sol se mide en Watts/m2. Todas las otras luces usan Watts (fuente). Esto significa que para un transporte de luz más correcto, una bombilla casera común debería estar en el rango de 60-80, mientras que el sol debería tener un valor de 200-800 para luz de día, dependiendo del horario, latitud, y si está nublado o no.

6

Sin los valores lumínicos correctos, la escena no va a verse bien, incluso usando filmic. La luz no se propagará lo suficiente, y simplemente va a verse artificial. En la imagen de arriba, el sol tiene un valor de 50, no se usa un valor más alto tal vez por miedo a “estallar” los brillos y sobre-exponer la imagen; pero cuando el sol tiene un valor más realista (500) como se ve en la derecha, la distribución de la luz es mucho más realista y la imagen es más agradable.

Trabajando con filmic, hay que perder el miedo de sobre-exponer la imagen. El mundo real difícilmente puede acomodarse en el rango dinámico de una cámara. Y filmic es especialmente útil en casos con luces muy fuertes, porque es capaz de matizar las áreas con mayor exposición resultando en una imagen mucho más natural y agradable. Comparen ahora el cuarto renderizado con y sin el lut filmic, usando en ambas versiones los valores correctos de la luz:

7

Pueden verse claramente los brillos molestos y los puntos sobre saturados en la imagen de la izquierda. Esos problemas no aparecen en la imagen de la derecha. Filmic permite ir más lejos en términos de iluminación sin tener que preocuparse por problemas derivados de sobre-exposición en la imagen.

Ok, hasta el momento hemos aprendido que filmic es un lut, y que transforma los valores lineales de la escena en una hermosa imagen no lineal para display. Pero eso no significa que deba usarse siempre con todas las imágenes. A veces es necesario trabajar con imágenes que también sean lineales (es decir, para post-producción y compositing).


Vamos a hablar un poco más sobre la linearidad de la luz.

La luz es aditiva. Eso significa que debería ser posible separar la contribución de cada fuente de luz y luego sumarlas entre sí, para lograr exactamente la misma imagen que se tendría si se renderizaran todas las luces juntas. La habilidad para hacer esto, y hacerlo correcto, es crucial para hacer composición y efectos visuales donde la luz y el color son generalmente ajustados de maneras bastante dramáticas.

Entonces vamos a intentarlo con la escena de la sala. Se ha hecho un render de cada luz en una capa separada y se han guardado como archivos TIFF de 32bit:

8

Puede verse claramente que no funcionó. La combinación de las luces genera una imagen sobre-expuesta.

Aunque se guardaron las imagenes originales en 32bits para no recortar los valores de color, el formato tiff no guardó los valores de la escena. Cuando la imagen se guardó, pasó por el proceso de transformación a valores de display, así que los valores que estamos viendo no son lineales, como en la escena, son valores de display no lineales. Esto pasa siempre, independiente de que se esté usando filmic o no.

Este es un gran problema porque cualquier manipulación que se haga en la iluminación o en los colores, se está haciendo sobre una imagen que ya convirtió todos los valores de la escena a valores de display no lineales, los cuales no deberían modificarse más, al menos no significativamente. La forma correcta de mantener la información de la escena a la hora de hacer post-producción es exportar la imagen en un formato que también opere con valores de escena lineales como EXR.

Vamos a ensayar el mismo proceso con EXRs. (Como los archivos EXR son lineales, en el ejemplo han sido convertidos con filmic para display)

9

Ahora todo funciona exactamente como debería! Usando la información lineal para composición y post-producción es realmente la única forma de asegurar que la escena se mantiene físicamente correcta. La transformación final de valores de escena a valores de display debería hacerse únicamente cuando vamos a exportar la versión final de la imagen o animación.

En Blender, todos los formatos de imagen respetan la configuración de administración de color que se use (sRGB o Filmic por ejm). Excepto por EXR, que siempre va a guardar la imagen con los valores que tiene la escena, no con los valores que vemos en pantalla (o de display). Es decir, este es el único formato que guarda la imagen sin aplicar ninguna transformación.

En otros programas, (y con otros motores de render) funciona básicamente igual. EXR es el formato que va a mantener la info que sale de la escena intacta, con el fin de manipular posteriormente sin perder información de color o iluminación. Similar a lo que hacen las cámaras DSLR cuando se configuran para guardar las imágenes en RAW.

Como las luces son aditivas, y se ha renderizado cada luz de la escena como un EXR independiente, es posible jugar con el color y la contribución de cada luz en post-producción, lo que permite generar imágenes y looks muy diferentes sin necesidad de volver a renderizar.

10

Esta es la flexibilidad de trabajar directamente con la información de la escena, y no con la información de las imágenes que ya han sido transformadas.

Finalmente hemos llegado al final de este post. Se han hecho simplificaciones (teóricas y matemáticas) para hacerlo más digerible, y hay muchos otros asuntos importantes que no se han mencionado. Desde color, no se mencionó para nada el tema de wide gamut (o gama amplia de color) y los diferentes perfiles de color. Desde el punto de vista de creación, todavía hay que hablar de aspectos como oclusión ambiental (AO), clamping, y los diferentes nodos de compositing que funcionan únicamente en imágenes que ya han sido transformadas para display. (La versión corta es: no usarlos!!).

Ojalá haya sido un proceso educativo y entretenido. Quedamos pendientes de la segunda parte. 🙂

Sculptember

I decided to do the #sculptember challenge this year, unfortunately I wasn’t able to complete the whole month, but I’m posting what I did, along with a couple of timelapses. It was a pretty good exercise, I’ll try to do more of this 30 days challenges in the future.

In average I tried to spend no more than 1 hour, and no less than 30 min on each sculpt (not taking render into account of course). Some look more “finished” than others, because I had at least a 2D sketch or a ref image while sculpting. For the rest I always started from a sphere and sculpted whatever came into mind while playing with the model. That’s why they look more like sketches.

 

A cartoon dragon(ish) timelapse

dragon4

This is not exactly the best render I’ve done (or the best character either), but I’m posting it because it was a good exercise in recording my process. Also, it serves as an experiment to be able to do good and clear timelapses/tutorials in the future.

One really good thing I noticed while doing this, is that just by capturing the screen I’m forcing myself to keep focused on the subject and stop procrastinating, something I’m very good at :/ Maybe is because I don’t want to edit hours of my time wasting abilities online.

Also, seeing the process in video is a good way to see what could be improved (in the worklfow) and/or changed for the next project. Before doing this I recorded two more speedsculpts, and noticed how much time I loose just thinking about what I’m doing, there were very long pauses showing just the cursor moving around the screen and rotating the model randomly without actually doing nothing on it.

So for further projects I’ll record the entire process, to keep focus, improve myself and also to share it later here.

There’s a few things I could’ve cut off from the final version, but here it is anyway. Roughly 2 hours of work (without render times) condensed in 25 minutes.

Animated head loop

Polyhead2.gif

While experimenting with the Animation Nodes addon for Blender (and trying to understand how it works), I came up with this simple loop, and decided to make a gif out of it. Crappy quality and lots of noise because I didn’t wanted to spend a whole day rendering this…

For anyone wanting to create procedural animation and/or motion graphics in Blender, I heavily recommend this addon, doing animation with nodes is really cool 🙂

Links:

Animation Nodes thread on Blenderartists.org

Examples and tutorials

Download

Tutorials by Jimmy Gunawan

Reviving the blog

I’ve never been disciplined enough to maintain my blog updated; so once again I’m starting to post here, hoping to keep it this time, mainly for portfolio purposes (and this is the biggest motivation to do it), but also to create the habit of doing regular posts at least twice a week. Besides the portfolio, I’ll also try to post some tips and tricks I’ve found over the years regarding modeling, rendering and animation in Blender.

Now head over to the Portfolio section to see some of the things I’ve done, most of them are just personal projects, unless noted otherwise.

Cheers,

Faun Update

Fauno by JulPer
Fauno, a photo by JulPer on Flickr.

This is Just an update on the model, I still need to add the hair…

Hipster

Hipster by JulPer
Hipster, a photo by JulPer on Flickr.

Hipsters (also scenesters) are a subculture of young, recently settled urban middle class adults and older teenagers with musical interests mainly in indie rock that appears in the 1990s. Other interests in media would include independent film, magazines such as Vice and Clash, and websites like Pitchfork Media.

Hipster culture has been described as a “mutating, trans-Atlantic melting pot of styles, tastes and behavior[s].” Christian Lorentzen of Time Out New York argues that “hipsterism fetishizes the authentic” elements of all of the “fringe movements of the postwar era—beat, hippie, punk, even grunge,” and draws on the “cultural stores of every unmelted ethnicity,” and “regurgitates it with a winking inauthenticity.”
Others, like Arsel and Thompson, argue that hipster signifies a cultural mythology, a crystallization of a mass-mediated stereotype generated to understand, categorize, and marketize indie consumer culture, rather than an objectified group of people.