Engine & platform

Das neue Wassersystem in Unity 2022 LTS und 2023.1

ADRIEN DE TOCQUEVILLE Graphics Engineer
Jun 28, 2023|18 Min.
Das neue Wassersystem in Unity 2022 LTS und 2023.1
Diese Website wurde aus praktischen Gründen für Sie maschinell übersetzt. Die Richtigkeit und Zuverlässigkeit des übersetzten Inhalts kann von uns nicht gewährleistet werden. Sollten Sie Zweifel an der Richtigkeit des übersetzten Inhalts haben, schauen Sie sich bitte die offizielle englische Version der Website an.

Die meisten High-End-Umgebungen benötigen irgendwann einen Ozean, einen See, einen Fluss oder auch nur einen Pool. Es gibt viele Möglichkeiten, diese mit ein paar Shadern zu emulieren, aber der Aufbau eines gesamten physikalisch basierten, kohärent integrierten Systems in der High Definition Render Pipeline (HDRP) war eine komplexe und zeitaufwändige Aufgabe.

Heute stellen wir das neue Unity Water System vor, das im Rahmen des Tech Streams 2022.2 erstmals in HDRP eingeführt wurde, und konzentrieren uns dabei auf das Rendering. Der kommende Tech Stream 2023.1 erweitert die Funktionen des Systems, um eine bessere Integration in die Welten und das Gameplay zu ermöglichen.

Erstellen Sie mit wenigen Klicks einen Ozean, See, Fluss oder Pool

Für Environment Artists ist es nun ein Leichtes, Wasseroberflächen wie Ozeane, Seen, Flüsse und Pools zu erstellen und zu konfigurieren, die in andere Welten und Gameplay-Elemente wie Boote oder Meeresküsten integriert werden können.

Der erste Schritt besteht darin, Wasser in Ihrem Projekt zu aktivieren:

  • Aktivieren und Konfigurieren von Wasser für jede Qualitätsstufe (Rendering von Pipeline-Assets für jede Qualitätsstufe)
  • Aktivieren Sie Wasser in den Bildeinstellungen Ihrer Kamera(s)
  • Aktivieren Sie Wasser in Ihrer Szene mit einem Wasserrendering-Volumen-Override, der es Ihnen ermöglicht, das Wasserrendering nur dann zu aktivieren, wenn Sie es brauchen, je nachdem, wo sich Ihre Kamera befindet

Sobald das Wasser aktiviert ist, sind Sie nur noch wenige Klicks davon entfernt, über das GameObject-Menü schöne Wasserflächen zu erstellen. HDRP bietet drei Arten von Wasseroberflächen: Tümpel, Fluss und Meer.

Mit wenigen Klicks einen Ozean schaffen
Schnellstart mit Wasserproben
Drei von vier Beispielszenen, die als Teil von Unitys neuem Wassersystem für die High Definition Render Pipeline (HDRP) entwickelt wurden

Das Erstellen von Gewässern ist schnell erledigt, aber das Wassersystem bietet viele Werkzeuge und Optionen, um Wasser in Ihre Welt und Ihr Spiel zu integrieren und anzupassen.

Um einen schnellen Überblick über alle Systeme und Erweiterungen in Aktion zu erhalten, werfen Sie einen Blick auf unsere Wasserproben im HDRP-Paket (öffnen Sie den Paketmanager > wählen Sie das High Definition Render Pipeline-Paket in Ihren Assets > wählen Sie die Wasserproben im Abschnitt Samples).

Wir stellen vier Beispielszenen zur Verfügung.

Die Schwimmbad-Szene zeigt, wie man verschiedene "Pools" in derselben Szene auf verschiedenen Höhen einrichtet und wie man benutzerdefinierte Meshes verwendet, um die Oberflächen mit benutzerdefinierten Formen zu rendern.

Die Inselszene zeigt den Ozeankörper und enthält eine Wassermaske, um den Wellengang um die Insel herum zu entfernen, einen Wasserdeformer, um Wellen zu erzeugen, Abziehbilder, um Schaum auf dem Strand zu platzieren, einen Schaumgenerator, um Schaum hinter den Wellen und um die Insel herum zu erzeugen, und einen Wasserauslöser, um Wasser aus dem Inneren eines Bootes auszuschließen. Ein weiterer Schwerpunkt ist die Nutzung von Burst mit der Wasserabfrage-API zur Parallelisierung der Berechnung mehrerer Objekte (z. B. Möwen), die auf dem Wasser schwimmen.

Der Schauplatz Glacier weist zahlreiche Merkmale auf, darunter:

  • Flussgewässer
  • Wasserdeformer zum Erstellen eines Wasserfalls
  • Strömungssimulation, um das Wasser durch den Gletscher fließen zu lassen
  • Wasserabfrage-API, um Eisberge den Fluss hinunter treiben zu lassen
  • Schaumgenerator zum Aufschäumen hinter Eisbergen
  • Benutzerdefinierter Schaum an den Rändern des Flusses und für den Wasserfallwirbel unter Verwendung von Shader-Grafik und dem Master-Knoten Wasser
  • Abziehbilder zum Animieren von Wasser, das in einen Wasserfall fällt
  • Beispielhafte Ätzmittel zur Projektion außerhalb des Wassers

Die Szene " Wasserlinie" zeigt die Anpassung der Wasseroberfläche und das Unterwasser-Rendering mit einem benutzerdefinierten Pass, der eine größere Unschärfe erzeugt und den Effekt von Wasser auf einem Kameraobjektiv simuliert.

Nachdem Sie nun umfassend informiert sind, wollen wir uns die einzelnen Systeme genauer ansehen.

Physikalisch basiertes Wasserrendering

Das Wassersystem wird mit einem standardmäßigen, physikalisch basierten Wassershader geliefert, der auf der Grundlage eines kürzlich eingeführten Beleuchtungsmodells in HDRP entwickelt wurde und auch für Shader Graph zur Anpassung verfügbar ist. Sie können die Glätte, die Brechung, die Absorption, die Diffusion und die Lichtstreuung einer Wasseroberfläche einstellen.

Die Streufarbe wirkt wie die Grundfarbe des Wassers, so dass Sie dort beginnen müssen, um die allgemeine Stimmung festzulegen. Dann können Sie den Absorptionsabstand und die Brechungsfarbe ändern, um die Transparenz des Wassers und die Tönung der Objekte, die Sie durch die Wasserbrechung sehen, zu steuern. Für ein sauberes Karibisches Meer würde man eine große Absorptionsdistanz in Verbindung mit einer cyanfarbenen Streu- und Brechungsfarbe wählen, während man für einen schmutzigen Fluss eine dunkelbraune Streufarbe und einen quasi-opaken Fluss mit einer kleinen Absorptionsdistanz wählen würde.

Es gibt Einschränkungen bei der Darstellung von Wasser in 2022.2, von denen einige in 2023.1 behoben wurden (Sichtbarkeit von Wasser hinter volumetrischen Wolken, präzise Wasserlinie) oder in 2023.2 behoben werden (verbesserte Leistung, Unterstützung für die Darstellung von transparenten Oberflächen, die Wasser überlagern).

Tauchen wir ein

Wenn Sie, wie wir, ein Fan von Commandant Cousteau sind, werden Sie es genießen, mit dem Water System unter Wasser zu tauchen. Sie kann erkennen, wenn sich die Kamera unter der Wasseroberfläche befindet, und die Unterwasserdarstellung entsprechend den physikalischen Eigenschaften des Wassers simulieren.

Caustics können prozedural generiert werden, um die Lichtbrechung von den auf die Bodenoberfläche projizierten Oberflächen zu simulieren. Beachten Sie, dass die Kaustik als Projektion außerhalb des Wassers wiederverwendet werden kann, z. B. mit Hilfe eines Abziehbilds, um die Kaustik des Wassers zu simulieren, das in einer Höhle reflektiert wird.

Wenn sich die Kamera zwischen Wasser und Außenbereich befindet, wird eine Wasserlinie erzeugt, und das Unterwasser-Rendering wird auf dem untergetauchten Teil der Kamera erstellt. Das Rendering von Wasserlinien wurde in 2023.1 verbessert, so dass Sie es mit einem benutzerdefinierten Pass anpassen können (siehe: Die Beispielszene der Wasserlinie).

Seegang, Aufruhr, Wellen und Strömungen

Was Wasser visuell noch attraktiver macht, ist seine Bewegung. Beachten Sie, dass sich das angebotene Wassersimulationssystem auf die Verformung der Wasserebene und nicht auf die Simulation von Flüssigkeiten oder Spritzern konzentriert.

Parametrisierung der Simulation

Die Wellen werden prozedural mit einer Fast-Fourier-Transformation (FFT)-Simulation erzeugt. Einfach ausgedrückt, funktioniert dies durch die Summierung vieler einfacher Wellen mit unterschiedlichen Frequenzen zu komplexen Wellen. Durch die Steuerung des Frequenzbereichs können Sie die Bewegung Ihres Wassers kontrollieren.

