Unsere Herausforderung: Blutige Böden
Eine Herausforderung bei den VFX von Let Them Come: Onslaught war die Anzahl der Gegner auf dem Bildschirm zu jedem Zeitpunkt –und wie viele auf einmal getötet werden konnten. Als wir das Prototyping für das Spiel machten, lösten die Gegner ursprünglich einen "Explodieren"-Gameplay-Hinweis aus, der einen Decal für das Blut auf dem Boden und eine blutige Explosion für das Spielerfeedback erzeugte. Wir stellten rasch fest, dass man besonders mit aufgewerteten Waffen viele dieser Tode gleichzeitig auslösen kann, also mussten wir einige Optimierungen vornehmen, um sicherzustellen, dass die Action so chaotisch wie möglich und nicht durch die Anzahl eingeschränkt wurde.
Was die Blut-Decals angeht: Diese wurden ursprünglich erzeugt, um Überbleibsel des Gemetzels zu hinterlassen und als Spur zu dienen, damit der Spieler weiß, wo er gewesen ist (und was er zurückgelassen hat). Das Problem war, dass viele von ihnen gespawnt wurden – und wir wollten sie eine ganze Weile bestehen bleiben lassen, um effektiv zu sein –, was bedeutete, dass es rasch immer mehr wurden. Wir mussten außerdem das Problem sich überlappender Decals beheben: Man konnte viele Gegner in unmittelbarer Nähe zueinander töten, was wiederum dazu führte, dass sich die Decals überlappten und oft zu Problemen mit der Performance führten.
Zum Erzeugen einer großen Menge Blut- und Säuremarkierungen auf dem Boden nutzten wir Niagara, um ein System zu erstellen, das ein Array von Welt-Bereichen an ein Renderziel übergab. Dieses Array hat eine feste Länge von etwa 256 Einträgen und Schleifen, und sobald die 256 Einträge ausgeschöpft sind, wird der erste Eintrag als 257. Eintrag überschrieben usw. Diese Menge ist eine gute Einstellung, mit der man den Boden vor dem Wiederverwenden der Einträge ordentlich mit Blut tränken kann.
Wenn nun ein Gegner getötet wird, sendet er, anstatt einen Decal zu spawnen, Daten über sich selbst (Position, Radius, Materialtyp) an einen "Splat-Manager"-Blueprint-Actor, der dauerhaft in der Welt vorhanden ist.
Dieser Manager sendet die Daten dann an ein globales Niagara-System, das dann mit High-Level Shader Language (HLSL) diese Bereiche über die Grid2D-Datenschnittstelle in eine globale Render-Zielmaske schreibt. Dieses System basierte stark auf der Arbeit von Chris Zuko, dem Technical Director bei Terrible Posture Games. Wir füllen das Renderziel mit der Entfernung zu jeder Blutlache, wobei der Entfernungsbereich durch den eingehenden Radius definiert wird. Alle diese Entfernungen werden dann kombiniert, um eine einheitliche Maske zu erstellen.
Die endgültige, verzerrte Maske wird dann verwendet, um Material-Attribute im Oberflächen-Shader zu mischen, damit alles nach einem blutigen Gemetzel aussieht!