Julper

Illustration and 3D by Julian Perez

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. Permite hacer una interpretación “artística” de los valores IOR para el reflejo. Por ejemplo, en un material de color base negro, 10 (se pueden ingresar valores por encima de 1) equivale casi 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. 🙂

Edit: olvidé compartir el archivo para quienes quieran ensayarlo directamente, aquí está el link de descarga: https://drive.google.com/open?id=0B7ECfNWJoP-ONnhZNTJkTFBOQUk.

Espero les sirva.