En este tutorial examinaremos las características, configuraciones, puntos en común y diferencias entre Depth y Mist: dos Render Passes de Compositing en Blender que nos proporcionan información sobre la distancia de los objetos o la profundidad de la escena en postproducción.
Transcripción del video
¡Hola a todos! En este tutorial examinaremos las características, configuraciones, puntos en común y diferencias entre Depth y Mist: dos Render Passes de Compositing en Blender que nos proporcionan información sobre la distancia de los objetos o la profundidad de la escena en postproducción.
Ambos pueden utilizarse para obtener imágenes que aparecen negras en los puntos más cercanos a la cámara y blancas en los puntos más alejados, permitiéndonos crear efectos ya sea mezclando directamente estas imágenes con el render o utilizándolas como máscaras para crear otros efectos, como mostré, por ejemplo, en mi serie de videotutoriales sobre Atmospheric Perspective.
Sin embargo, existen algunas diferencias, no solo en cómo se calcula el rango de valores en la escena virtual, sino también en otras características de las imágenes resultantes, que pueden hacerlas más o menos adecuadas para determinados usos. Para intentar explicar mejor estas diferencias, a lo largo del tutorial utilizaré un par de escenas 3D y les mostraré las diferencias en los resultados cambiando algunos ajustes cada vez.
En resumen, la diferencia entre Depth y Mist es que Depth devuelve los valores reales de distancia de los objetos respecto a la cámara virtual, mientras que Mist introduce niebla a partir de cierta distancia desde la cámara y la incrementa a lo largo de una determinada profundidad, más allá de la cual todo se vuelve blanco.
Por lo tanto, Depth es más adecuado para aplicaciones en las que es necesario utilizar los valores reales de distancia, como con los nodos Defocus y Z-Combine.
Defocus permite enfocar elementos situados a una determinada distancia de la cámara, desenfocando los demás, implementando así la profundidad de campo.

Z-Combine, por otro lado, permite mezclar dos escenas determinando qué píxeles mostrar y cuáles no mostrar basándose en los valores de distancia respecto a la cámara, almacenados en los campos Z o Depth de cada escena o imagen.

Sin embargo, esto no significa que Depth no pueda utilizarse en otros casos: yo mismo lo utilicé en la serie sobre Atmospheric Perspective, pero allí tuve que normalizar la información devuelta por Depth; enseguida veremos qué significa normalizar Depth y qué consecuencias puede tener sobre los datos.
El Render Pass Depth está seleccionado por defecto en la sección Passes de la pestaña View Layers del editor Properties; en esa pestaña, este Render Pass se llama Z, mientras que en el nodo Render Layers del Compositing se llama Depth.

El valor mínimo de distancia devuelto por Depth está dado por el valor Clip Start del objeto Camera, porque todos los objetos colocados más cerca de la cámara que Clip Start no se renderizan, así que, si la salida de Depth no está normalizada, ese es el valor mínimo que Depth puede devolver.

El valor máximo de distancia devuelto por Depth está dado por el valor Clip End del objeto Camera, porque todos los objetos colocados más allá de ese valor no se renderizan. El fondo del universo virtual se considera a una distancia infinita, por lo que tendrá el valor máximo en la máscara Depth.
Puedes mostrar los puntos Clip Start y Clip End en la escena 3D seleccionando la cámara virtual y activando la opción Limits en la sección Viewport Display de la pestaña Data del editor Properties.
De esta manera será más fácil ajustar correctamente el valor Clip End.

Mist, por otro lado, devuelve una imagen que se vuelve progresivamente más blanca a medida que aumenta la distancia desde la Camera. Sin embargo, en este caso, el punto inicial del efecto de niebla no está dado por Clip Start, sino por un valor que podemos especificar libremente, llamado Mist Start.
A diferencia de Depth, que está activo por defecto, el Render Pass Mist necesita activarse explícitamente en la sección Passes. Esta operación debe realizarse antes de iniciar el render; de lo contrario, la información no será procesada y tendrás que iniciar el render nuevamente para poder utilizarla.
Después de activar el Render Pass Mist, aparecerá una nueva sección llamada Mist en la pestaña World, donde podremos configurar Mist Start y otros parámetros.