Das System funktioniert durch die Addition verschiedener Frequenzbereiche, die wir Bänder nennen.

Die Gesamtsimulation erfolgt durch Summierung der über bis zu drei Frequenzbänder erzeugten Wellen

HDRP unterstützt bis zu drei Bänder, was die drei Effekte der realen Welt auf Wasser simuliert und die meisten Anwendungsfälle abdeckt:

  • Die Dünung, die die Wellen darstellt, die durch die Wirkung des Mondes und des fernen Windes entstehen. Sie wird ausschließlich durch den Parameter Abstandswind gesteuert und ermöglicht es Ihnen, die Richtung der Dünung zu bestimmen.
  • Unruhe, die das vom Wind erzeugte Chaos darstellt.
  • Wellen, die Strömungen oder lokale Windeffekte darstellen. Dies ist das Band mit den höchsten Frequenzen bzw. den kleinsten Wellen und verleiht dem Wasser feine Details.
Parameter zur Steuerung der Simulation nach Frequenzbereich im Inspektor

Da z. B. Schwimmbecken kleine Störungen aufweisen, wird nur das höchste Frequenzband verwendet: die Wellen. Ein Fluss, der etwas komplexer ist, hat Wellen und ein Schüttelband. Und ein Ozean hat den vollen Frequenzbereich, um alle verschiedenen Wellengrößen abzudecken, die wir im wirklichen Leben sehen. Die Simulation wird auf einer quadratischen Fläche durchgeführt, die dann unendlich oft wiederholt wird.

In Version 2023.1 wird die Unterstützung für Strömungen hinzugefügt, die Ripples entsprechend den Flowmaps fließen lassen. Die Simulation ist vollständig deterministisch, so dass Sie bei Multiplayer-Spielen, Physiksimulationen oder bei der Aufnahme eines kurzen Films oder einer Filmsequenz konsistente Ergebnisse erzielen können.

Präzises und maßstabsgetreues Rendering

Zum Rendern der Deformation der Wasserebene verwendet das System Vertex Displacement und kann entweder auf die bereitgestellte prozedural generierte Geometrie oder auf ein von Ihnen bereitgestelltes benutzerdefiniertes Netz angewendet werden. Die prozedurale Geometrie funktioniert durch die Instanziierung von Quads nebeneinander, ähnlich wie Terrain beim Rendering. Dies kann auch bei der Erstellung eines unendlichen Ozeans oder langer Flüsse verwendet werden, um sicherzustellen, dass sich die Scheitelpunktdichte an die Position der Kamera anpasst.

Um eine feinere Vertex-Dichte für die Darstellung kleiner Ripples zu erreichen, kann HDRP außerdem auf GPU-Tessellation zurückgreifen, eine Methode zur Unterteilung von Dreiecken mit speziellen Shadern. Wenn sich die Kamera in einem bestimmten Abstand zur Wasseroberfläche befindet, können Sie sehen, dass mehr Dreiecke in der Nähe des Standpunkts erzeugt werden.

Das System bietet außerdem verschiedene Optionen, um ein Gleichgewicht zwischen visueller Qualität und Rendering-Leistung herzustellen. Weitere Informationen zur Optimierung der Leistung finden Sie in unserer Dokumentation.

Abtasten der Simulation

Wie soeben erläutert, läuft die Simulation aus Effizienzgründen vollständig auf dem Grafikprozessor (GPU), aber ein Teil davon kann auf der CPU gespiegelt werden, um die Wasserhöhe und die Strömungen zu erfassen (z. B. um Objekte auf einem Fluss schwimmen zu lassen).

Dies ist mit hohen CPU-Kosten verbunden, da viele Berechnungen für die Simulation erforderlich sind, die jedoch durch den Einsatz von Burstified-Jobs zur effizienteren Parallelisierung von Operationen in Grenzen gehalten werden.

Beachten Sie, dass sich die Skripting-API aufgrund von Rückmeldungen zwischen 2022.2 und 2023.1 weiterentwickelt hat und möglicherweise Anpassungen an Ihrem Code zwischen den beiden Versionen erforderlich sind.

Für den Anfang finden Sie zwei Codebeispiele in den Wasserszenen: eines in der Inselszene, in der Burst zur Parallelisierung des Samplings vieler Objekte eingesetzt wird, und das andere in der Gletscherszene, in der gezeigt wird, wie man Eisberge mit einfacherem, nicht parallelisiertem Code mit den Strömungen des Flusses schwimmen und die Kaskade hinunterfallen lässt.

