Neue Wasser-Engine in Far Cry 5: FP16-Berechnungen auf AMD-Grafikkarten
Kommende Woche erscheint Far Cry 5, Ubisofts neuestes Open-World-Abenteuer. Auf der GDC 2018 in San Francisco stellten die Entwickler eine komplett neue Wasser-Engine vor, die sie für das Spiel entwickelt haben. Und endlich weiß man auch, welche Effekte auf FP16-Berechnungen zurückgreifen und damit AMD-Grafikkarten besonders munden.
Wasser spielt in jedem Far Cry eine große Rolle. Das erste, noch von Crytek entwickelte Action-Adventure versetzte uns auf eine vom feuchten Nass umgebene tropische Insel. Auch in den Nachfolgern ging's immer wieder ins Wasser, das von den Programmierern immer weiter verbessert wurde.
Doch für Far Cry 5 wollten die Entwickler etwas tiefer in die Trickkiste greifen. "In Montana, dem Schauplatz unseres Spiels, gibt es jede Menge Flüsse und Stromschnellen - die hätten wir mit unseren alten Shadern nicht so elegant anlegen können", sagt Branislav Grujic, 3D Team Lead Programmer bei Ubisoft Toronto. "Dazu kommen über 50 Wasserfälle, die wir früher von Hand angefertigt hätten, was enorme Zeit gekostet hätte. Und Schwefelgruben, die mit den alten Routinen nicht möglich gewesen wären."
Eine Spielwelt aus 4.096 Sektoren
Quelle: PC Games Hardware
23 Christian Cutocheras und Branislav Grujic
Die Welt von Far Cry 5 ist in Sektoren aufgeteilt, von denen es 64 mal 64, also 4.096 Stück gibt. Einer von vielen Seen beansprucht etwa 20 bis 30 davon. Und weil es im US-Bundesstaat Montana so viele Gewässer gibt, wäre das in Handarbeit eine Heidenarbeit gewesen.
Die Entwickler griffen daher zur prozeduralen Bewässerung: Für einen Fluss werden beispielsweise Randpunkte auf dem Terrain vermerkt, dann mit dem Fluss-Tool automatisch mit Wasser gefüllt. Prozedurale erstellte Wasserfälle rauschen dank Foam Mapping besonders schick in die Tiefe, während ein Hubschrauber über einer Schwefelgrube Partikel aus dieser loslöst und in die Luft hochwirbelt.
Renderpfad und Schaumkronen
Der Renderpfad, der für die realistische Darstellung des Wassers zuständig ist, nutzt einige Kunstgriffe. Durch geschickte Occlusion-Berechnungen und die Unterteilung in Nah- und Fern-Rendering muss nicht jeder Wassertropfen in der höchsten Detailstufe errechnet werden. Bei den bisher von Hand gezeichneten Normal Maps der Wellen auf der Wasseroberfläche setzte das Team in Far Cry 5 auf deren automatische Generierung per Rauschfunktion, der die Brown'sche Molekularbewegung zugrunde liegt.
An Felsen und Küstengebiete bilden sich oft Schaumkronen, die erneut mit Rauschfunktionen automatisch erstellt werden. Hier griffen die Entwickler zu einem Trick: Die Foam Maps der gesamten Spielwelt sind in die Spielwelt "eingebacken", denn deren individuelle Berechnung hätte zu viel Rechenpower von anderen Prozessen und nicht zuletzt dem eigentlichen Spiel abgezogen. Flow Maps werden ebenfalls automatisch erstellt, aber dynamisch berechnet. Sie basieren auf Spline- und Flood-Fill-Routinen, die in der Nähe des Spielers detaillierter dargestellt werden als in größerer Entfernung.
Schneller dank halber Genauigkeit
Bugbereinigende Wasserglättungen, Beleuchtung und Lichtbrechungen erfordern ebenfalls jede Menge Rechenpower. Christian Cutocheras, Member of Technical Staff, AMD, der den Ubisoft-Designern mit Rat und Tat zur Seite stand, erläutert einen Kunstgriff, auf den die Programmierer setzten: "Zur Optimierung der Shader reduzieren wir die Rechengenauigkeit auf Half Precision mit 16 Bit." Das durfte jedoch nicht automatisch passieren: Entwickler und QA-Team mussten die gesamte Spielwelt nach Bereichen durchforsten, in denen die verringerte Genauigkeit den Spielern nicht auffällt.
Wir erinnern uns: Vor allem für die Radeon-RX-Vega-Grafikkarten ist die Nutzung von FP16-Berechnungen mit halber Genauigkeit interessant, da Vega 10 diese mit doppelter Geschwindigkeit ausführen kann ("Rapid Packed Math"). Polaris kann FP16 auch nativ ausführen, aber nicht mit doppeltem FP32-Durchsatz und spart daher nur Ressourcen.
Für weitere Knobelaufgaben sorgten unterschiedlich tiefe, aufeinanderstoßende Gewässer, deren gelegentliche Kanten per Compute Shader etwas unscharf gemacht wurden, um einen sanfteren Übergang zu gewährleisten. Und dann war da noch die Angelschnur, die sowohl im vorderen als auch im hinteren Teil des Bildes zu sehen ist und munter an der Rute auf und ab tanzte ...
Zwei Millisekunden pro Frame
Das Ziel der Entwickler war, die Wasserberechnungen in zwei Millisekunden pro Frame abzuschließen. Mit 1,919 Millisekunden erreichten sie ihr Ziel, durch den Einsatz von Async Compute gelang es ihnen sogar, diese Zeit um 0,582 auf 1,337 Millisekunden zu senken. Die "teuersten" Operationen, die Tesselation und das Zusammenfügen des Gesamtbildes, ließen sich jedoch davon nicht beeindrucken.
Beeindruckend hingegen, dass das Wassersystem nur ein Teil des großen Ganzen ist - dazu kommen im fertigen Spiel dann beispielsweise noch Partikel und die Aktionen von Spieler und NPCs, die ihrerseits der Umwelt ihren Stempel aufdrücken.
Lichdom, TFX 2.0
Rise of the Tomb Raider, TFX 3.0
Deus Ex: Mankind Divided, PureHair(TFX 3.0)
Mehr gibt's aber tatsächlich nicht. Wobei sich die Anzahl der Titel mit HairWorks auch in Grenzen hält.
Nette Grüße aus dem Norden
Far Cry 5's graphical options menu has been revealed | OC3D News
Monster Hunter Online hatte auch eine TressFX Ankündigung:
AMD Radeon™ to Enable Exciting New Optimizations and Enhancements for Popular China Game, Monster Hunter Online
weis man schon welche API Far Cry 5 nutzt ?
Offiziell gab es dazu keine Aussagen und FP16 könnte man über Shader-Instrinsics auch für DX11 anbieten und die Async Compute Geschichte beim Wasser könnte sich sogar nur auf Konsolen beziehen.
Aktuell ist V4:
GitHub - GPUOpen-Effects/TressFX: DirectX 11 library that provides convenient access to realistically rendered and simulated hair and fur
GDC 2018 Presentations - GPUOpen
Man hat Double-Rate FP16 bei TressFX als Beispiel gezeigt, dass könnte bald in einer neuen Version mit weiteren Verbesserungen einwandern?
Aktuell ist V4:
GitHub - GPUOpen-Effects/TressFX: DirectX 11 library that provides convenient access to realistically rendered and simulated hair and fur
Man muss aber sagen, dass an Wasserstellen die Performance grundsätzlich in Spielen relativ hoch ist, da die gesamte Wasseroberfläche frei von Vegetation und allgemein Objekten ist.
Also selbst wenn das wasser fordernd ist, erwarte ich grundsätzlich steigende FPS, sobald man ans Wasser kommt...
Und wenn das tatsächlich der Fall ist, dann wärs praktisch schon wieder egal, ob das Wasser mit FP16 jetzt noch schneller berechnet wird oder nicht. Wichtig sind die Stellen im Spiel, die die performance am stärksten sinken lassen. Und da muss sich erstmal zeigen, welche Stellen das sind... Ich vermute wie gesagt, dass das Wasser da sowieso nicht dazuzählt.
z.B. Spieler springt ins Wasser = Wellen usw. hier brechen oft die FPS ein.
Oder eine Welle am Meer
Oder teusche ich mich?