Nuestro reto: los suelos sangrientos
Uno de los retos que suponían los efectos visuales de Let Them Come: Onslaught fue manejar la cantidad de enemigos en pantalla en un momento dado y determinar cuántos podrían morir a la vez. Cuando creamos el prototipo del juego, los enemigos activaban una señal de juego de explosión que creaba una pegatina de sangre en el suelo y una explosión sangrienta para que el jugador tuviera constancia de su muerte. Pronto nos dimos cuenta de que podíamos activar muchas de estas muertes a la vez, así que tuvimos que optimizar el sistema para que la acción fuera lo más caótica posible sin verse limitada por la cantidad.
Las pegatinas de sangre se crearon originalmente para transmitir la sensación de matanza y para servir como un rastro que mostrara al jugador por dónde había pasado (y lo que había dejado atrás). El inconveniente de esto fue que se creaban demasiadas, además de que queríamos que duraran un buen rato para que cumplieran su función, lo que hacía que se acumularan muy rápido. También hubo que lidiar con las pegatinas superpuestas: si matabas a muchos enemigos que estuvieran cerca unos de otros, estas se solapaban, lo que en muchas ocasiones afectaba al rendimiento.
Para que apareciera una gran cantidad de marcadores de sangre (¡y ácido!) en el terreno, recurrimos a Niagara, que nos permitió crear un sistema que renderizaba varias áreas del espacio global en un objetivo de renderizado. Esta matriz tiene una longitud fija de unas 256 entradas y se repite, por lo que una vez agotadas, la primera se actualizará para convertirse en la 257, y así sucesivamente. Nos pareció que esta cantidad funcionaba bien, ya que nos daba la posibilidad de cubrir bien el suelo de sangre antes de tener que reciclar las entradas.
Ahora, cuando un enemigo muere, en lugar de generar una pegatina, envía datos sobre sí mismo (posición, radio y tipo de material) a un actor de blueprint que hemos llamado «gestor de dispersión» y que permanece activo en el mundo.
A continuación, este gestor envía los datos a un sistema global de Niagara que utiliza lenguaje de sombreado de alto nivel (HLSL) para escribir estas zonas en una máscara de objetivo de renderizado global mediante la interfaz de datos Grid2D. Para este sistema nos basamos principalmente en el trabajo de Chris Zuko, director técnico de Terrible Posture Games. Rellenamos el objetivo de renderizado con la distancia a cada charco de sangre, mientras que el intervalo de distancia viene definido por el radio entrante. Después, todas estas distancias se combinan para crear una máscara uniforme.
A continuación, la máscara distorsionada final se utiliza para combinar los atributos del material en el sombreador de superficie y darle un aspecto sangriento y visceral.