Arbeiten mit Advanced Reflections in UDK

In diesem Lernprogramm erfahren Sie, wie Sie in Unreal Development Kit sowohl ein dynamisches (Echtzeit-) als auch ein statisches Reflektionsmaterial einrichten und einen Parameter-Schalter erstellen, um von dynamischen zu statischen Reflektionen oder umgekehrt in UDK zu wechseln. Für das Tutorial benutze ich die Februar 2011-Version von UDK.


Laden Sie hochauflösende Bilder für dieses Tutorial herunter.



Reflexion in UDK

In UDK sind Reflections nichts anderes als Umgebungen, die auf der Oberfläche von Objekten invers erfasst und projiziert werden und mithilfe von Screencapture Actors in UDK erfasst werden. Sie müssen diesen Akteur platzieren, um die Szene oder Umgebung Ihrer Map einzufangen, und diese in einem speziellen Texturformat namens Render to Target speichern. Diese Textur sollte sich im Inhaltsbrowser befinden. Es kann sich um eine Echtzeit- oder statische Textur handeln, die in einem Material verwendet werden kann und entsprechend eingerichtet werden kann, um Reflexionen auf bestimmten Netzen wie Metall oder Glas zu erhalten.

Um den Reflection Actor besser zu verstehen und richtig zu funktionieren, benötigen wir eine vollständig entwickelte Szene oder Karte, damit die Umgebungsobjekte erfasst werden. Laden Sie UDK und öffnen Sie die Karte "VCTF-Necropolis.udk" (oder eine beliebige Karte Ihrer Wahl). Stellen Sie jedoch sicher, dass Ihre Karte mit vielen Objekttexturen und Beleuchtung geladen ist. Sie sollte sich im Ordner UT3 im installierten Verzeichnis von UDK befinden. das ist UDKGame \ Content \ Maps \ UT3. Also bereiten Sie Ihre Karte vor.


Gehe zu Ansicht-> Browserfenster und dann Schauspielerklassen. Lassen Sie uns einfach dieses Actor Classes-Fenster mit dem Content-Browser-Fenster zusammenführen, sodass wir direkt aus dem Content-Browser-Fenster zum Actor Classes-Fenster gelangen können. Klicken Sie dazu einfach neben der Menüoption Datei auf das Menü Docking und klicken Sie auf Docked. Sobald Sie auf die angedockte Option klicken, sollte das Fenster ausgeblendet werden. Jetzt können Sie es direkt aus dem Content-Browser laden.


Gehen Sie im Actor Classes-Fenster zu Uncategorized-> SceneCaptureCubeMapActor. Wählen Sie es aus und ziehen Sie es per Drag & Drop in Ihre Szene, genau wie in der Abbildung unten. Stellen Sie einfach sicher, dass Sie diesen Schauspieler in der Mitte vieler Objekte mit guter Beleuchtung platzieren, so dass Sie eine schöne Reflexion erhalten. Oder Sie sehen vielleicht dunkle Flecken auf diesem Schauspieler oder eine einfache schwarze Kugel. Dieser Schauspieler ist im Spiel nicht sichtbar, wenn wir diese Karte spielen.

Nachdem Sie den obigen Darsteller in Ihre Szene gezogen und platziert haben, wird in Ihrer Szene ein schwarzes oder dunkles Kugelobjekt angezeigt. Es ist für die Erfassung der Umgebung und spiegelt sich wie ein Spiegel. Aber jetzt ist die Farbe Schwarz, da dieser Schauspieler alle Reflexionen in einer speziellen Textur-Map namens Scene Render to Target speichert, die dynamisch ist und noch nicht zugewiesen wurde. Erstellen wir dann diese dynamische Textur.


Gehen Sie zum Inhaltsbrowser, und erstellen Sie ein neues Paket mit dem Namen "Advanced_Reflection" (oder einen beliebigen Namen, den Sie möchten.) Klicken Sie mit der rechten Maustaste in den Inhaltsbrowser, und erstellen Sie einen neuen TextureRenderTargetCube. Der Unterschied zwischen Target 2d und Target Cube besteht darin, dass Cube alle Achsen der Umgebung erfasst und im Cubemap-Format speichert. Wo als Ziel 2d nur eine Seite des Gesichts erfasst werden soll, was für einseitige Plane-Oberflächennetze wie Boden- oder Bodennetze geeignet ist.

Nachdem Sie in den Optionen mit der rechten Maustaste auf den neuen TextureRenderTargetCube geklickt haben, wird wie im Bild ein Fenster angezeigt, in dem Sie die Auflösung der Textur festlegen können. Stellen Sie sicher, dass Sie die Auflösung so niedrig wie möglich einstellen, da sonst viel Speicherplatz verbraucht werden kann, wenn Sie sie für eine Echtzeitszene verwenden. Vorerst setzen wir sie jedoch auf 1024, um die hohe Auflösung zu erfassen Statische Reflexionstextur und wir setzen sie später auf 256 zurück. Vergiss nicht, diese Textur mit "RT_reflection" zu benennen. Klicken Sie auf OK und speichern Sie das Paket. Nachdem Sie auf OK geklickt haben, wird im Inhaltsbrowser eine grüne Textur angezeigt. Dies ist Ihre dynamische Textur, die wir im Inhaltsbrowser als RT_reflection bezeichnet haben.

Nun, da wir unsere dynamische Textur vorbereitet haben, wenden wir sie auf den Scene-Map-Cubemap-Darsteller in der Szene an.


Wählen Sie diese neu erstellte dynamische Textur mit dem Namen RT_reflection aus dem Inhaltsbrowser aus. Kehren Sie nun zu Ihrer Szene zurück, und wählen Sie den SceneCaptureCubeMap-Darsteller (die schwarze Kugel) aus, und drücken Sie F4, um die Eigenschaften zu öffnen. Reduzieren Sie einfach Szenenaufnahme-Darsteller-> Szenenaufnahme-> Erfassungseigenschaften und weisen Sie das Texturziel zu, indem Sie auf den grünen Pfeil rechts neben ihm klicken. Sie erhalten eine halbe Reflexion und eine halbe Schwarzfarbe auf der Kugel, um alles darzustellen, was Sie zum Einstellen des Bereichs benötigen, indem Sie den FarPlane-Wert auf einstellen 999999 (oder so hoch wie möglich) wie im obigen Bild. Aktivieren Sie das Kontrollkästchen "Nebel aktivieren" und "Nachbearbeitung aktivieren", wenn sich in Ihrer Szene eine Szene befindet, oder aktivieren Sie das Kontrollkästchen "Hauptszenen-Nachbearbeitungseinstellungen verwenden". Ich habe alle hervorgehobenen Werte im obigen Bild aktiviert.

Wenn Sie jetzt Ihren Inhaltsbrowser öffnen, wird angezeigt, dass die grüne Textur im Inhaltsbrowser jetzt einige Informationen zur Textur anzeigt, und dass diese Informationen die dynamische Reflexion Ihrer Szene sind. Mit dieser Textur können Sie einfach ein Material einrichten und eine neue statische Textur erstellen. Lassen Sie uns ein Material einrichten, aber wir benötigen ein statisches Netz, um dieses Material anzuwenden.


Für dieses Tutorial habe ich zwei einfache Geometrienetze erstellt, die Sphäre und Zylinder sind, wie oben gezeigt. Ich verwende den Zylinder für dynamische Echtzeitreflexionen und die Kugel für statische Reflexionen. Erstellen wir jetzt eine statische Reflexionstextur.


Klicken Sie im Inhaltsbrowser mit der rechten Maustaste auf diese dynamische Textur, und klicken Sie dann auf Neue statische Textur erstellen. In einem Fenster wird die neue statische Textur benannt, die erstellt wird. Nennen Sie es einfach alles, was Sie möchten, aber für dieses Tutorial nenne ich es "ST_reflection" und wie oben in Gruppierungsfeld gezeigt. Geben Sie einfach "Textures" ein, damit die neue Textur in die Unterkategorie Textures of Advanced_reflection aufgenommen wird. Nachdem Sie auf OK geklickt haben, dauert es eine Weile, bis die statische Cubemap-Textur im Inhaltsbrowser erstellt ist. Warten Sie einige Zeit, und speichern Sie das Paket.


Nach dem Erstellen der statischen Cubemap-Textur mit dem Namen ST_reflection sollten Sie auch einige andere Texturen mit demselben Namen verwenden. Löschen Sie sie jedoch nicht, da es sich um eine unterstützende Textur handelt, die alle 6 Seiten der Reflexionsinformationen enthält. Das ist beispielsweise von minus X bis positiv X (mit dem Zusatz Neg und Pos) in Ihrer ST_reflection-Textur kompiliert. Jetzt, da wir dynamische und statische Texturen haben, die RT_reflection und ST_reflection sind, ist es an der Zeit, ihr Material zu erstellen.


Klicken Sie mit der rechten Maustaste in den Inhaltsbrowser, und erstellen Sie ein neues Material mit dem Namen "Reflection" (oder einen beliebigen Namen).


Doppelklicken Sie auf Ihr neu erstelltes Material, das das Reflektionsmaterial ist. Das Einrichten des Reflection-Materials im Material-Editor-Fenster ist einfach, aber hier werden zwei Arten der Reflektion eingerichtet. Das ist dynamische und statische Reflexion, wie Sie das Setup im obigen Bild sehen können. Dies ist nützlich, wenn Sie statische Reflexionen an bestimmten Wänden, Decken oder manchmal am Boden wünschen, wenn Sie ein Instanzmaterial oder ein untergeordnetes Element dieses Materials erstellen, das wir später ausführen werden. Lassen Sie uns also das Reflection-Material für Static und Dynamic einrichten.

Die folgende Methode ist nur die Einrichtung der dynamischen und statischen Reflexion mit einem Parameter "Switch", um die Art der Reflexion zu aktivieren oder zu deaktivieren, die in der Materialinstanz gewünscht wird. Sie können es mit Ihrem aktuellen Material-Setup verwenden oder es mit Ihrem aktuellen Diffus-Metall, Glas oder beliebigem Material mischen.

Dynamisches Material-Setup: In der obigen Abbildung hat das Dynamic-Setup drei Verbindungen und es erfolgt über ReflectionVector> Transforms> RT_reflection. Lassen Sie uns zunächst die dynamische Reflexion einrichten, importieren Sie die dynamische Textur (RT_reflection) in das Material-Editor-Fenster und suchen Sie nach den Transformations- und ReflectionVector-Ausdrücken. Verbinden Sie dann den Reflexionsvektorknoten mit dem Vektortransformationsknoten und anschließend den Vektortransformationsknoten mit den UVs des Textur-Beispielknotens (RT_reflection-Textur). Wählen Sie alle Knoten aus und kommentieren Sie Dyanmic_reflection (Rechtsklick und Neuer Kommentar), und erstellen Sie dann eine Kopie dieser gesamten dynamischen Reflexionseinstellung.

Statisches Material-Setup: Das statische Material-Setup ist fast gleich, mit Ausnahme des Textur-Beispielknotens, der RT_Reflection-Textur. Ersetzen Sie es durch die ST_reflection-Textur des kopierten Dynamic_reflection-Setups. Ändern Sie den Kommentar von Dynamic_reflection zu Static_reflection, genau wie das Setup im obigen Bild.


Jetzt brauchen wir einen Schalter, um von Dynamisch zu Statisch oder umgekehrt zu wechseln. Suchen Sie dazu einfach nach dem Parameter "Static" im Fenster "Material Expression", ziehen Sie ihn in Ihren Bildschirm oder klicken Sie mit der rechten Maustaste in den Materialeditor und wählen Sie dann aus FunctionUtility-> Neuer statischer Schalter. Stecken Sie die ST_reflection auf False und RT_reflection für diese Option auf True. Sie können diesen Switch jetzt in den Diffuse- oder Emissive-Kanal stecken oder sogar mit Ihrem aktuellen Material-Setup mischen, indem Sie den Lerp-Ausdruck (Linear Interpolation) verwenden.

Statischer Schalterparameter: Dieser Schalter hat zwei Eingänge, TRUE und FALSE. Obwohl es selbsterklärend ist, wird es nur FALSE als Standardwert dargestellt und der True-Eingabewert wird ignoriert. Um dies zu ändern, klicken Sie auf den Parameter Static Switch und dann im Eigenschaftenfenster unten, aktivieren oder deaktivieren Sie den Standardwert, wie in der Abbildung oben, und geben Sie ihm einen Parameternamen wie Static / Dynamic. Speichern Sie nun und schließen Sie das Material-Editor-Fenster.


Gehen Sie einfach zum Content Browser und klicken Sie mit der rechten Maustaste auf das neu erstellte Reflexionsmaterial. Klicken Sie dann auf Neue Materialinstanz erstellen (Konstante). Danach erscheint ein Fenster, um die neue Materialinstanz zu benennen. Nennen Sie es einfach "Static_reflection" und folgen Sie dem obigen Vorgang erneut, aber nennen Sie es diesmal "Dynamic_reflection" für die zweite Materialinstanz.


