Reducción de ruido en Cycles (Denoiser)

Esta vez vamos a hablar de otra de las grandes y muy bienvenidas adiciones a Cycles en Blender 2.79, el Denoiser!

Denoise o Noise reduction es el proceso de reducción/eliminación de ruido, que permite lograr imágenes completamente limpias en una fracción del tiempo que toma regularmente un render en Cycles.

En términos simples, el denoiser analiza y filtra la imagen un tile a la vez, lo compara con los tiles terminados alrededor y hace un promedio de los pixeles de la zona quitando la información que se determina como ruido, tratando de mantener tanto detalle como sea posible.

Los settings por defecto funcionan bien para la mayoría de los casos, pero vamos a revisarlos uno por uno para entender mejor cómo usarlo y que valores cambiar dependiendo de la escena en particular:

render_cycles_settings_scene_render-layers_denoising

Estos conceptos son sacados directamente del manual oficial

Radius: es el tamaño del área de la imagen que se usa para reducir el ruido de un pixel. Valores más altos logran una imagen más suavizada, pero puede reducir significativamente el detalle y toma más tiempo.

Strength: Es la fuerza, o la intensidad con la que se “limpia” el ruido. De manera más técnica, permite definir qué tan diferente (en términos de color) puede ser el área alrededor del pixel central de la zona que se está limpiando. Valores más bajos mantienen más detalle, pero el resultado final puede dejar algo de ruido.

Feature Strength: controla la eliminación de las partes de la imagen más ruidosas y redundantes antes de hacer el proceso de denoising. Puede ser necesario en algunos casos como motion blur o profundidad de campo (DOF) extremos, para evitar que la imagen se vea “manchada”. Puede causar que detalles pequeños en texturas o geometría sean borrados. Valores más bajos mantienen más detalle, pero el resultado final puede dejar algo de ruido.

Relative Filter: cuando se remueven características que no contienen información relevante para el denoiser, esta opción decide cuáles características se mantienen basada en la cantidad total de información visual. Puede limpiar rápidamente la imagen y evitar artefactos, pero puede causar pérdida de detalle sobre todo en los bordes de los objetos.

Passes: permite que seleccionemos cuáles passes van a ser limpiados de ruido y cuáles no. Muy útil si usamos posteriormente los render passes para componer la imagen final.
Se pueden seleccionar los passes directo e indirecto para: Diffuse, Glossy, Transmission y Subsurface Scattering.

Notas de los desarrolladores (fuente):

El denoiser cambiará en el futuro y algunas de las funciones no han sido implementadas aún. Si el proceso no producce buenos resultados, generalmente la solución está en aumentar el número de samples o usar clamping para reducir las posibilidades de pixeles muy brillantes en la imagen.

  • No se recomienda que el valor en Radius se use muy alto. Además de aumentar el tiempo de render significativamente, el resultado puede ser más suave pero no va a ser más exacto, ya que no hay información extra en la imagen. Si en un valor de 15 todavía no hay buenos resultados, probablemente sea mejor aumentar la cantidad de samples.
  • El denoiser todavía no puede ser usado para quemar texturas (Texture baking).
  • Puede ser usado para animación, sin embargo todavía es necesario usar muchos samples para tener buenos resultados. Con pocos samples es posible que se presente ruido de baja frecuencia (borroso) en la animación, incluso si no es aparente en imágenes estáticas. En un futuro, el denoiser podrá comparar entre frames, lo que facilitará el proceso para animación.
  • Si usas GPU para el render, el proceso puede consumir una gran cantidad de vRAM. Si la tarjeta de video se queda sin memoria pero funciona normal sin el denoiser, trata reduciendo el tamaño de los tiles, o hacer el render con CPU.

Antes de ver un ejemplo práctico, es necesario aclarar que el denoiser por si solo no hace milagros y, como cualquier otra herramienta de Cycles es una que debe ser usada en conjunto con las demás para mejorar los tiempos de render y lograr imágenes más limpias.

En la práctica, si una imagen necesita 2500 samples y aún tiene algo de ruido, puede limpiarse completamente con 1000 o 1500 samples usando el denoiser. No es para nada práctico tratar de hacer un render interior con 10 fuentes de luz usando sólo 100 samples + el denoiser… Ese caso puede sonar exagerado pero es un buen ejemplo, para que la eliminación de ruido funcione bien es necesario que la imagen tenga suficiente información visual, es decir, que se haya renderizado lo suficiente como para que el algoritmo pueda diferenciar entre el ruido y los detalles pequeños en las texturas o en la geometría.

Ejemplo:

Este es un ejemplo un tanto extremo, para mostrar claramente los resultados y los artefactos que pueden generarse con el denoiser. Es una escena interior, con una sola fuente de luz externa (HDRI), y muchas superficies reflectivas.

Normalmente una escena como esta debería apoyarse en el uso de luces interiores o aperturas en las paredes fuera de cámara para reducir el ruido, pero en este caso, como prueba para el denoiser usamos sólo el HDRI para la iluminación.

Descarga la escena

Render settings:

Render_settings

Denoising: settings por defecto, no se modificó nada.
Sampling: 900.
Clamp direct e indirect: 100, un valor muy alto pero que funciona si se usa Filmic y se quieren evitar pixeles muy brillantes en la escena.
Light Paths: Max bounces 2

Bano5_filmic_noise

Sin denoiser

Bano5_filmic

Con denoiser – Radius: 8

Bano6_filmic

Con denoiser – Radius: 5

Bano7_filmic

Con denoiser – Radius: 10

Bano8_filmic.png

Con denoiser – Radius: 8 – Relative filter: activado

A primera vista no parece haber mucha diferencia, así que veamos las zonas con más ruido comparadas lado a lado:

Comparacion.jpg

Abre la imagen en otra pestaña para ver las diferencias claramente

En esta comparación se hacen más evidentes los problemas que puede causar el uso de denoiser en situaciones complejas o con pocos samples. Muchas veces el ruido se suaviza por partes, lo que genera parches de ruido más grandes y suavizados que parecen manchas.

Para este ejemplo el mejor resultado lo da un radius de 8 y Relative filter activado, pero CUIDADO! esto no quiere decir que se deben usar estos settings como una fórmula mágica todo el tiempo. Para cada escena hay que testear las opciones hasta encontrar la mejor combinación. Además en esta prueba no hice ningún cambio a otros settings como Strenght o Feature Strenght, que también pueden afectar mucho el resultado final.

Y otra prueba debería hacerse usando los render passes en composición…

Como lo mencioné antes, generalmente la mejor opción es aumentar el número de samples; por ejemplo la imagen de abajo usa también un radius de 8 pero en vez de 900 usé 1500 samples. Repito, un render más claro en primer lugar asegura un mejor resultado del denoiser (Al menos por ahora, faltan muchas cosas por implementar).

Bano9_filmic.png

Con denoiser – Radius: 8 – Relative filter: activado – Samples: 1500

Ahora, aquí está la misma escena pero usando algunas luces interiores; este sería un caso más realista, en el que primero trato de reducir tanto ruido como sea posible y luego, como detalle final uso el denoiser sólo para reducir un poco el tiempo de render.

Con la nueva iluminación volví a 900 samples, y sin embargo en algunas zonas aparece mucho más limpia que la versión de 1500 samples.

Bano10_filmic.png

Luces de área internas + HDRI – Denoiser radius: 8 – Relative filter: activado – Samples: 900

Ok, espero que este nuevo artículo haya sido de ayuda y sobre todo sea claro acerca del uso del denoiser. Habría que hacer más pruebas, explorar todas las opciones detalladamente y hacer una tabla de relaciones para cada setting que existe, pero por ahora esta introducción debería ser suficiente.

Por favor, no duden en comentar y hacerme saber si cometí algún error o pasé por alto algún pedazo de información importante para este tema, con gusto lo corregiré para que no confundamos otros usuarios 🙂

Pueden descargar el archivo aquí.

Advertisement

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.

 

Power Rangers – Cardiatron

This fanart/redesign was made for the tribute of the Power Rangers enemies in season 1, started by Edgar Gomez (https://www.artstation.com/artist/edgargomez).

I spent about 15 hours total in the making, from modeling to post. Done in Blender, rendered in Cycles, post in Photoshop.

comparison

Comparison

Organic weirdness…

Organic_weird.gif

Just playing with modifiers in Blender, dynamic paint is fun to play with 🙂

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

Breakfast

Rendered in Cycles with enviroment lighting  and a sunlight, model from designconnected.com

 

Recent images

Some things I’ve been doing for work.

 

 

Late Halloween

I was hoping to finish this image before Halloween but didn’t had the time, so here it is a little bit late 😛

Made with Blender, rendered in Cycles and composited in Photoshop and Blender.

Even more cycles renders

 

Blender cycles… More tests

This is yet another Blender Cycles test, I took a model already rendered and composited with Blender Internal and tried to do the same with Cycles, and it was much more easier. 😀

So here’s the first done in Blender Internal without compositing:

 

And this is the one rendered in Cycles (2000 passes), also without any compositing: