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:
- 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).
- 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!