Jetzt haben Sie zwei Instanzen des Materials im Inhaltsbrowser. Doppelklicken Sie auf beide Materialinstanzen.
Wie im obigen Bild ist es auf der linken Seite das statische Material und auf der rechten Seite das Dynamic-Material. Unter Parametergruppen gibt es ein Kontrollkästchen Statisch / Dynamisch. Vergewissern Sie sich, dass das Kontrollkästchen links für das statische Material aktiviert ist. Das rechte Kontrollkästchen wird für das dynamische Material aktiviert (siehe Abbildung oben). Dieser Parameter Statisch / Dynamisch wird nur aufgrund des zuvor im Material-Editor-Fenster erstellten Schalters erstellt. Wenn Sie mit den Einstellungen fertig sind, können Sie diese Materialien nun unseren statischen Netzen zuweisen. Schließen Sie einfach die Fenster des Material-Instanz-Editors.


Wechseln Sie zum Inhaltsbrowser, und suchen Sie nach einem Zylinder- und Sphärennetz, das ich für dieses Lernprogramm erstellt habe. Tragen Sie das Dynamic-Material auf den Zylinder und das Static-Material auf das Sphere-Netz auf, wie in der Abbildung oben gezeigt. Das ist es! Sie sind fast fertig, platzieren Sie diese beiden Netze jetzt in Ihrer Karte.


Platzieren Sie das Zylindergeflecht direkt über dem Reflection-Akteur in Echtzeit und platzieren Sie das Sphere-Netz an einer beliebigen Stelle. Alternativ können Sie es neben dem Zylinder nebeneinander platzieren. Jetzt testen Sie das Spiel in Ihrem Editor.


Wie Sie im obigen Bild sehen können. Wenn Sie auf den Zylinder schauen, werden Sie ein wenig verzerrte Reflexion Ihres Charakters sehen, dies liegt an der Krümmung des Zylinders. Je glatter das Netz ist, desto besser wird die Reflexion sein, aber keine Änderungen an der Reflexion der Kugel. Was immer noch echt aussieht, ist also eine gute Möglichkeit, solche Reflexionen zu simulieren und auch zu optimieren. Dynamische Echtzeitreflexionen werden sehr selten verwendet und es wird viel GPU- und CPU-Leistung benötigt, um jeden Frame zu rendern. Seien Sie vorsichtig mit dem Echtzeitreflexionsschauspieler und seinen Einstellungen. UDK stürzt häufig ab, wenn Sie ständig den Echtzeitreflexionsschauspieler, den Szenenaufnahmeschauspieler, ändern. Stellen Sie sicher, dass Sie jeden Schritt oder die von Ihnen vorgenommenen Änderungen speichern. Testen Sie jedes Mal das Ansichtsfenster und nehmen Sie die entsprechenden Änderungen vor, um den gewünschten Effekt zu erzielen.


Fazit:

Durch die Verwendung dynamischer Echtzeitreflexionen in einer so großen Karte mit einer großen Außenszene oder Umgebung wird Ihr Gedächtnis aufgebraucht und es kann sogar zu einem Absturz kommen. Verwenden Sie es also weise und effizient. Dynamische Reflexionen werden häufig in Innenräumen verwendet, in denen kleine Räume mit vielen Spiegeln eingerichtet sind, die Innenbereiche reflektieren (wie Spiegelklappen und Fenster oder Chrommetalle). Sie können diese Reflexion jedoch immer noch durch einen einfachen Wechsel zu statischen Reflexionen vortäuschen ist eine kluge und bessere Möglichkeit, dies zu tun.

Danke fürs Lesen und einen schönen Tag!


Wir haben einige verwandte Tutorials veröffentlicht, die Sie auch interessieren könnten:

zusammenhängende Posts
  • Schneller Tipp: Optimieren von Texturen im Unreal Development Kit
  • Schneller Tipp: Eine Einführung in das Light-Mapping in UDK
  • Ein umfassendes Handbuch für Anfänger zu UDK
  • Maya To UDK: Importieren von statischen Netzen mit ActorX und FBX
  • Speedtree to UDK: Erstellen einer Palme in Speedtree und Importieren in UDK