
Erfahrt, wie Housemarque die atemberaubenden VFX und dynamischen Nebel für Saros auf PS5 erschafft.
Dieser Artikel taucht tief in die Technologie hinter den visuellen Effekten von Saros ein. Die Entwickler von Housemarque erklären, wie sie ihre alte Partikel Engine NGP zum neuen, vereinheitlichten Framework GRAPHITE weiterentwickelt haben. Ihr erfahrt technische Details über die zwei neuen Systeme für volumetrischen Nebel und wie die nahtlose Integration von Houdini es ermöglicht, beeindruckende und reaktive Partikeleffekte für die dynamische Welt von Carcosa in Echtzeit zu erschaffen.
Alle Fakten auf einen Blick
Spiel: Saros
Entwickler: Housemarque
Technologie: Neues proprietäres Framework namens GRAPHITE
Highlights: Weiterentwicklung der NGP Partikel Engine, fortschrittlicher volumetrischer Nebel mit zwei separaten Systemen, direkte Integration von Offline Daten aus Houdini für komplexe Partikelsimulationen
Plattform: PlayStation 5
Vor fünf Jahren haben wir darüber geschrieben, wie die visuellen Effekte in Returnal zum Leben erweckt wurden, einschließlich des Echtzeit Voxelizers, der Phrike in volumetrischen Nebel auflöste. Wenn ihr ihn noch nicht gelesen habt, ist dieser Beitrag eine gute Ergänzung zu diesem hier.
Das ist die Geschichte, wie es weitergeht.
Mit Saros haben wir nicht nur das erweitert, was wir für Returnal gebaut hatten. Wir sind einen Schritt zurückgetreten, haben uns dreißig Jahre angesammelte Engine Entwicklung angesehen und sie als ein einheitliches Framework neu aufgebaut, GRAPHITE.
Was wir hatten und warum wir es geändert haben
Unsere proprietäre Partikel Engine, NGP (Next Gen Particles), begann 2013 als Prototyp für Resogun und wuchs mit jedem Spiel danach, bis hin zu Returnal. Bei Saros war NGP zwar ausgereift, aber es war auch das Produkt von zwölf Jahren schrittweiser Entscheidungen, von denen jede im Kontext eines spezifischen, isolierten Spiels getroffen wurde.
Dann hat sich noch etwas geändert, nämlich wir selbst. Der Beitritt zu den PlayStation Studios bedeutete, Erlebnisse auf dem Niveau zu liefern, das unsere Spieler erwarten, und unsere Werkzeuge und die Namen, die wir ihnen gegeben hatten, passten nicht mehr zu dem Studio, das wir gerade wurden.
Hier kommt GRAPHITE ins Spiel. Es bringt GPU Simulation, Rendering, Werkzeuge und DCC Integration unter einer Architektur zusammen, die direkt für die PlayStation Hardware entwickelt wurde. NGP ist nicht verschwunden, es wurde ein Teil von GRAPHITE, weiterentwickelt und leistungsfähiger als je zuvor.
Jedes Spiel von Housemarque hat eine visuelle Identität, die Spieler sofort wiedererkennen. GRAPHITE ist genau das, was das möglich macht.
Und was es eigentlich Bild für Bild tut, wird am besten von den unglaublichen Leuten erklärt, die es gebaut haben.
Sharman Jagadeesan, Graphics Architect, und Konsta Toivanen, Senior Graphics Programmer, werden euch durch den volumetrischen Nebel in Saros führen, wie er sich aus Returnal weiterentwickelt hat und welche zwei Systeme wir gebaut haben, um die Atmosphäre von Carcosa lebendig wirken zu lassen.
Risto Jankkila, VFX Architect, wird erklären, wie wir GRAPHITE mit Daten aus Houdini erweitert haben, einschließlich einer vollständigen Aufschlüsselung der Spawn Sequenz des Spielers.
Volumetrischer Nebel
Nebel in Spielen ist oft nur ein nachträglicher Einfall, etwas, das leeren Raum füllt und die Sichtweite verbirgt. In Saros wollten wir, dass er ein lebendiger Teil der Welt ist, der auf alles reagiert, was in ihr passiert.
In Returnal war unser volumetrischer Nebel bereits reaktiv, aber zu niederfrequent, und eine starke zeitliche Filterung verhinderte, dass er feine Details zeigte. Für Saros haben wir zwei sich ergänzende Lösungen entwickelt. Einen niederfrequenten Nebel für die umgebende Atmosphäre und einen hochfrequenten Nebel für die Charaktereffekte, die in speziellen Story Räumen in Carcosa zu sehen sind.
Niederfrequenter Nebel
Wir haben den Froxel Nebel der Unreal Engine, ein an den Frustum Ebenen ausgerichtetes Voxel Raster, als Ausgangspunkt genommen und wesentliche Teile davon umgebaut, um unserer Vision gerecht zu werden.
Die erste Herausforderung war die zeitliche Stabilität. Der Hysterese Koeffizient steuert, wie viel von den Daten des vorherigen Bildes der Nebel beibehält. Der Standardwert von 90 Prozent in Unreal hält das Bild zwar stabil, macht den Nebel aber bei schnellen Kameras und Lichtern träge. Wir haben ihn auf 50 Prozent gesenkt und blaues Rauschen sowie Tiefenklemmung verwendet, um das daraus resultierende Aliasing unter Kontrolle zu halten.
Saros brauchte auch einen Nebel, der alles von einem schwach dichten Umgebungsnebel bis hin zu einem hoch dichten Bodennebel darstellen konnte. Um diese realitätsgetreu zu rendern, haben wir verschiedene Techniken eingesetzt.
- Wir nutzten eine duale Henyey Greenstein Phasenfunktion, die modelliert, wie Licht je nach Betrachtungswinkel vorwärts und rückwärts durch den Nebel gestreut wird.
- Zudem verwendeten wir einen farbigen Absorptionskoeffizienten, der bestimmt, wie viel Licht absorbiert wird, wenn es durch ein Medium reist, was eine weitaus größere Farbpalette als bei herkömmlichen monochromatischen Lösungen ermöglicht.
- Ein System zur Selbstbeschattung aggregiert einfallende Lichtquellen zu einer dominanten Schattenrichtung und wendet in diese Richtung Ray Marching an.
- Ein physikalisch basiertes Himmelsbeleuchtungs Integral sorgt für eine genaue Beleuchtung in der Ferne, ohne dabei die Leistung zu beeinträchtigen.
Zusammen verliehen diese der Atmosphäre von Carcosa eine geerdete, physikalische Qualität.
Schließlich ist der niederfrequente Nebel vollständig interaktiv. Die Advektion aus unserer dem Spieler folgenden Fluidsimulation fließt direkt in den Dichte Hysterese Schritt ein, wodurch jede Bewegung des Spielers, jedes Projektil, jede Explosion und jeder Feind in Echtzeit im Nebel lesbar wird.
Hochfrequenter Nebel
Für den hochfrequenten Nebel haben wir einen maßgeschneiderten Ray Marcher gebaut. Um die Leistung unter Kontrolle zu halten und gleichzeitig die Wiedergabetreue zu bewahren, gruppieren wir die Streudaten vor dem Marching in Voxel Gruppen von 8x8x8. Dabei zeichnen wir nur die Cluster, die auch Daten enthalten, wobei ein benutzerdefinierter Schwellenwert ihre Anzahl in Schach hält. Während des Marchings werden leere Bereiche zwischen den Clustern übersprungen, was es dem Marcher ermöglicht, größere Schritte zu machen, wo er kann.
Für die Beleuchtung haben wir ein Lichtvolumen pro Streuvolumen evaluiert, das die Bestrahlungsstärke aller Lichtquellen enthält, mit vorberechneter Selbstbeschattung für jedes Lichtvoxel. Wir haben Parameter für Albedo, Absorption, Dichte und Beschattung zugänglich gemacht, sodass die Künstler für jedes Volumen ein Gleichgewicht zwischen der Optik und der Leistung finden können.
Die beiden Nebelsysteme werden dann zusammengeführt. Wir tasten die Streudaten des niederfrequenten Nebels während des hochfrequenten Marchings ab und spielen die Ergebnisse wieder zurück, damit beide Systeme konsistent zueinander bleiben.
Anwendungsfälle
Wir haben den hochfrequenten volumetrischen Nebel in einigen Szenarien eingesetzt. Ein Anwendungsfall war im Prolog in Form eines rauchigen Schädels, an dem Kabel befestigt waren. Ein weiterer Anwendungsfall waren die von uns sogenannten Fata Morganas. In vier unserer Biome gibt es bestimmte narrative Räume, in denen Arjun mit Rauchkreaturen konfrontiert wird.


