
Housemarque nos habla de reconstruir sus efectos visuales con un marco unificado para el shooter de ciencia ficción de PS5.
Hace cinco años, escribimos sobre cómo creamos los efectos visuales de Returnal, incluido el voxelizer en tiempo real que disolvió a Phrike en una niebla volumétrica. Si no lo habéis leído, ese post es un buen compañero para este.
Así es cómo continúa la historia.
Con Saros, no solo extendimos lo que habíamos construido para Returnal. Dimos un paso hacia atrás, miramos a treinta años acumulados de desarrollo de motores y lo reconstruimos como un marco unificado: Graphite.
Lo que teníamos y por qué lo cambiamos
Nuestro motor de partículas patentado, NGP (Next-Gen Particles), empezó como un prototipo para Resogun en 2013 y avanzó con todos los juegos desde entonces, hasta llegar a Returnal. Con Saros, NGP era maduro, pero también ha sido el producto de doce años de decisiones graduales, cada una hecha en el contexto de un juego concreto y aislado.
Entonces, algo distinto cambió: nosotros. Unirnos a PlayStation Studios significó ofrecer experiencias al nivel que esperarían nuestros jugadores, y nuestras herramientas, y los nombres que les hemos dado, ya no encajaban con el estudio en el que nos estamos convirtiendo.
Ahí llega Graphite. Trae una simulación de GPU, renderizado, herramientas e integración DCC bajo una arquitectura, construida directamente para el hardware de PlayStation. NGP no desapareció, sino que se convirtió en parte de Graphite, evolucionó y aumentó sus capacidades.
Cada juego de Housemarque tiene una identidad visual que los jugadores reconocen de inmediato. Graphite es lo que la hace posible.
Y lo que hace en realidad, fotograma a fotograma, se explica mejor con el increíble equipo que lo creó: el arquitecto gráfico de Housemarque Sharman Jagadeesan y el programador gráfico senior Konsta Toivanen nos hablarán de la niebla volumétrica en Saros: cómo evolucionó desde Returnal y los dos sistemas que construimos para hacer que parezca que el entorno de Carcosa está vivo.
Risto Jankkila (arquitecto de efectos visuales) os explicará cómo extendimos Graphite con información de Houdini, incluido un desglose completo de la secuencia de reaparición de los jugadores.
Niebla volumétrica
La niebla en los juegos suele ser algo que se deja en segundo plano, que llena el espacio vacío y oculta las distancias de renderizado. En Saros, queríamos que fuese una parte viva del mundo, que reaccionara a todo a su alrededor.
En Returnal, nuestra niebla volumétrica ya era reactiva, pero a una frecuencia demasiado baja y el fuerte filtrado temporal nos impedía mostrar los detalles. Para Saros, construimos dos soluciones complementarias: una frecuencia baja para la atmósfera del entorno y una niebla de alta frecuencia para los efectos de personajes que se ven en las salas de historia especiales de Carcosa.
Una niebla de baja frecuencia
Cogimos la niebla froxel de Unreal Engine, una cuadrícula de vóxel alineada con el frustum, como punto de partida y reconstruimos partes significativas para que encajara con nuestra visión.
El primer desafío fue la estabilidad temporal. El coeficiente de histéresis controla el porcentaje de los datos del fotograma anterior que mantiene la niebla: por defecto, Unreal mantiene el 90 % de la imagen estable pero hace que la niebla sea lenta en los movimientos de cámara e iluminación rápidos. Lo redujimos a un 50 %, usando jitter de ruido azul y el clamping de profundidad para tener controlado el solapamiento resultante.
Saros también necesitaba niebla que pudiera representarlo todo, desde neblina ambiental de baja densidad hasta niebla terrenal de alta densidad. Para renderizarlos fielmente, usamos:
- Una función de fase dual Henyey-Greenstein, modelando cómo la luz se dispersa hacia adelante y hacia atrás por la niebla según el ángulo desde el que se mire.
- Un coeficiente de absorción colorido que determina cuánta luz se absorbe a medida que viaja por un medio, para una gama de colores mucho más amplia que las soluciones monocromáticas tradicionales.
- Un sistema de autosombreado que agrega las fuentes de luz entrantes en una dirección de sombra dominante y avanza con rayos hacia ella.
- Una integral de iluminación del cielo basada físicamente para una iluminación distante precisa sin sacrificar el rendimiento.
Todo esto junto dio a la atmósfera de Carcosa una calidad física y realista.
Para terminar, la niebla de baja frecuencia es completamente interactiva. La advección de nuestro fluido simulado que sigue a los jugadores colabora directamente con el paso de la histéresis de la densidad, con lo que cada movimiento de los jugadores, proyectil, explosión y enemigo será legible en la niebla en tiempo real.
Niebla de alta frecuencia
Para la niebla de alta frecuencia, construimos un sistema de ray marching personalizado. Para mantener el rendimiento bajo control mientras conservábamos la fidelidad, agrupamos los datos dispersados en grupos de vóxeles de 8x8x8 antes del marching, basándonos solo en las agrupaciones que contenían datos, con un umbral definido por los usuarios para mantener los números bajo control. Mientras se hacía el ray marching, se saltaba las secciones vacías entre agrupaciones, con lo que el sistema de marching daba pasos más grandes cuando podía.
Para la iluminación, evaluamos el volumen de la iluminación por el volumen de la dispersión, conteniendo irradiación de todas las fuentes de luz, con autosombreado pre-marching para cada vóxel de luz. Expusimos los parámetros para albedo, absorción, densidad y sombreado, dejando que los artistas equilibraran lo visual contra el rendimiento para cada volumen.
Entonces, se fusionan los dos sistemas de niebla: sacamos una muestra de los datos dispersos de la niebla de baja frecuencia durante el marching de alta frecuencia, y nos basamos en los resultados para que sean coherentes.
Casos prácticos
Usamos la niebla volumétrica de alta frecuencia en unos pocos escenarios. Uno de los casos fue en el prólogo, bajo la forma de una calavera ahumada con cables atados. Otro caso fue con lo que llamamos «espejismos». En cuatro de nuestros biomas se encuentran habitaciones narrativas concretas en las que Arjun se encuentra frente a criaturas neblinosas.


