Erstellen von Tracks im Schnee in Unreal Engine 4


Wenn Sie moderne AAA-Spiele spielen, haben Sie möglicherweise eine Tendenz zur Verwendung schneebedeckter Landschaften bemerkt. Zum Beispiel sind sie in Horizon Zero Dawn , Rise of the Tomb Raider und God of War . In all diesen Spielen hat der Schnee eine wichtige Eigenschaft: Sie können Spuren hinterlassen!

Dank dieser Interaktion mit der Umgebung wird das Eintauchen des Spielers in das Spiel verbessert. Es macht die Umgebung realistischer und seien wir ehrlich - es ist einfach interessant. Warum lange Stunden damit verbringen, einen neugierigen Mechaniker zu erschaffen, wenn Sie den Spieler einfach zu Boden fallen lassen und Schneeengel machen können?

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen Sie mithilfe der Szenenaufnahme Fußabdrücke, um Objekte in Bodennähe zu maskieren
  • Verwenden Sie eine Maske mit Geländematerial, um verformbaren Schnee zu erzeugen
  • Zeigen Sie zur Optimierung Fußabdrücke im Schnee nur neben dem Spieler an

Hinweis: Es versteht sich, dass Sie bereits mit den Grundlagen der Arbeit mit Unreal Engine vertraut sind. Wenn Sie neu sind, lesen Sie unsere Unreal Engine- Lernserie für Anfänger .

An die Arbeit gehen


Laden Sie Materialien für dieses Tutorial herunter. Entpacke sie, gehe zu SnowDeformationStarter und öffne SnowDeformation.uproject . In diesem Tutorial erstellen wir Spuren mit Hilfe eines Charakters und mehrerer Kästchen.


Bevor wir beginnen, müssen Sie wissen, dass die Methode aus diesem Lernprogramm nur Spuren in einem bestimmten Bereich und nicht auf der ganzen Welt speichert, da die Geschwindigkeit von der Auflösung des Ziel-Renderings abhängt.

Wenn wir beispielsweise Spuren für einen großen Bereich speichern möchten, müssen wir die Auflösung erhöhen. Es erhöht aber auch den Einfluss der Szenenaufnahme auf die Spielgeschwindigkeit und die Speichergröße für das Ziel-Rendering. Zur Optimierung müssen Sie den Umfang und die Auflösung einschränken.

Nachdem wir uns damit befasst haben, wollen wir herausfinden, was nötig ist, um die Fußabdrücke im Schnee zu erkennen.

Umsetzung von Fußabdrücken im Schnee


Das erste, was Sie zum Erstellen von Traces benötigen, ist das Ziel-Rendering . Das Rendering-Ziel ist eine Maske in Graustufen, in der Weiß das Vorhandensein einer Spur und Schwarz das Fehlen einer Spur anzeigt. Dann können wir das Ziel-Rendering auf den Boden projizieren und damit die Texturen mischen und die Eckpunkte verschieben.


Das zweite, was wir brauchen, ist eine Möglichkeit, nur Objekte zu maskieren, die den Schnee beeinflussen. Dies kann implementiert werden, indem zuerst die Objekte in der benutzerdefinierten Tiefe gerendert werden. Anschließend können Sie die Szenenaufnahme mit dem Nachbearbeitungsmaterial verwenden , um alle in der benutzerdefinierten Tiefe gerenderten Objekte zu maskieren. Anschließend können Sie die Maske im Zielrender anzeigen.

Hinweis: Bei der Szenenaufnahme handelt es sich im Wesentlichen um eine Kamera mit der Fähigkeit, ein Ziel-Rendering auszugeben.

Der wichtigste Teil bei der Aufnahme einer Szene ist ihre Position. Das folgende Beispiel zeigt ein Ziel-Rendering, das in einer Draufsicht erfasst wurde. Hier werden ein Charakter und Kästchen einer dritten Person maskiert.