Existe otra diferencia entre Mist y Depth: Mist no utiliza Clip End para determinar la distancia más allá de la cual todos los objetos se renderizan en blanco. En su lugar, utiliza un parámetro llamado Mist Depth. Por lo tanto, todos los objetos colocados a una distancia de Start + Depth se renderizarán en blanco.
También puedes mostrar Mist Start y Mist Depth en el 3D Viewport simplemente activando la casilla Mist en la sección Viewport Display de la pestaña Data. Si también has activado la opción Limits, es recomendable desactivarla porque sus representaciones se superponen.

Antes de renderizar nuevamente, voy a ajustar los valores de Mist Start y Depth para que el efecto coincida con los valores Clip Start y Clip End.
En la sección Mist de la pestaña World hay otro parámetro: Falloff, que indica cómo implementar la niebla a lo largo de la distancia. El modo por defecto es Quadratic, pero también existen opciones como Inverse Quadratic y Linear.
Quadratic implementa la misma transición que la iluminación, proporcionando una transición más suave de 0 a 1. Linear implementa una transición ligeramente más marcada que Quadratic. Finalmente, Inverse Quadratic pasa muy rápidamente de 0 a 1, mostrando una niebla densa incluso en los elementos del primer plano.

Z-Depth no tiene este parámetro porque no es un efecto que deba implementarse siguiendo una fórmula; más bien, devuelve los valores reales de distancia de los objetos... podría decirse que siempre es lineal, pero no tiene mucho sentido hacer esta aclaración.
Como mencioné anteriormente, Z-Depth es más adecuado para obtener información sobre distancias reales, mientras que Mist es más apropiado para crear el efecto del que toma su nombre, porque nos permite configurar sus características libremente.
Si renderizamos ahora y examinamos los passes en una ventana del Compositor, obtendremos un resultado interesante desde la salida Mist, mientras que la máscara proveniente de Depth será, al menos aparentemente, inutilizable.

Veamos ahora qué significa “normalizar Depth” y por qué el nodo Normalize se utiliza con frecuencia en varios tutoriales.
Como se mencionó antes, los valores devueltos por Z-Depth no están en el rango de 0 a 1, sino que en realidad indican distancias respecto a la Camera virtual. Por lo tanto, esto puede resultar útil si, por ejemplo, deseas introducir un efecto exactamente a una determinada distancia de la cámara.

Los números almacenados pueden ser muy grandes, por lo que el campo Z-Depth almacena los datos utilizando más memoria que los 8 o 16 bits de la mayoría de los archivos de imagen como JPG o PNG; estoy casi seguro de que en realidad utiliza 32 bits.
Además, en el Backdrop, todos los valores superiores a 1 son truncados, o “clamped”, a ese valor, y los píxeles correspondientes se muestran en blanco. Sin embargo, los valores Z-Depth están determinados por Clip End, que generalmente es mucho mayor que 1.
Por estas razones, los valores devueltos no se muestran correctamente en el Backdrop del editor de Compositing porque en esa pestaña todos los valores superiores a 1 se representan como blancos. Por lo tanto, en la mayoría de los casos, las imágenes resultantes aparecen muy brillantes y sin detalles...
... de hecho, en la escena que utilicé, el valor Clip Start es 1 y Clip End es 20000, así que el Depth Pass aparece completamente blanco.
Por esta razón, el nodo Normalize del grupo Utilities se utiliza frecuentemente para mapear los valores al rango de 0 a 1. Sin embargo, sobre este punto debemos detenernos porque hay una aclaración importante que hacer.

El nodo Normalize no mapea los valores entre Clip Start y Clip End al rango de 0 a 1. En cambio, considera los valores mínimo y máximo de los píxeles presentes en la imagen que procesa.
Sin embargo, esa no es la imagen que vemos en el Backdrop porque, como mencioné antes, el canal Depth almacena mucha más información que la visible.
Por eso, si conectamos un nodo Normalize entre la salida Depth y el Viewer, los elementos en la parte inferior del render aparecen negros: porque esos son los puntos más cercanos a la cámara virtual, que por lo tanto tienen los valores más oscuros en la máscara Depth y, en consecuencia, serán renderizados en negro en la versión normalizada, aunque claramente no estén a la distancia Clip Start de la Camera.

