#unitytips Dev Takeover: VFX y shaders con Harry Alisavakis

El #unitytips Dev Takeover es una serie en curso en nuestra cuenta de Twitter @unitygames. El equipo de Unity invita a los superusuarios de nuestra comunidad a compartir sus ideas, consejos y trucos directamente con nuestros seguidores. Empezamos con Harry Alisavakis, artista técnico de Jumpship Studio y extraordinario mago de los efectos visuales.
Si aún no conoces a Harry, puede que lo reconozcas por su avatar verde neón que flota siempre que, y donde sea, se habla de sombreadores. He aquí un breve resumen de cómo Harry se ha convertido en una estrella del rock en el mundo de los efectos visuales:
Actualmente trabaja como artista técnico en el próximo juego Somerville, en Jumpship, y dedica su tiempo "libre" a aprender sobre efectos visuales y sombreadores. De hecho, sigue inspirando a los creadores a través de su recopilación semanal de tweets sobre desarrollo de juegos llamada "Technically Art", donde también promociona el trabajo de otros artistas con talento (¡no dejes de seguirle!). A través de su canal de Discord, "Technically Speaking", organiza charlas sobre arte técnico, retos creativos de Unity y AMAs para responder al mayor número posible de preguntas de los usuarios. Compruébelo aquí.
A continuación se muestran algunas imágenes del trabajo más reciente de Harry. Puede encontrar aún más en su portafolio.




Pasemos ahora a los #consejosdelaunidad, cortesía de Harry Alisavakis.
Empecemos con un pequeño truco de VFX para que lo pruebes. Aunque sincronizar los efectos del sistema de partículas entre sí puede ser un poco incómodo, existe una forma sencilla de iterar los efectos visuales mediante líneas de tiempo. 🧵
En Unity, las líneas de tiempo tienen soporte incorporado para sistemas de partículas, por lo que no necesitas ningún script personalizado. Arrastra y suelta tu sistema de partículas y podrás desplazarte por él.

La combinación de estas pistas con la animación o cualquier otra línea de tiempo te da una idea mucho mejor para sincronizar todos los elementos individuales, animados, para crear algunos VFX realmente jugosos.

Hay una forma muy divertida de sacar más partido a tu dinero cuando utilizas sistemas de partículas y sombreadores personalizados, y es a través de los flujos de vértices personalizados.
Tomemos un momento para entender completamente lo que son, y cómo podemos utilizarlos para efectos de partículas más avanzadas. 🧵
Como sabes, los modelos renderizados en Unity se hacen con triángulos que consisten en vértices. Los vértices contienen toda la información esencial relativa a estos modelos, como su posición individual, las coordenadas UV y el color de los vértices.
Lo guay es que podemos añadir cualquier tipo de dato arbitrario a nuestros vértices y usarlo en nuestro shader personalizado como queramos. Esa es la belleza de los flujos de vértices personalizados en los sistemas de partículas: Podemos pasar información relacionada con las partículas a nuestros vértices y aprovecharla sólo cuando sea necesario.
La opción de añadir flujos de vértices personalizados se encuentra en el módulo Renderizador del sistema de partículas. Al activarlo, se mostrarán todos los flujos de vértices ya en uso, como las coordenadas UV y el color de los vértices.

Por último, vamos a hacer un simple shader de disolución para nuestro sistema de partículas utilizando Shader Graph. Estamos hablando de un shader Universal Render Pipeline (URP) sin iluminación, de doble cara y con recorte alfa. Lo interesante aquí es observar qué impulsa el efecto de disolución, el tercer componente de nuestros UV.

Quizá te preguntes por qué, sobre todo porque solemos trabajar con coordenadas UV para el muestreo de texturas a través de los componentes x e y.
Junto al nombre de cada flujo, verás dónde se almacenan los datos.

En este caso, el nuevo flujo se almacena en TEXCOORD0.z, que corresponde al tercer componente del primer canal de coordenadas de la textura (también denominado UV0.z). Al añadir el porcentaje de edad de vida, este valor partirá de cero y se acercará a uno durante la vida de las partículas.
Con nuestro sombreador, esto hace que las partículas se disuelvan con el tiempo. Aplicando el shader al sistema de partículas podemos obtener este bonito resultado:

Hasta aquí todo bien, pero ¿y si queremos controlar aún más la vida útil de las partículas? El porcentaje de edad funciona, pero es bastante lineal y no muy útil para crear efectos más complejos. La solución está en este módulo de datos personalizados:

Podemos utilizar Custom1.x en lugar de porcentaje de edad, que a su vez, nos permite emplear una curva que altera el valor a lo largo de la vida de las partículas, similar a las curvas incorporadas como Tamaño a lo largo de la vida.

Ahora podemos gestionar mejor cómo se disuelven nuestras partículas con el tiempo. ✨ ¿No es genial?

Por supuesto, hay muchos más datos que puedes pasar a los flujos de vértices personalizados. Las posibilidades de utilizarlos dentro de tus shaders personalizados son muchas.
Dicho esto, nos encantaría conocer tus usos creativos de los flujos de vértices personalizados en los comentarios.
¡Feliz VFXing! ✨
Siga nuestro Twitter Unity for Games para obtener consejos semanales #unitytips los martes y Dev Takovers mensuales. Dinos en los comentarios quién te gustaría que apareciera en nuestros futuros Dev Takeovers en Twitter.