Auf den ersten Blick passt eine Aufnahme mit Draufsicht zu uns. Formulare sehen für Netze angemessen aus, daher sollte es keine Probleme geben, oder?

Nicht wirklich. Das Problem bei der Erfassung aus der Draufsicht besteht darin, dass unter der breitesten Stelle nichts erfasst wird. Hier ist ein Beispiel:


Stellen Sie sich vor, die gelben Pfeile gehen bis zum Boden. Bei einem Würfel und einem Kegel bleibt die Pfeilspitze immer im Objekt. Bei einer Kugel entsteht jedoch der Punkt, wenn sie sich der Erde nähert. Laut Kamera befindet sich die Spitze jedoch immer innerhalb der Kugel. So sieht die Kugel für die Kamera aus:


Daher ist die Kugelmaske größer als sie sollte, selbst wenn die Kontaktfläche mit der Erde klein ist.

Darüber hinaus wird dieses Problem durch die Tatsache ergänzt, dass es für uns schwierig ist festzustellen, ob das Objekt das Land betrifft.


Um diese beiden Probleme zu lösen, können Sie die Erfassung von unten verwenden .

Unterer Griff


Die Aufnahme von unten ist wie folgt:


Wie Sie sehen können, erfasst die Kamera jetzt die untere Seite, dh diejenige, die den Boden berührt. Dies beseitigt das Problem des "breitesten Bereichs", der bei der Aufnahme von oben auftritt.

Um festzustellen, ob ein Objekt den Boden berührt, können Sie mit Nachbearbeitungsmaterial eine Tiefenprüfung durchführen. Es wird geprüft, ob die Tiefe des Objekts größer als die Tiefe der Erde ist und ob sie unter einem vorgegebenen Versatz liegt. Wenn beide Bedingungen erfüllt sind, können wir dieses Pixel maskieren.


Unten sehen Sie ein Beispiel in einem Motor mit einer Erfassungszone von 20 Einheiten über dem Boden. Beachten Sie, dass die Maske nur angezeigt wird, wenn das Objekt einen bestimmten Punkt passiert. Beachten Sie auch, dass die Maske weißer wird, wenn sich das Objekt dem Boden nähert.


Erstellen Sie zunächst ein Nachbearbeitungsmaterial, um eine Tiefenprüfung durchzuführen.

Erstellen von Tiefenprüfmaterial


Um eine Tiefenprüfung durchzuführen, müssen Sie zwei Tiefenpuffer verwenden - einen für den Boden und einen für Objekte, die den Schnee beeinflussen. Da beim Erfassen der Szene nur die Erde gesehen wird, leitet die Szenentiefe die Tiefe für die Erde ab. Um die Tiefe für Objekte zu erhalten, rendern wir sie einfach in die benutzerdefinierte Tiefe .

Hinweis: Um Zeit zu sparen, habe ich die Zeichen und Felder bereits in Benutzerdefinierte Tiefe gerendert. Wenn Sie andere Objekte hinzufügen möchten, die sich auf den Schnee auswirken, müssen Sie den Render CustomDepth Pass für diese aktivieren .

Zunächst müssen Sie den Abstand jedes Pixels zum Boden berechnen. Öffnen Sie Materials \ PP_DepthCheck und erstellen Sie Folgendes:


Als Nächstes müssen Sie eine Erfassungszone erstellen. Fügen Sie dazu die markierten Knoten hinzu:


Befindet sich das Pixel nun innerhalb von 25 Einheiten von der Erde, wird es in der Maske angezeigt. Die Maskierungshelligkeit hängt davon ab, wie nahe das Pixel am Boden liegt. Klicken Sie auf Übernehmen und kehren Sie zum Haupteditor zurück.

Als nächstes müssen Sie eine Szenenaufnahme erstellen.

Szenenaufnahme erstellen