La reactividad es clave para todos los efectos que hacemos, y estos efectos no fueron ninguna excepción. Como los datos de impacto no necesitan resoluciones de alta calidad, los guardamos en un volumen separado de baja resolución, lo que para la calavera también mantiene el campo de velocidad de baja frecuencia.
Los vídeos de a continuación muestran el volumen de la izquierda, combinado con la calavera a la derecha. Los impactos se evalúan como Campo de Distancia con Signo que se cierra con el tiempo, mientras la velocidad se muestra en color, y se pueden ver ambos los agujeros de impacto y la turbulencia que crean.
A continuación veréis el efecto de calavera final sin los cables ni otros elementos secundarios en un entorno distinto.
El efecto de espejismo es parecido al efecto de la calavera. La diferencia está en que hay «escenas» de espejismos que giran. También usamos nuestro voxelizer de malla esqueleto de tiempo real para poner mallas existentes en las escenas. El vídeo de a continuación muestra un barrido entre el resultado voxelizado y el resultado final con datos de advección del fotograma anterior.
A continuación podéis ver el efecto final con dos escenas de espejismos rodantes en un entorno de test. Para la reactividad, usamos el mismo método que describimos para el efecto de la calavera.
Extendiendo Graphite con datos de Houdini
Además de mejorar la calidad del renderizado de nuestros efectos volumétricos, queríamos introducir nuevas maneras de que nuestros artistas pudieran controlar el contenido.
Anteriormente, los efectos volumétricos se crearon escribiendo expresiones por vóxel para la emisión de densidad, combinadas con simulaciones fluidas que guiaban la advección (el movimiento direccional) del campo de densidad. Dado que este enfoque de cuadrícula y vóxel es estándar en el sector para los efectos especiales de las películas, también fue nuestro primer paso natural.
Durante el desarrollo de Returnal, nos dimos cuenta de que necesitábamos un mayor control sobre dónde exactamente se generaba la densidad. La lógica por vóxel nos permitió emitir densidad en las superficies cercanas o mallas voxelizadas, pero lo más complejo vino con un retraso importante en el sistema en tiempo de ejecución. Emitir densidad desde solo el brazo de un personaje, en vez de su cuerpo entero voxelizado, fue muy difícil de ejecutar de manera eficaz en tiempo real.
Para conseguirlo, acudimos a las partículas para guiar la emisión de densidad volumétrica. El sistema de partículas completamente programable de Graphite nos dio una base sólida para los volúmenes controlados con precisión, lo que resultó en dos herramientas nuevas:
Un pipeline de datos de Houdini offline: deja que los artistas recalculen datos complejos y de alta fidelidad en Houdini que sería demasiado caro generar en el tiempo de ejecución.
Un rasterizador de nubes de puntos en tiempo de ejecución: un componente de alto rendimiento que toma puntos simulados y los rasteriza directamente en un volumen en tiempo real.
Juntos, estos nos liberan de expresiones por vóxel aisladas y simulaciones de fluido rígidas. Ahora las partículas pueden seguir la malla animada de un personaje, dando a los artistas control total sobre el comportamiento y ciclo vital de un efecto.
En la práctica, un artista importa un personaje animado de Saros en Houdini y usa sus herramientas para calcular posiciones iniciales y atributos para un efecto. Los datos horneados se incorporan al motor del juego, donde una simulación en tiempo real lo dirige. En el vídeo siguiente, los puntos generados en Houdini encajan de cerca con el personaje del juego, y la lógica del tiempo de ejecución personalizada los separa del enemigo al impactar la bala, para que las posiciones iniciales vengan de Houdini, pero el comportamiento reaccione dinámicamente en base al jugador en tiempo real.
Dado que los artistas pueden exportar cualquier tipo de datos de Houdini a Graphite, es fácil ir más allá de las partículas estáticas vinculadas a los personajes. Abajo, las partículas fluyen por la superficie de una malla animada: la superficie se desarrolló en Houdini en un espacio de simulación en 2D y, luego, se exportó y mapeó en la malla animada en tiempo real.
El flujo de las partículas en el cuerpo de Arjun a la izquierda. En el medio extrajimos una superficie ISO de las partículas. A la derecha, tenemos una niebla volumétrica emitida del flujo de las partículas.
Un ejemplo excelente de esta tecnología en acción en el juego es la secuencia de reaparición del jugador en Saros. Este efecto complejo se construye a través de varias capas, empezando offline en Houdini, donde generamos curvas directamente en la malla esqueleto del jugador. Al exportar esas curvas en Graphite, tratamos cada punto de control como una partícula individual.
Simulamos las posiciones de las partículas en Houdini. Estas se usan únicamente como posiciones objetivo en el motor y el movimiento de crecimiento se resimula dinámicamente durante el tiempo de ejecución.
En el tiempo de ejecución, nuestro sistema de partículas programables controla cómo estos elementos se comportan con el tiempo. Al principio, las curvas flotan por el espacio libremente, luego, gradualmente, son guiadas de nuevo hacia sus posiciones objetivo en la malla del personaje.
Queríamos que pareciese que los jugadores se estaban volviendo a formar físicamente de un grupo de sustancia cambiante. Los Marching Cubes nos dieron ese aspecto viscoso y de superficie sólida y controlarlo con partículas nos dejó crear una secuencia en la que los jugadores se forman a partir de hilos separados en un personaje.
De manera parecida a las curvas que generan la superficie de sustancia, también podemos emitir densidad volumétrica. En la secuencia de reaparición colocamos varias curvas de partículas cerca de la ubicación de los jugadores e hicimos que apareciese una niebla volumétrica de ellas para simular un vapor o humo ascendiente.
Como toque final, añadimos partículas de chispa que chocan con el personaje del jugador, usando un campo de distancia con signo de las cápsulas de colisión de los jugadores. El sistema de partículas programables nos volvió a dar flexibilidad aquí: los jugadores atraen las partículas, pero en cuanto se acercan demasiado, la malla de los jugadores las repele, lo que ayuda a vender el aspecto de líquido caliente parecido a lava.
Aquí os lo presentamos todo combinado. Cada elemento está simulado en un tiempo de ejecución de 60 fps en base PS5, sin objetos de simulación horneados. Esto nos permite usar múltiples animaciones de reaparición, cada una de las cuales está un poco randomizada para que parezca algo distinta cada vez que se despierten los jugadores.
Un viaje de desarrollo en constante evolución
Al leer lo que Risto, Sharman, y Konsta nos explicaron aquí, el objetivo para nosotros y nuestra tecnología siempre ha sido el mismo: cada simulación, cada efecto y cada decisión de renderizado existen para que sintáis algo al jugar.
Hacer juegos significa creer en algo que aún no se puede demostrar, y la única gente que puede confirmarlo son los jugadores en sí. Los jugadores de Saros nos han dicho, en sus propias palabras, que lo que hemos construido les importa. Y eso lo es todo para nosotros.
Nuestros juegos seguirán informando la tecnología que desarrollemos para Graphite, siempre mostrando lo que PlayStation puede hacer como plataforma. Estamos deseando compartir ese futuro con vosotros.









Se ha cerrado la sección de comentarios.