Schaumstoff

Der Schaum simuliert die Blasen, die auf oder unter dem Wasser durch den Wind an den Wellenbergen, durch Wellen, die sich am Ufer oder an Felsen brechen, oder durch ein sich bewegendes Boot oder eine Figur im Wasser entstehen.

Das Wassersystem kann automatisch Schaum auf der Grundlage der Gewässersimulation und der Entfernungswindgeschwindigkeit für Flüsse und Meere erzeugen. Anschließend können Sie die Menge des Schaums und das Aussehen anpassen, indem Sie die Glätte und die Kacheln der Textur auswählen.

Schaum, der bei der Wassersimulation entsteht

Für 2023.1 wurde ein Schaumgenerator hinzugefügt, um Wildwasser für einen Bootsweg, Wellen oder um Felsen im offenen Wasser zu simulieren, so dass Schaum erzeugt werden kann und seinen eigenen Kurs entsprechend den Wellen fortsetzt. In der Beispielszene sehen Sie verschiedene Beispiele für die Verwendung des Schaumgenerators: In der Inselszene wird er verwendet, um Schaum auf der Spitze der brechenden Wellen und um die Insel herum zu erzeugen, und in der Gletscherszene, um Schaum hinter den Eisbergen zu erzeugen, die den Fluss hinuntertreiben.

Schaum, der mit Hilfe von Schaumgeneratoren manuell um Felsen und auf Uferwellen gelegt wird

Mithilfe von Shader Graph können Sie benutzerdefinierten Schaum in den Masterknoten "Wasser" einspeisen und ihn verwenden, um benutzerdefinierten prozeduralen Schaum für Dinge wie Flussränder oder Strudel in einem Wasserfall hinzuzufügen. Im Beispiel "Gletscher" zum Beispiel wird der Strudel am unteren Ende des Wasserfalls durch einfaches Scrollen und Überblenden einer benutzerdefinierten Schaumtextur in Shader Graph erzeugt. Der Schaum an den Rändern wird durch Sampling des Tiefenpuffers auf eine ungefähre Tiefe gebracht.

Schaum, der durch Lesen des Tiefenpuffers im Wasser erzeugt wird Shader Graph

Der Simulationsschaum wird dort eingespritzt, wo die Wellenbewegung es erfordert. Für künstlerische Zwecke können Sie jedoch einige Bereiche mit einer Schaumstoffmaske ausblenden.

Integration mit Welten

Um realistischer zu wirken, müssen die Wasseroberflächen und -simulationen lokal modifiziert werden, damit sie sich besser in Ihre Welt und Ihre Requisiten einfügen. Zum Beispiel, um die Wassergeometrie im Inneren eines Bootes zu entfernen, um brechende Wellen in Ufernähe auf den der Dünung ausgesetzten Seiten hinzuzufügen, um Schaum um Felsen zu erzeugen, um lokale Strömungen zu verändern, um ruhige Bereiche in Buchten zu formen, um einen Wasserfall in der Mitte eines Flusses zu erzeugen oder um kleine Strudel in einem Fluss oder einen riesigen Wirbel in der Mitte des Ozeans zu erzeugen.

Mehrere Komponenten ermöglichen es Ihnen, die Simulation, den Schaum und die Ströme anzupassen, um diese lokalen Variationen oder komplexere Effekte zu erzeugen:

  • Mit der Wassermaske können Sie Wellen, Schwellungen und Schaum auf einem bestimmten Teil der Wasseroberfläche abschwächen oder unterdrücken.
  • Auf dem Wasser können Abziehbilder hinzugefügt werden, um lokalen Schaum zu erzeugen, die Glätte des Wassers zu überschreiben oder kleine lokale Verformungen wie Tröpfchen, Stöße oder benutzerdefinierte Wellen zu simulieren, indem eine Normal Map verwendet wird. Sie können auch verwendet werden, um unabhängig vom Wassersystem Nässe auf dem Sand oder den Felsen (siehe: die Beispielszene Insel) oder Laugen an den Wänden (siehe: die Beispielszene Gletscher) zu simulieren. Beachten Sie, dass die Farbe nicht geändert werden kann, da die Abziehbilder nur als Graustufen behandelt werden.
  • Wasserdeformatoren können die Simulation lokal verändern, um Wellen zu erzeugen, wie im Beispiel der Insel, oder einen Wasserfall, wie im Beispiel des Gletschers gezeigt.
Leistung und Fehlersuche