Zunächst benötigen wir ein Ziel-Rendering, in dem eine Szenenaufnahme erfasst werden kann. Wechseln Sie zum Ordner RenderTargets und erstellen Sie ein neues Renderziel mit dem Namen RT_Capture .

Jetzt erstellen wir eine Szenenaufnahme. In diesem Tutorial fügen wir dem Entwurf eine Szenenaufnahme hinzu, da wir später ein Skript dafür benötigen. Öffnen Sie Blueprints \ BP_Capture und fügen Sie die Scene Capture-Komponente 2D hinzu . Nennen Sie es SceneCapture .


Zuerst müssen wir die Fangkurve so einstellen, dass sie auf den Boden schaut. Gehen Sie zum Detailfenster und stellen Sie die Drehung auf (0, 90, 90) .


Als nächstes kommt die Art der Projektion. Da die Maske eine 2D-Darstellung der Szene ist, müssen wir die perspektivische Verzerrung beseitigen. Setzen Sie dazu Projektion \ Projektionstyp auf Orthographisch .


Als nächstes müssen wir der Szenenaufnahme mitteilen, auf welches Ziel-Rendering aufgenommen werden soll. Wählen Sie dazu den Wert von RT_Capture für Scene Capture \ Texture Target .


Schließlich müssen wir Material zur Tiefenprüfung verwenden. Fügen Sie PP_DepthCheck zu den Rendering-Funktionen \ Nachbearbeitungsmaterialien hinzu. Damit die Nachbearbeitung funktioniert, müssen wir auch die Szenenaufnahme \ Aufnahmequelle in RGB in Final Color (LDR) ändern.


Nachdem die Szenenaufnahme konfiguriert ist, müssen wir die Größe des Aufnahmebereichs angeben.

Festlegen der Größe des Erfassungsbereichs


Da es besser ist, niedrige Auflösungen für das Ziel-Rendering zu verwenden, müssen wir den Speicherplatz effizient nutzen. Das heißt, wir müssen auswählen, welchen Bereich ein Pixel abdecken soll. Wenn beispielsweise die Auflösungen des Erfassungsbereichs und des Ziel-Renderings gleich sind, erhalten wir ein Verhältnis von 1: 1. Jedes Pixel deckt einen 1 × 1-Bereich ab (in Einheiten der Welt).

Für Strecken im Schnee ist kein Verhältnis von 1: 1 erforderlich, da wir solche Details höchstwahrscheinlich nicht benötigen. Ich empfehle die Verwendung größerer Verhältnisse, da Sie so den Aufnahmebereich bei niedriger Auflösung vergrößern können. Aber machen Sie das Verhältnis nicht zu groß, sonst gehen die Details verloren. In diesem Tutorial verwenden wir ein Verhältnis von 8: 1, dh die Größe jedes Pixels beträgt 8 × 8 Einheiten der Welt.

Sie können die Größe des Erfassungsbereichs ändern, indem Sie die Eigenschaft Szenenerfassung \ Orthobreite ändern. Wenn Sie beispielsweise einen Bereich von 1024 × 1024 erfassen möchten, setzen Sie den Wert auf 1024. Da wir ein Verhältnis von 8: 1 verwenden, setzen Sie den Wert auf 2048 (die Standardauflösung des Ziel-Renderings beträgt 256 × 256).


Dies bedeutet, dass die Szenenaufnahme den Bereich von 2048 × 2048 erfasst. Es ist ungefähr 20 × 20 Meter.

Das Grundmaterial benötigt auch Zugriff auf die Erfassungsgröße, um das Ziel-Rendering ordnungsgemäß zu projizieren. Der einfachste Weg, dies zu tun, besteht darin, die Erfassungsgröße in der Materialparametersammlung zu speichern. Dies ist im Wesentlichen eine Sammlung von Variablen, auf die jedes Material zugreifen kann.

Speichergröße speichern


Kehren Sie zum Haupteditor zurück und wechseln Sie zum Ordner Materialien . Erstellen Sie eine Materialparametersammlung , die sich in Materialien und Texturen befindet . Benennen Sie es in MPC_Capture um und öffnen Sie es.

