De Resogun a Returnal: la evolución del mágico VFX que trajo a la vida a Atropos

1 0
De Resogun a Returnal: la evolución del mágico VFX que trajo a la vida a Atropos

Una fascinante mirada a cómo surgieron la tecnología de los tentáculos, la niebla volumétrica y más del juego. 

Además del cautivador gameplay, Housemarque es conocido por los asombrosos efectos de partículas. Títulos como Resogun, Alienation, Matterfall y Nex Machina todos utilizaron tecnología VFX patentada para traer coloridas explosiones a la pantalla para poder recompensar a los jugadores por destruir a los enemigos o completar niveles. En Returnal, Housemarque cambió a cámara de tercera persona, y también a un estilo de arte más oscuro que antes. En este artículo, Risto Jankkila, Lead VFX Artist, y Sharman Jagadeesan, Senior Graphics Programmer, nos dan un vistazo más de cerca a cómo utilizaron su tecnología VFX para hacer que el planeta alienígena Atropos y sus habitantes saltaran a la vida. 

A continuación pueden encontrar todo el video de desglose que cubre algunas de las funciones VFX que se ven en Returnal. Además de eso, entraremos un poco más en los detalles de algunas de esas funciones en ese artículo. 

De Resogun a Returnal: la evolución del mágico VFX que trajo a la vida a Atropos

La historia de nuestra tecnología VFX

Hemos estado trabajando en nuestra tecnología patentada VFX desde Resogun (título de lanzamiento de PS4 en 2013), donde el primer prototipo de nuestro actual sistema de partículas se usaba en algunos de los efectos. Después de Resogun, el sistema de partículas recibió una interfaz de usuario gráfica y empezamos a referirnos a él como Next Gen Particle System (NGP). En 2014 tomamos la decisión de producir todos los efectos de partículas para Alienation con NGP. Después de lanzarlo, el sistema de utilizó para Nex Machina y se portó a Unreal Engine para Matterfall.

NGP está diseñado para ser un sistema de creación de efectos visuales solo para GPU con una sobrecarga de CPU mínima. La atención se centra en el buen rendimiento y la flexibilidad. La creación de partículas se realiza por los artistas de VFX quienes escriben fragmentos de sombreado de cálculo que definen el comportamiento y los datos de las partículas. NGP se encarga de la asignación de memoria y la mayor parte del código estándar, mientras que los artistas pueden centrarse en el comportamiento y las imágenes.

Actualmente, NGP no está diseñado para manejar solo efectos de partículas. También se puede usar para controlar el comportamiento del vóxel en volúmenes o para generar geometría de procedimiento dinámica. También tenemos varios módulos que generan datos para utilizarse como una entrada para efectos. 

Por ejemplo, tenemos nuestro propio módulo de simulación de fluido que puede alimentar sus datos de simulación a NPG. Otro ejemplo es un módulo llamado voxeliser el cual puede convertir una malla animada en vóxeles. Esos datos luego se pueden usar para efectos de personajes volumétricos. Otras fuentes como texturas, matrices óseas y búferes de vértices también se pueden usar como entradas para efectos de partículas. 

La magia VFX detrás de los tentáculos enemigos y los rastros de balas: partículas de nodo

Desde el comienzo en el desarrollo de Returnal, fue claro que queríamos hacer algo especial con las criaturas enemigas en Atropos. El director del juego, Harry Krueger, quería que parecieran criaturas de las profundidades del mar, con propiedades como bioluminiscencia y tentáculos. 

Nuestro equipo de animadores de enemigos experimentó brevemente haciendo tentáculos y utilizando física tradicional de cuerpos rígidos para simular cadenas de huesos atados a los esqueletos enemigos. Este enfoque parecía muy limitado ya que el costo de desempeño de hacer múltiples cadenas muy largas era muy alto, y también porque carecíamos de medios para expresar estados enemigos a través de solo la simulación de física. Entonces a VFX se le asignó la tarea de crear tentáculos dinámicos que pudieran atarse a las mallas y esqueletos. 

Afortunadamente ya teníamos una solución en mente. El equipo había estado experimentando con partículas de vegetación para proyectos anteriores y un tipo especial de partícula había sido desarrollado para la vegetación ramificada como los árboles. Llamamos este tipo de partícula “Node Particle” para reflejar sus propiedades y comportamiento. 

Este tipo de partícula nos permitió crear conexiones unidireccionales entre padres e hijos. Una partícula puede ser padre de múltiples hijos, pero una partícula solo puede tener un padre. Al leer la partícula principal, los datos principales tienen un fotograma anterior, es decir, no son los datos en los que se está escribiendo en el fotograma actual. Esto hace que sea imposible “seguir” al padre estrictamente y da como resultado un efecto secundario que hace que el movimiento de las partículas parezca “orgánico”. Este efecto secundario se usa ampliamente en efectos de partículas en Returnal, y fue especialmente útil para cosas como los tentáculos. 

Pero antes de empezar a trabajar en el comportamiento de los tentáculos, necesitábamos decidir cómo los íbamos a renderizar. Primero, experimentamos con renderizar tiras planas de polígonos. La calidad estaba cerca a lo aceptable, pero ausente en algunas áreas como las sombras. Después de un tiempo, nos decidimos por renderizar los tentáculos como mallas cilíndricas que se construyeron a partir de NPG durante el tiempo de ejecución. 

Después de decidirnos por el renderizado de tubos pudimos enfocarnos en el comportamiento de los tentáculos. Al poder controlar el comportamiento de la partícula, ya no estaríamos limitados solo por simulaciones de física sino que podríamos cambiar convenientemente el movimiento del tentáculo en función del estado del enemigo. Esto nos facilitó experimentar con cosas como forzar a los tentáculos a moverse en cierta dirección cuando el enemigo se prepara para atacar. Reiteramos los tiempos con el equipo de enemigos y los diseñadores para asegurar que el comportamiento de los tentáculos ayudara en telegrafiar los estados enemigos junto con la animación y otros VFX. 

Las partículas de nodo también fueron útiles para las numerosas cintas y senderos que tenemos en el juego. Queríamos que algunas de las balas guiadoras tuvieran un rastro largo que permaneciera en la pantalla por un tiempo detrás de la bala. También los rastros de ataque cuerpo a cuerpo del enemigo usaban partículas de nodo. A continuación pueden ver un video de partículas de nodo siguiendo su padre, creando un rastro de cinta, seguido por un ataque de bala por Phrike.

Simulaciones de fluido

Uno de nuestros principios claves en Housemarque con respecto a los efectos visuales es simular tanto como sea posible durante el tiempo de ejecución. Como habíamos utilizado simulaciones de fluido en nuestros anteriores juegos como Alienation y Matterfall, fue claro para nosotros desde el comienzo que no deberíamos conformarnos con campos de velocidad pre cocinados para Returnal. 

En su lugar utilizamos simulación de fluidos en tiempo real alrededor del jugador para simular el flujo de aire que afecta el movimiento de las partículas, la vegetación y otros elementos VFX. Además de esa simulación (a la cual nos referimos como Global Fluid Simulation), podemos tener simulaciones adicionales atadas a diferentes actores en el juego. 

Se puede programar cualquier evento de gameplay para agregar fuerzas a la simulación de fluidos ocasionando que los elementos de VFX cercanos reaccionen. Por ejemplo, estas fuerzas se pueden incluir en animaciones enemigas para que cuando el enemigo dé un salto de ataque sumemos un impulso radial a la simulación de fluido en ese momento y en esa ubicación. Esto ocasiona que las partículas cercanas como las hojas o chispas vuelen lejos del punto de impacto. En el video que sigue pueden ver los impulsos de fluidos activados de animaciones enemigas y acciones del jugador afectando la vegetación de partículas. 

Si bien usar solo velocidades de fluido fue suficiente para cosas como la vegetación, en casos donde uno puede ver partículas puntuales discretas, se sintió que el campo de velocidad de simulación de fluidos global carecía de detalles. Para tener más detalles optamos por implementar cálculos de vorticidad opcionales para la simulación de fluidos y en la actualización de partícula agregamos un campo de ruido para la velocidad de las partículas, proporcional a la magnitud de la velocidad del fluido en la ubicación de las partículas. En el juego esta técnica se utilizó para los hologramas Xeno-archive y en el efecto de teletransportación del jugador, el cual pueden ver a continuación. 

Efectos volumétricos y voxelizadores

Uno de los elementos del entorno que queríamos tener en el bioma de apertura de Returnal (Overgrown Ruins) era una niebla espesa y volumétrica parecida a la de un cementerio. Debido a las diferencias de altura en nuestros niveles, la ubicación de procedimiento de la niebla resultó ser problemática. En su lugar, decidimos ubicar manualmente los volúmenes de la niebla. Con un alto número de volúmenes para ubicar por el equipo de entorno, teníamos que hacer que el proceso fuera tan sencillo como fuera posible. 

