
Als der Übergang von DX9 zu DX10 gerade erst begann, erschienen viele Spiele mit kühl modelliertem Wasser mit den richtigen Effekten. Dann war der Unterschied sehr auffällig, besonders wenn man Spiele vergangener Generationen mit derselben Crysis vergleicht. Als ich über das Houdini-Plug-In für UE4 auf eine Anleitung zur Erstellung einer einfachen, aber realistischen Flusssimulation stieß, dachte ich nicht einmal darüber nach und übersetzte sie schnell.
Prolog
- Laden Sie die Assets von Unreal und Houdini herunter. Installationsvideo ist hier .
- Den größten Teil des Projekts folgte ich den Tutorials von Ben Shriver und Andreas Glad .
- Haben Sie keine Angst vor Knoten und Skripten. Es ist nicht so schwierig, wie es scheinen mag.
- Für Wasser habe ich die normale Karte aus Unreal Starter-Inhalten verwendet.
Einführung
Ich heiße Simon Ich habe in jungen Jahren angefangen, auf QBasic und Pascal zu programmieren (hier
Beispiele ). Ich habe sofort erkannt, dass das Codieren schwierig ist, und bin auf 3D-Kunst umgestiegen. Gleichzeitig habe ich mich immer für die technische Seite der Erstellung von Spielen interessiert - es stellte sich heraus, dass ich ein VFX-Künstler wurde. Dieser Beruf verbindet Kunst und Technik gut.
Ich arbeitete als 3D-Künstler bei
Sacred 2 und
X: Rebirth und als VFX-Künstler bei
RiME ,
The Invisible Hours . Jetzt arbeite ich an
WiLD .

Ich habe auch einige persönliche Projekte im Zusammenhang mit der Spieleentwicklung: den
Game Art Trick- Blog, den deutschen
Game Dev Podcast und YouTube-Kanäle mit
Unreal- und
Houdini- Tutorials.
Wir stellen vor: Houdini
Ich habe mich mit Houdini angefreundet, als ich an The Invisible Hours gearbeitet habe. Dann habe ich einen kleinen Flüssigkeitssimulator erstellt, der in Echtzeit angehalten, bereitgestellt und rückwärts abgespielt werden kann. Das Ergebnis war wie folgt:
Quelle: Fluidsimulation aus den unsichtbaren StundenIch hatte keine Ahnung, wie ich Unreal Fluid Modeling hinzufügen sollte. Glücklicherweise wurde in Houdini eine erstaunliche Technologie namens
Vertex-Count-Agnostic Morph Target-Based Fluid Animation implementiert, sodass ich meine Flüssigkeitssimulation zum Spiel hinzufügen konnte. Die Technologie wurde ursprünglich von
Norman Shaar entwickelt .
Quelle: Vertex-Count-Agnostic Morph-Ziele in UE4 Norman ShaarWenn Sie mehr über die Implementierung erfahren möchten, lesen Sie diesen Abschnitt meines Vortrags über Coole Sachen mit Texturen:
Flusseffekt: Beginn des Projekts
Ich wollte lernen, wie man einen prozedural generierten Fluss für die
Realtime VFX River Challenge erstellt , hatte aber keine Ahnung, wo ich anfangen soll. Durch Zufall bin ich auf ein großartiges
Tutorial von Ben Shriver gestoßen , in dem er über Flüsse in Horizon Zero Dawn spricht. Ich war begeistert und habe beschlossen, es zu versuchen!
Übrigens gibt es ein weiteres sehr cooles Tutorial über die Houdini-Flüsse von
Andreas Glad :
Diese Videos haben mir am Anfang sehr geholfen und wurden zur Grundlage.
Ein sehr schwieriger Weg, Landschaften zu bauen
Das Relief war sehr komplex. Ich werde den Erstellungsprozess veranschaulichen, damit jeder versteht:
Quelle: Terrain in Houdini erstellenNur ein Scherz. Es ist zu einfach.
Flusseffekt
Die ersten Schritte wurden zu 100% aus Bens Tutorial kopiert und sind cool. Zuerst erstellen Sie einen Spline und lassen ihn auf den Boden fallen. Dazu lesen Sie die Höhe des Reliefs an den Punkten des Splines und verschieben die Punkte dann auf diese Höhe:

Dann lassen Sie die Spline-Punkte den Hang hinunter „gleiten“, um den Fluss besser in das Gelände zu integrieren:

Tatsächlich rollen sie nicht physisch herunter. Stattdessen werden die Basisnormale der Oberfläche und die Normalen des Punkts verwendet, um die lokale Achse für jeden Punkt zu berechnen (der sich vom Spline entlang der Steigung bewegt). Dann bewegen Sie die Punkte ein wenig entlang der berechneten Achse (dieser Vorgang wird in Bens Video sehr gut gezeigt).
Der nächste Schritt besteht darin, sicherzustellen, dass der Fluss aufgrund der Landschaft nicht flussaufwärts fließt (da es einen kleinen Hügel gibt, auf dem der Fluss fließt).

Ein kleines Python-Skript stellt sicher, dass der Spline-Punkt im 3D-Raum niemals höher als der vorherige ist:

Ein weiterer Trick, um Natürlichkeit zu verleihen, besteht darin, kontinuierliche Hänge zu vermeiden. Lassen Sie stattdessen den Fluss schrittweise fließen (zur besseren Visualisierung zeige ich hier die Geometrie des Flusses, aber in Wirklichkeit arbeiten wir immer noch mit nur einem Spline).

Schließlich kommen wir zu dem Schritt, in dem ich meine eigenen Ideen vorstelle: Fügen Sie dem Spline Farben hinzu, um zu markieren, wo die Steigung ist (grün), wo sie beginnt (türkis) und wo sie endet (rot). Dies wird mir später helfen, verschiedene Wassertexturen zu mischen und Partikelsysteme zu platzieren.

Fahren wir mit der schnelleren Erstellung der Flussgeometrie fort, da dies alles in Bens Video perfekt erklärt wird. Der wichtigste Punkt ist, dass nur die Außenkanten des Flusses wieder mit dem Relief ausgerichtet sind (wie wir es ursprünglich mit dem Spline getan haben):

Geländeverformung je nach Strömung
Auch dies ist Bens 100% iger Workflow, beginnend mit dem Verschieben des Reliefs unter die Geometrie des Flusses, damit sie sich in keiner Weise schneiden:

Dann zeichnen Sie für jeden Punkt im Gelände Strahlen nach oben. Wenn sie in die Geometrie des Flusses fallen, bewegen sich diese Punkte zum Aufprallort:

Jeder Punkt, der nirgendwo getroffen wurde, erhält seine ursprüngliche Höhe.

Dieses GIF zeigt, was passiert, wenn sich der Spline ändert:

Dann wird der Landschaftshöhenbereich in Polygone umgewandelt und neu gemischt. Jetzt kann es in Unreal verwendet werden:

Lassen Sie uns nun über UV-Umwandlung, Materialien, Flusskarten und mehr sprechen.
Flussgeometrie
Die Geometrie des Flusses, die Sie zuvor gesehen haben, wurde nur zum Ausschneiden des Gebiets verwendet. Der echte Fluss ist etwas dünner, hat UV-Strahlung und wurde gespalten (beachten Sie, dass meine Hangfarben immer noch vorhanden sind):

UV-Erzeugung
Da der Spline immer unterschiedlich lang ist, muss sich die UV-Strahlung daran anpassen. Glücklicherweise ist dies in Houdini sehr einfach. Zuerst erstellen Sie eine UV im 0-1-UV-Raum und messen dann die Länge des Splines. Dieser Wert kann zur Skalierung von UV verwendet werden. Hier sehen Sie, wie ich den Spline ändere und unten - wie sich UV automatisch anpasst. Glauben Sie mir, wenn Sie dies einmal versucht haben, werden Sie nie wieder manuell UV erzeugen wollen.

Kanal
Ein weiteres Detail: Ich wollte den Kanal dunkler und nasser machen. Dazu zeichne ich aus jedem Polygon der Landschaft ein paar Strahlen, und wenn ich in den Fluss komme, ordne ich allen Punkten dieses Polygons eine Farbe zu. Die erstellte Maske lautet wie folgt:

Und hier ist ein Beispiel für die Verwendung einer Maske in einem Material, um verschiedene Werte für Unbestimmtheit und Rauheit zuzuweisen:

Flussdiagramm
Das Erstellen einer Flussflusskarte mit Houdini ist sehr einfach. Sie sagen einfach zu dem speziellen Knoten „Dies ist meine Flussgeometrie und dies ist ein Spline, der die Richtung des Flusses angibt“ und dem Ausleger. Die Geometrie erhält plötzlich die Farben der Gipfel, die den Flussfluss darstellen:

Sie können einen weiteren Knoten hinzufügen, mit dem die Flusskarte auf Hindernisse reagiert. Jetzt fließt Wasser um sie herum:

Und das Coolste: Sie können das Backen der Flow Map in Unreal verursachen! Sie müssen nicht zwischen Unreal und Houdini wechseln. Stellen Sie einfach die Schaltfläche Rendern in Houdini als Parameter ein. Hier sehen Sie, wie ich Hindernisse ändere und dann eine neue Flusskarte visualisiere (beachten Sie, dass das Backen länger dauert als bei einem GIF):

Schaummaske
Um auf dem Wasser um Hindernisse herum Schaum zu bilden, verwende ich den sogenannten isoOffset-Knoten. Grundsätzlich wird der Abstand zum Objekt in der Farbe der Flussspitze gespeichert. Dann habe ich etwas Rauschen hinzugefügt und die Maske ist fertig:

Um die Schaumstoffmaske weniger statisch zu machen, verwende ich eine einfache Photoshop-Wolkenvorlage, die ich entlang des Flusses bewege und von der Originalmaske subtrahiere:

Und da es sich um Schaum handelt: Kaskaden haben auch eine einfache Schaumstruktur, die nur am Flussufer zu sehen ist. Die Schaumstruktur rollt schneller als Flusswasser:

Partikelsysteme
Ich habe festgestellt, wo sich der obere und der untere Teil meiner Kaskade befinden, damit ich diese Elemente filtern kann (Linien wurden verwendet, um die Geometrie des Flusses zu erstellen), einen Punkt in ihrer Mitte erstellen und die Dummy-Box hinein kopieren können. Später ersetzen wir es durch das Partikelsystem in Unreal:

Für Partikel um Hindernisse verwende ich einen Knoten namens Intersection Analysis, um den Schnittpunkt von Hindernissen und Fluss zu ermitteln. Diese Schnittkanten haben Punkte. Zu ihrer Zufallszahl kopiere ich erneut die Dummy-Box (die später in Unreal mit dem Partikelsystem ausgetauscht wird):

So sieht es aus, wenn ich Dummy-Boxen in Unreal ersetze:

Exportieren eines Projekts nach Unreal
Die sogenannte Houdini-Engine ist ein Plug-In für Unity, Unreal, 3ds Max, Maya und Cinema 4D und führt ein Netzwerk von Knoten aus, die Sie in Houdini direkt in diesen Programmen erstellen. Ich muss das Gelände und den Fluss erscheinen lassen, um die Houdini-Datei als digitales Asset zu speichern. Es kann wie jede andere Ressource in Unreal importiert und verwendet werden:

Jetzt kann ich die Parameter (die ich in Houdini eingestellt habe) oder den Spline so ändern, dass der Fluss anders fließt:

Materialien werden weiterhin in Unreal erstellt und zugewiesen, aber Sie können sie im Voraus zuweisen (unten ist mein Tutorial dazu).
Sollten wir Houdini-Workflows gleichermaßen untersuchen?
Houdini muss noch viel lernen. Darüber hinaus handelt es sich um neue Entwicklungswerkzeuge, sodass in der Dokumentation Ungenauigkeiten auftreten.
Dies ist jedoch eine häufige Situation für Spieleentwickler. Wir arbeiten ständig mit fortschrittlichen Technologien, die zuerst gezähmt werden müssen. Am wichtigsten: Sie sind nicht allein.
Thinking Procedural Discord ist voll von coolen Leuten, die helfen und unterrichten. In diesen Chats finden Sie sogar SideFX-Entwickler!
Referenzen