Erstellen Sie dann einen neuen Skalarparameter und nennen Sie ihn CaptureSize . Mach dir keine Sorgen über die Einstellung seines Wertes - wir werden es in Blunts tun.


Gehen Sie zurück zu BP_Capture und fügen Sie die markierten Knoten zum Event BeginPlay hinzu . Setzen Sie Collection auf MPC_Capture und Parametername auf CaptureSize .


Jetzt kann jedes Material den Wert von Ortho Width erhalten, indem es ihn aus dem CaptureSize- Parameter liest. Bisher sind wir mit der Erfassung der Szene fertig. Klicken Sie auf Kompilieren und kehren Sie zum Haupteditor zurück. Der nächste Schritt besteht darin, den Zielputz auf den Boden zu projizieren und damit die Landschaft zu verformen.

Landschaftsverformung


Öffnen Sie M_Landscape und gehen Sie zum Detailfenster . Stellen Sie dann die folgenden Eigenschaften ein:

  • Wählen Sie für zweiseitig die Option Aktiviert aus . Da die Erfassung der Szene von unten „aussieht“, werden nur die Rückseiten der Erde angezeigt. Standardmäßig rendert die Engine die Rückseiten von Netzen nicht. Dies bedeutet, dass die Tiefe der Erde nicht im Tiefenpuffer gespeichert wird. Um dies zu beheben, müssen wir die Engine anweisen, beide Seiten des Netzes zu rendern.
  • Wählen Sie für D3D11-Tessellation Flache Tessellation aus (PN-Dreiecke können ebenfalls verwendet werden). Durch Tessellation werden die Maschendreiecke in kleinere Dreiecke zerlegt. Dies erhöht im Wesentlichen die Auflösung des Netzes und ermöglicht es uns, beim Verschieben der Eckpunkte feinere Details zu erhalten. Ohne dies ist die Dichte der Peaks zu gering, um glaubwürdige Spuren zu erzeugen.


Sobald Tessellationen aktiviert sind, werden World Displacement und Tessellation Multiplier aktiviert .


Der Tessellationsmultiplikator steuert den Grad der Tessellation. In diesem Tutorial wird dieser Knoten nicht verbunden, dh wir verwenden den Standardwert ( 1 ).

Die Weltverschiebung erhält einen Vektorwert, der beschreibt, in welche Richtung und um wie viel der Scheitelpunkt bewegt werden soll. Um den Wert für diesen Kontakt zu berechnen, müssen wir zuerst den Zielrender auf den Boden projizieren.

Projektziel rendern


Um das Ziel-Rendering zu projizieren, müssen Sie seine UV-Koordinaten berechnen. Erstellen Sie dazu das folgende Schema:


Was ist hier los:

  1. Zuerst müssen wir die XY-Position des aktuellen Scheitelpunkts ermitteln. Da wir von unten erfassen, wird die X-Koordinate umgedreht, sodass Sie sie zurückdrehen müssen (wenn wir von oben erfassen würden, würden wir dies nicht benötigen).
  2. Dieser Teil führt zwei Aufgaben aus. Erstens zentriert es das Ziel-Rendering so, dass seine Mitte in den Koordinaten (0, 0) des Weltraums liegt. Sie konvertiert dann die Koordinaten vom Weltraum in den UV-Raum.

Erstellen Sie als Nächstes die ausgewählten Knoten und kombinieren Sie die vorherigen Berechnungen wie unten gezeigt. Wählen Sie als Texturbeispiel RT_Capture aus .


Dadurch wird der Zielrender auf den Boden projiziert. Alle Scheitelpunkte außerhalb des Erfassungsbereichs werden jedoch die Kanten des Ziel-Renderings abtasten. Dies ist tatsächlich ein Problem, da das Ziel-Rendering nur für Scheitelpunkte innerhalb des Erfassungsbereichs verwendet werden sollte. So sieht es in einem Spiel aus:


Um dies zu beheben, müssen alle UVs maskiert werden, die außerhalb des Bereichs von 0 bis 1 liegen (d. H. Der Erfassungsbereich). Dafür habe ich die Funktion MF_MaskUV0-1 angelegt . Es gibt 0 zurück, wenn die durchgelassene UV-Strahlung außerhalb des Bereichs von 0 bis 1 liegt, und 1, wenn sie innerhalb des Bereichs liegt. Multiplizieren Sie das Ergebnis mit dem Ziel-Rendering und führen Sie eine Maskierung durch.

Nachdem wir das Ziel-Rendering projiziert haben, können wir damit Farben mischen und Scheitelpunkte verschieben.

Verwenden von Target Render


Beginnen wir mit dem Mischen von Farben. Dazu verbinden wir einfach 1-x mit Lerp :


Hinweis: Wenn Sie nicht verstehen, warum ich 1-x verwende , erkläre ich dies. Dies ist erforderlich, um das Ziel-Rendering zu invertieren, damit die Berechnungen etwas einfacher werden.

Jetzt, wo wir eine Spur haben, wird die Farbe der Erde braun. Wenn keine Farbe vorhanden ist, bleibt sie weiß.

Der nächste Schritt ist die Verschiebung der Eckpunkte. Fügen Sie dazu die ausgewählten Knoten hinzu und verbinden Sie alles wie folgt:


Dadurch bewegen sich alle Schneegebiete um 25 Einheiten nach oben. Gebiete ohne Schnee haben einen Nullpunktversatz, wodurch eine Spur entsteht.

Hinweis: Sie können DisplacementHeight ändern, um die Schneehöhe zu erhöhen oder zu verringern. Beachten Sie auch, dass DisplacementHeight dem Wert des Erfassungsversatzes entspricht. Wenn sie die gleiche Bedeutung haben, erhalten wir die genaue Verformung. Es gibt jedoch Fälle, in denen Sie sie einzeln ändern müssen, sodass ich sie als separate Parameter belassen habe.

Klicken Sie auf Übernehmen und kehren Sie zum Haupteditor zurück. Erstellen Sie eine BP_Capture- Instanz auf der Ebene und geben Sie ihr die Koordinaten (0, 0, -2000) , um sie unter der Erde zu platzieren. Klicken Sie auf Spielen und wandern Sie mit den Tasten W , A , S und D umher, um den Schnee zu verziehen.


Verformung funktioniert, aber es gibt keine Spuren mehr! Dies geschah, weil die Erfassung das Ziel-Rendering jedes Mal überschreibt, wenn die Erfassung durchgeführt wird. Wir brauchen einen Weg, um die Tracks dauerhaft zu machen.

Permanente Spuren erstellen


Um Persistenz zu erzeugen, benötigen wir ein weiteres Ziel-Rendering ( konstanter Puffer ), in dem alle Erfassungsinhalte vor dem Überschreiben gespeichert werden. Dann fügen wir dem Capture einen konstanten Puffer hinzu (nachdem wir ihn überschrieben haben). Wir erhalten eine Schleife, in der jedes Ziel-Rendering in ein anderes schreibt. Auf diese Weise schaffen wir die Beständigkeit der Spuren.


Zuerst müssen wir einen konstanten Puffer erstellen.

Erstellen eines dauerhaften Puffers


Wechseln Sie zum Ordner RenderTargets und erstellen Sie ein neues Renderziel mit dem Namen RT_Persistent . In diesem Tutorial müssen wir die Texturparameter nicht ändern, aber in Ihrem eigenen Projekt müssen Sie sicherstellen, dass beide Zielrender dieselbe Auflösung haben.