La flexibilidad de nuestros sistema de partículas nos permitió construir estos volúmenes en NGP. Ya que los datos de partículas y el comportamiento se pueden personalizar completamente, podemos almacenar un índice tridimensional para un número de partículas y hacer que representen un volumen. Los límites del volumen se pueden pasar como datos constantes de la CPU a NGP. Junto al índice tridimensional también podemos almacenar cualquier otro dato por vóxel. Esto nos da la posibilidad de almacenar diferentes estados para cada vóxel dentro de un volumen. Además de poder almacenar esos estados de vóxel, también podemos cambiar su lógica actualizada basados en su posición en el mundo del juego o dentro del volumen. 

Al tener vóxeles que son consientes de su estado y ubicación, podemos tenerlos automáticamente emitiendo más densidad cerca a las superficies como pisos y muros, pero también desvaneciéndose suavemente cerca a los bordes de los volúmenes. Esto hizo que el proceso de ubicar volúmenes de niebla fuera mucho más rápido ya que la niebla se adaptó automáticamente a sus alrededores. También podríamos muestrear la simulación de fluido global en la posición del vóxel y hacer que la niebla se moviera por cosas como el viento, las balas y las acciones de los jugadores. En el video de abajo, pueden ver uno de estos volúmenes de niebla NPG ubicados en el nivel. La densidad de la niebla se crea solo cerca a las superficies, y se advierte mediante la simulación de fluidos en el juego. 

Uniendo todo para crear esa batalla de jefe con Phrike

Para el encuentro de jefe con Phrike, queríamos poder emitir niebla volumétrica desde la malla esquelética de Phrike. Esto planteó un problema ya que la niebla volumétrica y las mallas esqueléticas están construidas por diferentes tipos de elementos. Las mallas esqueléticas son un conjunto de vértices, puntos animados en espacio 3D que están ordenados para formar triángulos que se pueden renderizar. Los vértices se pueden ubicar arbitrariamente para formar todo tipo de diferentes formas desde árboles a humanoides. La niebla volumétrica, por otro lado, utiliza cajas que están referidas como volúmenes. Estos volúmenes consisten en elementos más pequeños llamados vóxeles. En contraste a las mallas esqueléticas, los volúmenes de niebla en Unreal Engine siempre tienen forma de cajas y también los vóxeles a partir de los cuales se construyen.

Si quisiéramos usar los vértices de Phrike para emitir niebla volumétrica, hubiéramos tenido que averiguar en qué vóxel del volumen de niebla se encuentra cada vértice de la malla esquelética. Esto fue trivial de resolver, pero el mayor problema fue el hecho de que solo podríamos manejar un vértice por vóxel. Al tener dos vértices ocupando el mismo vóxel llevaría a un comportamiento indefinido y posiblemente rompería el juego. Para empeorar las cosas, era mucho más probable tener múltiples vértices dentro de un solo vóxel que tener solo uno. 

La solución para esto fue un voxelizer en tiempo real. El voxelizador toma una malla esquelética como una entrada y genera un volumen donde cada vóxel que está dentro de la malla esquelética está marcado como ocupado. Esto hizo que el proceso de emitir niebla fuera simple ya que solo teníamos que revisar la salida del voxelizer y ver si el dado vóxel está marcado como ocupado o no. En el video de abajo pueden ver la salida del voxelizer utilizando la malla de Phrike como una entrada. 

Con la habilidad de emitir niebla desde la malla de Phrike, pudimos combinar mejor al personaje con el entorno cuando ella estaba en movimiento. También hizo que las aciones especiales de Phrike como teletransportarse y regenerarse fueran más fáciles de ejecutar ya que podíamos ocultar estas transiciones con la niebla. Abajo pueden encontrar un video de comparación de la secuencia de regeneración de Phrike con niebla volumétrica y otros efectos y sin ellos. 

Esto concluye nuestra profunda inmersión en los efectos visuales de Returnal. Esperamos que hayan disfrutado la lectura y deseamos compartirles más sobre nuestros trucos y técnicas en el futuro. 

Los comentarios están cerrados.

1 Comentario

  • Ojalá en algún momento agreguen checkpoints, no eh podido pasar del segundo jefe :I

Por favor ingresa tu fecha de nacimiento.