Recreando rayos de sol bajo el agua con Houdini
Nabil Jabour, especialista en efectos visuales en Framestore, comparte cómo recreó los impresionantes rayos del sol bajo el agua utilizando Houdini.
Introducción
¡Hola a todos! Soy Nabil Jabour, FX TD en Framestore. He estado en el mundo de los efectos visuales durante los últimos 3 años y descubrí Houdini hace unos 5 años, convirtiéndose rápidamente en mi herramienta preferida. Siempre encuentro tiempo para proyectos personales y experimentación. Este artículo es resultado de una de esas investigaciones.
El 12 de junio de 2023, WetaFX publicó un breve desglose de los efectos especiales de Avatar: The Way of Water. En particular, los rayos del sol bajo el agua me llamaron mucho la atención y me inspiraron a intentarlo en Houdini. Así que decidí probarlo.
Objetivos
Realismo: me enfoqué en ajustar cuidadosamente los valores para lograr un resultado que coincidiera con el de Weta y otras referencias de la vida real que encontré.
Interactividad: siempre busco hacer mis configuraciones interactivas para obtener una vista previa rápida del efecto final.
Creación de los rayos
Vamos a desglosar el efecto, lo cual será adecuado para artistas de Houdini de nivel principiante a intermedio. No cubriré todos los nodos utilizados, pero si deseas más detalles, puedes encontrar un enlace a mi Gumroad al final del artículo.
Superficie del océano
El primer paso es crear una superficie de océano, sin complicaciones, solo necesitamos que se mueva lentamente. Marcar las casillas Cusp Attribute y Visualize Cusp proporcionará una buena visualización en el proceso.
Ahora que tenemos nuestra superficie oceánica, podemos agregar un atributo ruidoso usando el Flotador de ruido de atributo. En este caso, simplemente se llama máscara. Esto se usará más adelante para variar la densidad y contribuirá a mucho realismo.
Copiar las curvas
Copiaremos curvas sobre esta superficie o sobre puntos dispersos (si queremos más control). Nuestro flujo de trabajo de copia final se verá así. Todos los ajustes en el lado derecho conectado a ocean_surface se cubrirán a continuación.
Curvas - Dirección
Debido a que aún no hemos establecido las normales y la pscale, primero se verá así.
Eso obviamente no es correcto, pero si le damos al play, podemos ver lo bien que se mueven siguiendo la dirección de las olas. Queremos mantener esto, pero haciéndolos apuntar debajo de la superficie, y ser mucho más largos.
Usemos un nodo pointVelocity para generar una dirección y un ruido. Deberíamos comenzar con un valor Y negativo y luego agregar un ruido de rizo con un tamaño de remolino bastante pequeño. También podemos difuminar la velocidad justo después, pero es opcional.
Por supuesto, podemos personalizar la dirección como queramos. Por ejemplo, podríamos tomar el vector de dirección desde un punto_luz a los puntos de nuestra cuadrícula.
El atributo de velocidad debería verse así:
Y finalmente, debemos convertir esta velocidad en normales. La forma más fácil es agarrar un nodo pointWrangle y escribir:
Curvas - Longitud
Para la longitud, usaremos el atributo @pscale. En este caso, está configurado como uniforme para cada curva, pero podemos aleatorizarlo o usar un ruido si queremos. El valor dependerá de la escala de la escena.
¡Ahora casi tienes las curvas perfectas! Necesita que esas curvas se vuelvan a muestrear con un conteo alto de puntos y agregar un atributo curveu (a través del nodo de remuestreo).
Configuración de volumen
Esta configuración utiliza volúmenes para obtener el aspecto deseado. Simplemente rasterizaremos los puntos generados antes y luego dirigiremos artísticamente su aspecto. En mi opinión, el control que tenemos sobre los volúmenes es parte de lo que hace que Houdini sea un software tan único, por lo que debemos aprovecharlo.
Configuración de densidad
Antes de construir nuestro volumen, debemos configurar el atributo de densidad. Copie estas líneas de código en un pointWrangle:
Código:
f@densidad = chramp("densidad",f@curveu);
f@densidad *= fit01(f@mask,.25,1);
- Establecemos la densidad aumentando la curva.
- Multiplicamos la densidad por el atributo de máscara que hicimos al principio. Tenga en cuenta que se está sujetando de 0,25 a 1.
Construyendo el Volumen
Pongamos un nodo Volume Rasterize Attribute y tomemos el atributo de densidad. En la pestaña de filtro, podemos jugar con los valores hasta que tengamos algo parecido a esto:
Suavizar el volumen
Como se muestra en la referencia, parece que la parte inferior de los rayos parece más borrosa. En realidad, podría no ser el caso en la configuración de WetaFX, y probablemente solo tengan mil veces más curvas que en esta configuración. Pero hay un truco barato.
Entonces, ¿cómo suavizamos procesalmente solo la parte inferior? Usando el atributo curveu.
Así es como debería verse el atributo curveu en nuestras curvas. Va de 0 a 1, de arriba a abajo.
Luego, si rasterizamos este atributo (usando nuevamente el atributo rasterizar volumen), debería darnos esta impresionante máscara de volumen. Por supuesto, podemos ajustar el atributo curveu para tener la máscara deseada.
Ahora que tenemos nuestra máscara, ¡vamos a suavizar! Podemos cablear los nodos de esta manera y ajustar los valores en el nodo VDB Smooth. En este caso, Gaussian Blur fue la opción preferida, con 4 iteraciones.
Volumen Lookdev
Finalmente, podemos colocar un Pyro Bake Volume para colorear nuestros rayos. Para tener el aspecto deseado, debemos utilizar el volumen de emisión en lugar de la densidad clásica. Entonces, desmarquemos el humo y activemos el fuego. Además, debemos asegurarnos de que en la pestaña de encuadernación, ponemos la densidad para la intensidad y el volumen del color.
De vuelta en la pestaña de fuego, podemos elegir nuestro color e intensidad. Estos son los parámetros precisos para el resultado final a continuación, pero siempre podemos modificarlo como deseemos.
Resultado final y nodograma
¡Gracias por leer este desglose! Espero que tengas una idea aproximada del flujo de trabajo utilizado para construir estos frescos rayos de sol bajo el agua.
Si desea poner su mano en el archivo de cadera, está disponible aquí en Gumroad. También puedes ver mi último showreel y seguirme en Twitter.
Nabil Jabour, FX TD en Framestore.