Als nächstes benötigen wir Material, das die Erfassung in einen permanenten Puffer kopiert. Öffnen Sie Materials \ M_DrawToPersistent und fügen Sie einen Texture Sample- Knoten hinzu. Wählen Sie die RT_Capture- Textur aus und verbinden Sie sie wie folgt:


Jetzt müssen wir das Zeichenmaterial verwenden. Klicken Sie auf Übernehmen und öffnen Sie BP_Capture . Erstellen Sie zunächst eine dynamische Instanz des Materials (später müssen wir Werte an das Material übergeben). Fügen Sie die markierten Knoten zum Event BeginPlay hinzu :


Render löschen Ziel-2D- Knoten löschen jedes Ziel-Rendering vor der Verwendung.

Öffnen Sie dann die DrawToPersistent- Funktion und fügen Sie die markierten Knoten hinzu:


Als nächstes müssen wir sicherstellen, dass das Zeichnen in den konstanten Puffer in jedem Frame ausgeführt wird, da die Erfassung in jedem Frame erfolgt. Fügen Sie dazu DrawToPersistent zum Ereignistick hinzu .


Schließlich müssen wir dem Rendering der Zielerfassung einen dauerhaften Puffer hinzufügen.

Zum Aufnehmen wieder aufnehmen


Klicken Sie auf Kompilieren und öffnen Sie PP_DepthCheck . Fügen Sie dann die markierten Knoten hinzu. Setzen Sie für Texture Sample den Wert auf RT_Persistent :


Jetzt, da das Ziel sich gegenseitig schreibt, erhalten wir verbleibende Spuren. Klicken Sie auf Übernehmen und schließen Sie das Material. Klicken Sie auf Wiedergabe und hinterlassen Sie Titel!


Das Ergebnis sieht gut aus, aber die resultierende Schaltung funktioniert nur für einen Bereich der Karte. Wenn Sie über den Erfassungsbereich hinausgehen, werden keine Spuren mehr angezeigt.


Sie können dieses Problem lösen, indem Sie den Erfassungsbereich mit dem Player verschieben. Dies bedeutet, dass immer Spuren in dem Bereich angezeigt werden, in dem sich der Spieler befindet.

Hinweis: Während sich die Erfassung bewegt, werden alle Informationen außerhalb des Erfassungsbereichs entfernt. Dies bedeutet, dass wenn Sie zu dem Bereich zurückkehren, in dem bereits Spuren vorhanden waren, diese bereits verschwinden. Im nächsten Tutorial werde ich Ihnen zeigen, wie Sie teilweise beibehaltene Tracks erstellen.

Bewegung erfassen


Sie können entscheiden, dass es einfach genug ist, die XY-Erfassungsposition an die XY-Position des Spielers zu binden. Wenn Sie dies jedoch tun, wird das Ziel-Rendering unscharf. Dies liegt daran, dass wir das Ziel-Rendering mit einem Schritt verschieben, der kleiner als ein Pixel ist. In diesem Fall liegt die neue Pixelposition zwischen den Pixeln. Infolgedessen wird ein Pixel durch mehrere Pixel interpoliert. So sieht es aus:


Um dieses Problem zu beheben, müssen wir die Erfassung in diskreten Schritten verschieben. Wir berechnen die Pixelgröße in der Welt und verschieben dann die Aufnahme in Schritte, die dieser Größe entsprechen. Dann wird niemals jedes Pixel zwischen den anderen liegen, so dass die Unschärfe nicht erscheint.

Erstellen Sie zunächst einen Parameter, in dem der Erfassungsort gespeichert wird. Erdmaterial benötigt es, um Projektionsberechnungen durchzuführen. Öffnen Sie MPC_Capture und fügen Sie einen Vektorparameter namens CaptureLocation hinzu .


Als nächstes müssen Sie das Erdmaterial aktualisieren, um den neuen Parameter zu verwenden. Schließen Sie MPC_Capture und öffnen Sie M_Landscape . Ändern Sie den ersten Teil der Projektionsberechnungen wie folgt:


Jetzt wird das Ziel-Rendering immer auf den Erfassungsort projiziert. Klicken Sie auf Übernehmen und schließen Sie das Material.

Als nächstes werden wir die Erfassung mit einem diskreten Schritt ausführen.

Diskrete Schritterfassungsbewegung


Um die Pixelgröße in der Welt zu berechnen, können Sie die folgende Gleichung verwenden:

(1 / RenderTargetResolution) * CaptureSize 

Um die neue Position zu berechnen, verwenden wir die unten gezeigte Gleichung für jede Komponente der Position (in unserem Fall für die X- und Y-Koordinaten).

 (floor(Position / PixelWorldSize) + 0.5) * PixelWorldSize 

Verwenden Sie sie jetzt für die Blaupausenerfassung. Um Zeit zu sparen, habe ich das SnapToPixelWorldSize- Makro für die zweite Gleichung erstellt. Öffnen Sie BP_Capture und öffnen Sie dann die MoveCapture- Funktion. Erstellen Sie als Nächstes das folgende Diagramm:


Es berechnet den neuen Standort und speichert dann die Differenz zwischen dem neuen und dem aktuellen Standort in MoveOffset . Wenn Sie eine andere Auflösung als 256 × 256 verwenden, ändern Sie den hervorgehobenen Wert.

Fügen Sie als Nächstes die ausgewählten Knoten hinzu:


Diese Schaltung verschiebt die Erfassung mit dem berechneten Versatz. Sie speichert dann den neuen Erfassungsort in MPC_Capture, damit er von Bodenmaterial verwendet werden kann.

Schließlich müssen wir in jedem Frame eine Positionsaktualisierung durchführen. Schließen Sie die Funktion und fügen Sie sie dem Ereignistick vor DrawToPersistent MoveCapture hinzu .


Das Verschieben eines Captures ist nur die halbe Lösung. Wir müssen auch den konstanten Puffer verschieben. Andernfalls sind die Erfassung und der dauerhafte Puffer nicht synchron und führen zu seltsamen Ergebnissen.


Permanente Pufferbewegung


Um einen konstanten Puffer zu verschieben, müssen wir den berechneten Verschiebungsversatz übergeben. Öffnen Sie M_DrawToPersistent und fügen Sie die markierten Knoten hinzu:


Aufgrund dessen wird der konstante Puffer um den Wert des übertragenen Offsets verschoben. Wie im Material der Erde müssen wir die X-Koordinate umdrehen und eine Maskierung durchführen. Klicken Sie auf Übernehmen und schließen Sie das Material.

Dann müssen Sie den Offset übertragen. Öffnen Sie BP_Capture und öffnen Sie dann die Funktion DrawToPersistent . Fügen Sie als Nächstes die markierten Knoten hinzu:


Auf diese Weise konvertieren wir MoveOffset in den UV-Raum und übergeben es dann an das Zeichenmaterial.

Klicken Sie auf Kompilieren und schließen Sie die Blaupause. Klicken Sie auf Spielen und laufen Sie nach Herzenslust! Egal wie weit Sie laufen, Spuren bleiben immer um Sie herum.


Wohin als nächstes?


Das fertige Projekt kann hier heruntergeladen werden.

Es ist nicht erforderlich, die in diesem Tutorial erstellten Tracks nur für Schnee zu verwenden. Sie können sie sogar für Dinge wie zerkleinertes Gras verwenden (im nächsten Tutorial werde ich zeigen, wie Sie eine erweiterte Version des Systems erstellen).

Wenn Sie mit Landschaften und Ziel-Renderings arbeiten möchten, empfehlen wir Ihnen, das Video von Chris Murphy zu sehen, der High-End-Gameplay-Effekte mit Blueprint erstellt . Dieses Tutorial zeigt Ihnen, wie Sie einen riesigen Laser erstellen, der Erde und Gras verbrennt!

Source: https://habr.com/ru/post/de416703/


All Articles