Reaktivität ist der Schlüssel zu allen visuellen Effekten, die wir machen, und diese Effekte bildeten da keine Ausnahme. Da Einschlagsdaten keine hohe Auflösung benötigen, speichern wir sie in einem separaten, niedrig aufgelösten Volumen, das für den Schädel auch sein niederfrequentes Geschwindigkeitsfeld enthält.
Die folgenden Videos zeigen dieses Volumen auf der linken Seite und kombiniert mit dem Schädel auf der rechten Seite. Einschläge werden als distanzbasiertes Feld evaluiert, das sich im Laufe der Zeit wieder schließt, während die Geschwindigkeit in Farbe dargestellt wird. Ihr könnt sowohl die Einschlagslöcher als auch die Turbulenzen sehen, die sie erzeugen.
Hier ist der endgültige Schadeleffekt ohne die Kabel und anderen sekundären Elemente und in einer anderen Umgebung.
Der Effekt der Fata Morgana ähnelt dem des Schädels. Der Unterschied besteht darin, dass es sogenannte Szenen der Fata Morgana gibt, die sich drehen. Wir haben auch unseren Echtzeit Voxelizer für Skelett Meshes verwendet, um vorhandene Meshes in die Szenen zu bringen. Das folgende Video zeigt einen Durchlauf zwischen dem voxelisierten Ergebnis und dem Endergebnis mit advektierenden Daten aus dem vorherigen Frame.
Hier ist der endgültige Effekt mit zwei rotierenden Szenen der Fata Morgana in einer Testumgebung. Für die Reaktivität haben wir dieselbe Methode angewendet, die bereits beim Schadeleffekt beschrieben wurde.
Erweiterung von GRAPHITE mit Daten aus Houdini
Zusätzlich zur Verbesserung der Renderingqualität unserer volumetrischen Effekte wollten wir unseren Künstlern neue Wege eröffnen, diese zu erstellen.
Zuvor wurden volumetrische Effekte erstellt, indem Ausdrücke für die Dichteemission pro Voxel geschrieben wurden, kombiniert mit Fluidsimulationen, die die Advektion, also die gerichtete Bewegung, des Dichtefeldes antrieben. Da dieser auf Rastern und Voxeln basierende Ansatz der Branchenstandard für visuelle Effekte in Filmen ist, war dies natürlich auch für uns der erste Schritt.
Während der Entwicklung von Returnal stellten wir fest, dass wir eine genauere Kontrolle darüber brauchten, wo genau Dichte erzeugt wird. Die Logik pro Voxel ermöglichte es uns, Dichte auf nahegelegenen Oberflächen oder voxelisierten Meshes abzugeben, aber alles, was komplexer war, brachte einen massiven Overhead zur Laufzeit mit sich. Dichte nur aus dem Arm eines Charakters anstatt aus seinem gesamten voxelisierten Körper abzugeben, war in Echtzeit extrem schwer effizient umzusetzen.
Um dies zu lösen, haben wir uns Partikeln zugewandt, um die volumetrische Dichteemission anzutreiben. Das vollständig programmierbare Partikelsystem von GRAPHITE gab uns eine solide Grundlage für streng kontrollierte Volumen, was zu zwei neuen Werkzeugen führte. Eine Offline Datenpipeline für Houdini ermöglicht es Künstlern, komplexe Daten mit hoher Wiedergabetreue in Houdini vorauszuberechnen, deren Erzeugung zur Laufzeit viel zu rechenintensiv wäre. Ein Punktwolken Rasterisierer zur Laufzeit ist eine hochleistungsfähige Komponente, die simulierte Punkte aufnimmt und diese in Echtzeit direkt in ein Volumen rasterisiert.
Zusammen befreiten uns diese von zustandslosen Ausdrücken pro Voxel und starren Fluidsimulationen. Partikel können nun dem animierten Mesh eines Charakters exakt folgen, was Künstlern die volle Kontrolle über das Verhalten und den Lebenszyklus eines Effekts gibt.
In der Praxis importiert ein Künstler einen animierten Charakter aus Saros nach Houdini und nutzt dessen Werkzeuge, um Startpositionen und Attribute für einen Effekt zu berechnen. Diese gebackenen Daten fließen dann in die Spiel Engine, wo die Echtzeitsimulation übernimmt. Im folgenden Video stimmen die in Houdini erzeugten Punkte genau mit dem Charakter im Spiel überein, und eine maßgeschneiderte Laufzeitlogik löst sie beim Einschlag einer Kugel vom Feind ab. Die anfänglichen Positionen stammen also aus Houdini, aber das Verhalten reagiert in Echtzeit dynamisch auf den Spieler.
Da Künstler jede Art von Daten aus Houdini in GRAPHITE exportieren können, ist es ein Leichtes, über statische Partikel hinauszugehen, die an Charaktere angeheftet sind. Im Folgenden fließen Partikel über die Oberfläche eines animierten Meshes. Die Oberfläche wurde in Houdini in einen 2D Simulationsraum entfaltet, dann exportiert und in Echtzeit wieder auf das animierte Mesh gemappt.
Der Partikelfluss auf Arjuns Körper ist links zu sehen. In der Mitte extrahieren wir eine ISO Oberfläche aus den Partikeln. Auf der rechten Seite haben wir volumetrischen Nebel, der aus dem Partikelfluss emittiert wird.
Ein erstklassiges Beispiel für diese Technologie im Spiel ist die Spawn Sequenz des Spielers in Saros. Dieser komplexe Effekt ist in mehreren Ebenen aufgebaut und beginnt offline in Houdini, wo wir Splines direkt auf dem Skelett Mesh des Spielers generieren. Wenn wir diese Splines in GRAPHITE exportieren, behandeln wir jeden Kontrollpunkt entlang des Splines als individuellen Partikel.
Simulation der Partikelpositionen in Houdini. Diese werden in der Engine nur als Zielpositionen verwendet und die Wachstumsbewegung wird während der Laufzeit dynamisch neu simuliert.
Zur Laufzeit steuert unser programmierbares Partikelsystem, wie sich diese Elemente über die Zeit verhalten. Zuerst driften die Splines völlig frei im Raum und lenken dann nach und nach zurück in Richtung ihrer Zielpositionen auf dem Charakter Mesh.
Wir wollten, dass der Spieler so aussieht, als würde er sich physisch aus einer Pfütze aus wogendem Schleim neu formen. Marching Cubes verliehen uns diesen viskosen Look mit einer festen Oberfläche, und die Steuerung durch Partikel ermöglichte es uns, eine Sequenz aufzubauen, in der sich der Spieler aus einzelnen Strängen zu einem Charakter zusammenfügt.
Ähnlich wie bei den Splines, die die Schleimoberfläche erzeugt haben, können wir auch volumetrische Dichte emittieren. In der Spawn Sequenz haben wir eine Reihe von Partikel Splines in der Nähe des Spielerstandorts platziert und lassen daraus volumetrischen Nebel spawnen, um aufsteigenden Dampf oder Rauch zu simulieren.
Als letzten Schliff haben wir Funkenpartikel hinzugefügt, die mit dem Spielercharakter kollidieren, wobei ein distanzbasiertes Feld verwendet wird, das aus den Kollisionskapseln des Spielers berechnet wird. Das programmierbare Partikelsystem gab uns auch hier wieder jede Menge Flexibilität. Der Spieler zieht Partikel an, aber sobald sie ihm zu nahe kommen, stößt das Spieler Mesh sie ab, was dabei hilft, den Eindruck zu verstärken, aus einer heißen, lavaähnlichen Flüssigkeit aufzutauchen.
Hier ist noch einmal alles kombiniert. Jedes Element wird zur Laufzeit mit 60 Bildern pro Sekunde auf der Basis PS5 simuliert, ganz ohne gebackene Simulationsressourcen. Dies ermöglicht es uns, mehrere Spawn Animationen auszuliefern, von denen jede eine leichte Zufälligkeit aufweist, sodass es jedes Mal ein wenig anders aussieht, wenn der Spieler erwacht.
Was kommt als Nächstes
Wenn man sich durchliest, was Risto, Sharman und Konsta hier aufgeschlüsselt haben, war das Ziel für uns und unsere Technologie immer dasselbe. Jede Simulation, jeder Effekt und jede Rendering Entscheidung existiert nur deshalb, damit ihr etwas fühlt, wenn ihr spielt.
Spiele zu machen bedeutet, an etwas zu glauben, das man noch nicht beweisen kann, und die einzigen Menschen, die es jemals bestätigen können, sind die Spieler selbst. Die Spieler von Saros haben uns in ihren eigenen Worten gesagt, dass das, was wir aufgebaut haben, von Bedeutung ist. Und das bedeutet uns einfach alles.
Unsere Spiele werden weiterhin die Technologie prägen, die wir für GRAPHITE entwickeln, und immer wieder zeigen, was PlayStation als Plattform leisten kann. Wir können es kaum erwarten, diese Zukunft mit euch zu teilen.









Nimm an der Konversation teil
Einen Kommentar hinzufügenSei kein Idiot!
1 Kommentar
Loading More Comments