Notre défi : les flaques de sang au sol
L'une des difficultés qui se sont présentées à nous lors de la création des effets visuels de Let Them Come: Onslaught a été le nombre d'ennemis présents à l'écran en même temps, ainsi que la quantité d'ennemis susceptibles d'être éliminés d'un seul coup. Lorsque nous avons mis au point le prototype du jeu, les ennemis devaient déclencher un signal de gameplay appelé "Burst", qui faisait apparaître une flaque de sang au sol en guise de retour visuel pour les joueurs. Cependant, nous nous sommes rapidement aperçus qu'il était possible d'éliminer un grand nombre d'ennemis en une seule attaque, notamment avec certaines armes améliorées. Il a donc fallu optimiser le système afin d'offrir une action aussi chaotique que possible et éviter que la quantité d'ennemis tués ne crée un goulot d'étranglement.
À l'origine, les décalques de sang avaient été ajoutés pour accentuer l'effet de bain de sang et permettre aux joueurs de voir où ils étaient déjà passés (et ce qu'ils avaient laissé dans leur sillage). Cependant, de nombreux décalques de sang pouvaient apparaître et, puisqu'ils n'avaient pas vocation à s'effacer avant un certain temps pour remplir leur rôle, ils avaient tendance à rapidement s'accumuler. Les décalques avaient également tendance à se chevaucher : la possibilité d'éliminer un grand nombre d'ennemis dans une zone restreinte donnait lieu à des chevauchements entre les décalques de sang, ce qui nuisait souvent aux performances du jeu.
Pour faire apparaître une grande quantité de marqueurs de sang (et d'acide !) au sol, nous avons conçu avec Niagara un système qui rend un ensemble de zones dans l'espace du monde sur une cible de rendu. Cet ensemble présente une longueur fixe d'environ 256 entrées et boucles. Une fois ces 256 entrées épuisées, la première entrée sera alors mise à jour pour devenir la 257e, et ainsi de suite. Ce nombre nous paraissait idéal : il permettait de laisser une grande quantité de flaques de sang au sol avant de réutiliser les entrées.
Désormais, lorsqu'un ennemi est tué, il ne crée plus directement de décalque. À la place, il transmet ses informations (position, rayon, type de matériau) au blueprint d'acteur "Splat Manager" que nous avons mis en place et qui reste persistant dans le monde.
Ce gestionnaire transfère ensuite les données vers un système général Niagara, qui utilise du langage HLSL (High-Level Shading Language) pour écrire ces zones dans un masque général de cible de rendu, grâce à l'interface de données Grid2D. Ce système repose en grande partie sur le travail de Chris Zuko, directeur technique chez Terrible Posture Games. Nous remplissons la cible de rendu avec la distance qui sépare le point de chaque flaque de sang, cette plage de distance étant déterminée par le rayon d'entrée. Ces distances sont ensuite rassemblées pour former un masque cohérent.
Une fois déformé, le masque final est ensuite utilisé pour fusionner les attributs de matériau dans le shader de surface, afin de lui conférer un aspect gore et sanglant !