Wir haben die Leistung der Gletscherszene gemessen, in der die meisten Funktionen auf verschiedenen Konsolen aktiviert sind, und haben auf dieser Grundlage ein Profil des Wassersystems erstellt. Durch Messungen haben wir herausgefunden, dass das Rendern von Wasser auf der GPU der neuesten Generationen etwa 4 ms dauert, während die Konsolen der vorherigen Generationen etwa 7 ms benötigten. Dies hängt natürlich stark von den Qualitätseinstellungen Ihres Wassers, der Komplexität der Simulation und der Anzahl der auf dem Bildschirm angezeigten Wasserpixel ab. Das System ist jedoch leistungsfähig genug, um auf verschiedenen Plattformen reibungslos zu funktionieren.

Darüber hinaus verwendet das System eine zeitversetzte Cluster-Beleuchtung, um die Beschattung zu optimieren und eine große Anzahl von Lichtquellen zu unterstützen. Der größte Teil der Rendering-Zeit geht auf das Konto des GBuffer-Passes, da eine große Anzahl von Vertices erforderlich ist, um schöne Wellen zu erhalten, selbst in der Ferne. Wenn die GPU-Tesselierung auf der Oberfläche aktiviert ist, können diese Kosten durch Ändern der maximalen Tesselierungsstufe und der Überblendungsdistanz, wenn die Kamera weit vom Wasser entfernt ist, gesteuert werden.

Im Abschnitt Verschiedenes jeder Wasseroberfläche haben Sie Zugriff auf verschiedene Debug-Modi, um Strömungsrichtung, Verformung, Schaum und andere Masken, die auf das Wasser angewendet werden, zu visualisieren.

Debug-Modi mit Anzeige von Strom, Verformung, Wassermaske und Schaum
Wasser-Demo

Um zu sehen, wie das Wassersystem in komplexeren Szenen funktioniert, haben wir ein Demoprojekt mit Pool-, Insel- und Flussszenen erstellt.

Insel-Demo-Szene

Die Inselszene zeigt einen unendlichen Ozean mit Wellen, die an den Strand kommen. Es wird gezeigt, wie man die Wassermasken verwendet und Deformer und Schaumgeneratoren mit benutzerdefinierten Rendertexturen erstellt. Außerdem werden Abziehbilder verwendet, um komplexe Interaktionen mit der Wasseroberfläche zu erzeugen, wenn sich eine Welle dem Strand nähert.

Die Pool-Szene zeigt eine Wasseroberfläche in einem Innenraum mit realistischer Farbe, Tiefe, Unterwasser und Kaustik.

Fluss-Demo-Szene

Die Fluss-Szene zeigt die Verwendung von instanzierten Quads und nutzt eine aktuelle Karte, um die Strömung zu simulieren, sowie Abziehbilder, einen benutzerdefinierten Shader-Graphen und einen VFX-Graphen, um die Grafik zu verbessern.

Sie können die Demos auf GitHub herunterladen.

Wie man anfängt

Um das Wassersystem zu verwenden, müssen Sie mit HDRP und Unity 2022.2 oder höher arbeiten.

Während Sie einige der anfänglichen Funktionen in 2022.2 nutzen können, empfehlen wir, mit 2023.1 zu beginnen, wo zahlreiche Verbesserungen und Funktionen hinzugefügt wurden, einschließlich einiger API-Änderungen.

Sie können die Wasserproben über den Paketmanager herunterladen, von wo aus Sie den Beispielcode und die Systeme wiederverwenden können. Sehen Sie sich auch unser WaterScenes-Demoprojekt auf GitHub an, um komplexere Beispiele für die Integration von Wassersystemen zu sehen.

Um mehr zu erfahren, sehen Sie sich Rémis und Adriens Water System Deep Dive von der GDC 2023 an oder lesen Sie unsere Dokumentation.

Was kommt als Nächstes

Zu diesem Zeitpunkt haben wir noch keine neuen Funktionen geplant und konzentrieren uns derzeit auf die Stabilität. Sie können uns Ihr Feedback mitteilen oder Fragen in unserem speziellen Unity-Forenthread stellen.

Um neue Funktionen vorzuschlagen und für kommende Funktionen abzustimmen, die in Erwägung gezogen werden, sehen Sie sich unsere öffentlichen Roadmaps an.

Bitte teilen Sie Ihr Feedback zum neuen Wassersystem im HDRP-Forum mit. Weitere technische Blogs von Unity-Entwicklern finden Sie in der fortlaufenden Serie Tech from the Trenches.