Consideraciones similares pueden hacerse para los objetos más lejanos y para los píxeles que aparecerán blancos en la versión normalizada de la máscara Depth.
Como prueba adicional de que Normalize actúa sobre los valores mínimo y máximo que encuentra en la imagen proporcionada, observen qué sucede si también normalizo la información proveniente de Mist: los píxeles de la parte inferior, que son los más oscuros, se remapean a 0 y, por lo tanto, se renderizan en negro, mientras que los píxeles de los elementos más lejanos ya eran blancos y por lo tanto permanecen sin cambios.
Les mostraré otro ejemplo para comprender mejor este concepto. En la escena que estoy mostrando ahora, la cámara y algunos objetos están posicionados dentro de una habitación.
El valor Clipping End de la cámara está configurado de manera que renderice la cara frontal de la caja más lejana colocada en la habitación, pero no la pared trasera de la habitación.

De hecho, ni siquiera la caja más lejana es completamente visible, pero esto se debe al efecto de perspectiva del encuadre.

No hay objetos colocados cerca de Clip Start, que está configurado a 10 centímetros de la cámara: incluso las paredes de la habitación en los bordes del encuadre están a una distancia mayor que ese valor respecto a la cámara.
Si inicio el render ahora y examino el Depth Render Pass no normalizado, la pared trasera aparece completamente blanca porque, efectivamente, el Depth Pass no ve más allá de la caja más lejana y renderiza todo lo demás en blanco.
Sin embargo, no hay áreas negras porque, como se mencionó antes, no existen objetos colocados en Clip Start.

Pero si utilizamos un nodo Normalize, se introduce una banda negra en la parte inferior, que también vimos en el render de la escena utilizada anteriormente: esa parte del suelo evidentemente es la más cercana a la cámara.

Podemos verificar lo dicho moviendo una de las paredes laterales hacia adentro, de modo que quede más cerca de la cámara, y luego iniciar nuevamente el render.

Es importante comprender cómo la máscara Depth es alterada por Normalize.
Este nodo no debería utilizarse con Mist, y su uso con Depth también debe decidirse cuidadosamente: es útil para crear máscaras para efectos especiales, como la mencionada Atmospheric Perspective, mientras que en otros casos no debería utilizarse.
Entonces, quizás se estén preguntando si existe una manera de mapear los valores Clip Start y Clip End al rango de 0 a 1, para poder visualizar la máscara Depth en el Backdrop...
... pues sí: añade un nodo Map Range del grupo Utilities en el Compositor, y luego configura los valores From Min y From Max del nodo iguales a los valores Clip Start y Clip End de la Camera.
Obtendrás una máscara similar al pass Mist, pero por supuesto perderás los valores reales de profundidad.

Hay una última diferencia importante que debemos destacar antes de cerrar este tutorial: la cantidad de samples utilizados para calcular los valores de distancia de los objetos en la escena.
Mist, de hecho, también implementa Anti-Aliasing, algo que no es calculado por Z-Depth.
El valor Z-Depth, en particular, utiliza solo un sample, por lo que puede utilizarse sin problemas cuando no se emplean efectos como Motion Blur o Depth of Field, es decir, en casos donde no es necesario mezclar los valores de profundidad. Cuando es necesario mezclar los valores de profundidad, utilizar Mist es más apropiado.

Finalmente, una consideración sobre las configuraciones de Color Management del render y cómo las máscaras Z-Depth y Mist se muestran en el Backdrop.
Dependiendo del modo elegido para el parámetro View Transform, los resultados mostrados en pantalla tanto para Mist como para Depth, estén normalizados o no, pueden variar considerablemente.

Sin embargo, estas transformaciones solo deberían afectar la forma en que los datos se muestran en el Backdrop, por lo que no deberían alterar sus valores intrínsecos.

¡Bien, eso es todo por este tutorial! ¡Espero que les haya resultado útil! ¡Hasta pronto!