Niagara ist das VFX-System von Unreal Engine der nächsten Generation. Mit Niagara hat der Techniker die Möglichkeit, ohne die Hilfe eines Programmierers selbst zusätzliche Funktionen zu erstellen. Das System ist anpassungsfähig und flexibel. Anfänger können damit beginnen, Vorlagen oder Verhaltensbeispiele zu ändern, und fortgeschrittene Benutzer können ihre eigenen benutzerdefinierten Module erstellen.
Niagara-Kernkomponenten
Das Niagara VFX-System besteht aus vier Kernkomponenten:
- Systeme
- Emitter
- Module
- Parameter
Systeme
Ein Niagara-System ist ein Container für alles, was Sie brauchen, um diesen Effekt zu erzielen. Innerhalb dieses Systems haben Sie möglicherweise verschiedene Bausteine, die aufeinander aufbauen, um Ihnen zu helfen, den Gesamteffekt zu erzielen.
Sie können einige systemtypischen Verhaltensweisen ändern, die dann für alle Elemente dieses Effekts gelten.
Das Panel Zeitachse im System-Editor zeigt, welche Emitter im System enthalten sind, und kann zur Verwaltung dieser Emitter verwendet werden.
Emitter
Emitter sind dort, wo Partikel in einem Niagara-System erzeugt werden. Ein Emitter steuert, wie Partikel entstehen, was mit diesen Partikeln passiert, wenn sie altern, und wie die Partikel aussehen und sich verhalten.
Der Emitter ist in einem Stapelspeicher organisiert. Innerhalb dieses Stapelspeichers befinden sich mehrere Gruppen, in denen Sie Module platzieren können, die einzelne Aufgaben erfüllen. Die Gruppen sind nachstehend aufgeführt.
-
Emitter-Spawn
Diese Gruppe definiert, was passiert, wenn ein Emitter zum ersten Mal auf der CPU erstellt wird. Verwenden Sie diese Gruppe, um anfängliche Einstellungen und Standardeinstellungen zu definieren.
-
Emitter-Update
Diese Gruppe definiert Emitter-Level-Module, die bei jedem Frame auf der CPU auftreten. Mithilfe dieser Gruppe können Sie das Spawnen von Partikeln definieren, wenn Sie möchten, dass sie weiterhin in jedem Frame spawnen.
-
Partikel-Spawn
Diese Gruppe wird einmal pro Teilchen aufgerufen, wenn dieses Teilchen zum ersten Mal entsteht. Hier können Sie die Initialisierungsdetails der Partikel definieren, z. B. den Ort, an dem sie entstehen, welche Farbe sie haben, ihre Größe und mehr.
-
Partikel-Update
Diese Gruppe wird pro Partikel auf jedem Frame aufgerufen. Sie sollten hier alles definieren, was sich Frame für Frame ändern muss, wenn die Partikel altern. Wenn sich beispielsweise die Farbe der Partikel im Laufe der Zeit verändert. Oder wenn die Partikel durch Kräfte wie Schwerkraft, Kräuselgeräusche oder Punktanziehung beeinflusst werden. Möglicherweise möchten Sie sogar, dass sich die Größe der Partikel im Laufe der Zeit ändert.
-
Event-Handler
In der Gruppe Event-Handler können Sie Generate-Ereignisse in einem oder mehreren Emittern erstellen, die bestimmte Daten definieren. Dann können Sie Listening-Ereignisse in anderen Emittern erstellen, die ein Verhalten als Reaktion auf dieses generierte Ereignis auslösen.
-
Render
Die letzte Gruppe ist die Render-Gruppe. Hier definieren Sie die Darstellung der Partikel und richten einen oder mehrere Renderer für Ihre Partikel ein. Möglicherweise möchten Sie einen Mesh-Renderer verwenden, wenn Sie ein 3D-Modell als Grundlage für Ihre Partikel definieren möchten, auf das Sie ein Material anwenden können. Oder Sie möchten vielleicht einen Sprite-Renderer verwenden und Ihre Partikel als 2D-Sprites definieren. Es gibt viele verschiedene Renderer, aus denen Sie wählen und mit denen Sie experimentieren können.
Module
Module bilden die Grundbausteine der Effekte in Niagara. Sie fügen Module zu Gruppen hinzu und bilden so einen Stapelspeicher. Module werden sequentiell von oben nach unten abgearbeitet.
Sie können sich ein Modul als Container vorstellen, in dem sich etwas Mathematik abspielt. Sie übergeben einige Daten an das Modul, führen dann innerhalb des Moduls Berechnungen mit diesen Daten durch und schreiben diese Daten am Ende des Moduls wieder heraus.
Module werden mit High-Level Shading Language (HLSL) erstellt, können aber mithilfe von Knoten visuell in einem Diagramm erstellt werden. Sie können Funktionen erstellen, Eingaben einschließen oder in eine Werte- oder Parameterzuordnung schreiben. Sie können mithilfe eines CustomHLSL-Knotens im Diagramm HLSL-Code sogar inline schreiben.
Sie können auf ein beliebiges Modul eines Emitters in Niagara doppelklicken, um einen Blick auf die Mathematik zu werfen, die darin vonstatten geht. Sie können sogar Ihre eigenen Module kopieren und erstellen. Wenn Sie beispielsweise auf das Add Velocity-Modul doppelklicken, um einen Blick hinein zu werfen, können Sie den Datenfluss überprüfen.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
Das Skript beginnt mit dem Abrufen von Eingaben - der Geschwindigkeitseingabe und dem Koordinatenraum. Es erhält dann die aktuelle Geschwindigkeit der Partikel sowie einen eingegebenen Skalierungsfaktor. Anschließend wird die Eingangsgeschwindigkeit skaliert, in den richtigen Koordinatenraum transformiert und zur aktuellen Geschwindigkeit der Partikel addiert. Sobald diese Arbeit abgeschlossen ist, wird die neue Partikelgeschwindigkeit zurückgeschrieben, sodass alle Module, die Geschwindigkeitsinformationen weiter unten im Stapel benötigen, diese abrufen können.
Alle Module werden mithilfe dieser grundlegenden Methodik erstellt, obwohl für einige die interne Mathematik komplexer sein kann.
Parameter und Parametertypen
Parameter sind eine Abstraktion von Daten in einer Niagara-Simulation. Parametertypen werden einem Parameter zugewiesen, um die Daten zu definieren, die dieser Parameter darstellt. Es gibt vier Arten von Parametern:
- Primitive: Dieser Parametertyp definiert numerische Daten unterschiedlicher Genauigkeit und Kanalbreite.
- Enum: Dieser Parametertyp definiert einen festen Satz benannter Werte und nimmt einen der benannten Werte an.
- Struct: Dieser Parametertyp definiert einen kombinierten Satz von Primitive- und Enum-Typen.
- Data Interfaces: Dieser Parametertyp definiert Funktionen, die Daten aus externen Datenquellen bereitstellen. Hierbei kann es sich um Daten von anderen Teilen von UE4 oder Daten von einer externen Anwendung handeln.
Sie können ein benutzerdefiniertes Parametermodul zu einem Emitter hinzufügen, indem Sie auf das Symbol Pluszeichen (+) klicken und Neuen oder vorhandenen Parameter direkt festlegen auswählen. Dadurch wird ein Modul Parameter festlegen zum Stapelspeicher hinzugefügt. Klicken Sie im Modul Parameter festlegen auf das Symbol Pluszeichen (+) und wählen Sie Parameter hinzufügen, um einen vorhandenen Parameter festzulegen, oder Neuen Parameter erstellen, um einen Parameter festzulegen.
Vorlagen, Assistenten und Verhaltensbeispiele
Wenn Sie zum ersten Mal einen Niagara-Emitter oder ein Niagara-System erstellen, wird ein Dialogfeld mit mehreren Optionen für die Art des Emitters oder Systems angezeigt, das Sie erstellen möchten.
Sie können alle Parameter in der Vorlage ändern. Sie können jedes der Module hinzufügen, ändern oder löschen. In einer Systemvorlage können Sie auch beliebige Emitter hinzufügen, ändern oder löschen. Vorlagen dienen ausschließlich dazu, Ihre Kreativität anzukurbeln und Ihnen etwas zu geben, mit dem Sie sofort arbeiten können.
Systemassistent
Um ein neues Niagara-System zu erstellen, klicken Sie mit der rechten Maustaste in den Inhaltsbrowser und suchen Sie FX > Niagara-System.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
Der Systemassistent bietet folgende Möglichkeiten zum Anlegen eines neuen Systems:
-
Neues System von ausgewählten Emittenten: Wenn Sie diese Option auswählen und auf Weiter klicken, wird eine Liste der verfügbaren Emitter angezeigt. Diese Liste enthält sowohl vorhandene Emitter in Ihrem Projekt als auch Vorlagen-Emitter. Wählen Sie die Emitter aus, die Sie in das neue System aufnehmen möchten, und klicken Sie auf das grüne Pluszeichen-Symbol (+), um sie hinzuzufügen. Klicken Sie dann auf Fertig stellen, um das System zu erstellen. Wenn Sie einen vorhandenen Emitter auswählen, erbt das System von diesen Emittern. Wenn Sie einen Vorlagen-Emitter auswählen, hat das System keine Vererbungen. Außerdem ist der Vorlagen-Emitter eine Instanz, die entweder ausschließlich lokal auf diesem System sein kann, oder Sie können sie als separates Emitter-Asset speichern.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
-
Neues System aus Vorlage oder Verhaltensbeispiel: Wenn Sie diese Option auswählen und auf Weiter klicken, können Sie aus einer Liste von Vorlagen oder Verhaltensbeispielen auswählen, die mehrere häufig verwendete Effektsysteme darstellen. Wie Emitter-Vorlagen kann diese Liste von künstlerischen Leitern oder Kreativdirektoren kuratiert werden. Wenn Sie bei UE neu sind, sehen Sie mit dieser Option ein Beispiel, wie FX-Systeme in Niagara erstellt werden. Verhaltensbeispiele sind einfache Beispiele, die darauf ausgelegt sind, einen isolierten Aspekt des Niagara-Systems hervorzuheben, den Sie untersuchen können, um dieses Verhalten zu entmystifizieren.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
-
Vorhandenes System kopieren: Wenn Sie diese Option auswählen und auf Weiter klicken, wird eine Liste vorhandener Systeme angezeigt. Wählen Sie eine davon zum Kopieren aus und klicken Sie dann auf Fertig stellen.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
-
Leeres System erstellen: Wenn Sie diese Option auswählen, enthält Ihr System keine Emitter oder Emitter-Vorlagen. Diese Option ist nützlich, wenn Sie ein System erstellen möchten, das sich vollständig von Ihren anderen Systemen unterscheidet.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
Emitter-Assistent
Um einen neuen Emitter zu erstellen, klicken Sie mit der rechten Maustaste in den Inhaltsbrowser und wählen Sie FX > Niagara Emitter.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
Der Emitter-Wizard bietet folgende Möglichkeiten zum Erstellen eines neuen Emitters:
-
Neuer Emitter aus einer Vorlage: Wenn Sie diese Option auswählen, können Sie aus einer Liste von Vorlagen auswählen, die verschiedene Arten häufig verwendeter Effekte darstellen. In einem großen Entwicklungsstudio können künstlerische Leiter oder Kreativdirektoren die Vorlagenliste kuratieren und sicherstellen, dass die Best Practices des Unternehmens in die Vorlagen einfließen. Diese Vorlagen bieten auch einen großartigen Ausgangspunkt, wenn Sie bei UE neu sind.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
-
Erben von einem bestehenden Emitter: Wenn Sie diese Option auswählen, können Sie einen neuen Emitter erstellen, der Eigenschaften von einem vorhandenen Emitter erbt. Diese Option macht den neuen Emitter zu einem untergeordneten Element des von Ihnen ausgewählten vorhandenen Emitters. Wenn Sie viele Emitter benötigen, die alle bestimmte Eigenschaften gemeinsam haben, ist dies eine gute Option. Sie können Änderungen am übergeordneten Emitter vornehmen, und alle untergeordneten Emitter spiegeln diese Änderungen wider. Wählen Sie einen übergeordneten Emitter aus, um diese Option zu verwenden.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
-
Bestehenden Emitter kopieren: Wenn Sie diese Option auswählen, können Sie einen neuen Emitter erstellen, der eine Kopie eines bereits erstellten Emitters ist. Dies kann nützlich sein, wenn Sie mehrere ähnliche Emitter erstellen müssen. Klicken Sie nach Auswahl dieser Option auf Weiter, und eine Liste der verfügbaren Emitter wird angezeigt. Sie können dann auswählen, welche Sie kopieren möchten.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
Niagara VFX-Workflow
Systeme erstellen
Erstellen Sie zunächst ein Niagara-System, in dem Sie einen oder mehrere Emitter hinzufügen können. Sie können dann die Eigenschaften jedes Emitters einrichten.
Emitter erstellen oder hinzufügen
Im Niagara-Editor können Sie Ihren Emitter anpassen, indem Sie die Eigenschaften der bereits darin enthaltenen Module ändern, oder neue Module für den gewünschten Effekt hinzufügen. Sie können Emitter auch kopieren und mehrere Emitter zu einem einzigen Niagara-System hinzufügen. Ein Beispiel dafür finden Sie im Sparks-Tutorial.
Module erstellen oder hinzufügen
In Ihrem Emitter können Sie vorhandene Module von Niagara hinzufügen, indem Sie auf das Symbol Pluszeichen (+) der Gruppe klicken, in der Sie das Modul hinzufügen möchten. Niagara wird mit vielen bereits vorhandenen Modulen geliefert, und für die meisten Fälle können Sie Ihre Effekte erstellen, ohne ein benutzerdefiniertes Moduldesign vornehmen zu müssen.
Wenn Sie jedoch Ihre eigenen Module erstellen möchten, kann es hilfreich sein zu verstehen, wie die Daten durch ein Modul fließen.
Datenfluss durch ein Modul. Klicken Sie auf das Bild, um es in voller Größe zu sehen.
- Module sammeln sich in einem temporären Namensraum, dann können Sie weitere Module zusammenstapeln. Solange sie zum gleichen Attribut beitragen, stapeln und sammeln sich die Module richtig an.
- Beim Schreiben eines Moduls stehen Ihnen viele Funktionen zur Verfügung:
- Boolesche Operatoren
- Mathematische Ausdrücke
- Trigonometrie-Ausdrücke
- Kundenspezifische Funktionen
- Knoten, die Boilerplate-Funktionen vereinfachen
- Sobald Sie ein Modul erstellt haben, kann es jeder andere verwenden.
-
Alle Module verwenden HLSL. Der logische Ablauf ist wie folgt:
Ablauf der HLSL-Logik. Klicken Sie auf das Bild, um es in voller Größe zu sehen.
Denken Sie daran, dass jedes Modul, jeder Emitter und jedes System, das Sie erstellen, Ressourcen verbraucht. Um Ressourcen zu sparen und die Leistung zu verbessern, sehen Sie sich die bereits in Niagara enthaltenen Module an, um zu sehen, ob Sie Ihr Ziel erreichen können, ohne ein neues Modul zu erstellen. Dynamic Inputs können hier sehr effektiv eingesetzt werden.
Niagara-Paradigmen
Erbe
- Mit einer flachen Hierarchie können Sie die Assets, die Sie bereits in Ihrer Bibliothek haben, nicht effektiv finden und verwenden, was dazu führt, dass Benutzer diese Assets neu erstellen. Doppelarbeit senkt die Effizienz und erhöht die Kosten.
- Hierarchische Vererbung erhöht die Auffindbarkeit und ermöglicht die effektive Wiederverwendung vorhandener Assets.
- Alles Vererbte kann für einen untergeordneten Emitter in einem System überschrieben werden.
- Module können hinzugefügt oder auf den ursprünglichen Wert zurückgesetzt werden.
- Dies gilt auch für Verhaltensweisen auf Emitterebene wie Spawning, Lebensdauer, Looping, Bursts und so weiter.
Dynamische Inputs
- Dynamische Inputs werden genauso aufgebaut wie Module. Dynamische Eingaben Inputs bieten Benutzern unendliche Erweiterbarkeit für die Vererbung.
- Dynamische Inputs wirken nicht auf eine Parameterkarte, sondern auf einen Wertetyp.
- Jeder Wert kann durch Graph-Logik und benutzerorientierte Werte gesteuert werden.
- Dynamische Inputs liefern die gleiche Leistung wie das Erstellen von Modulen, können jedoch ausgewählt und in den Stapelspeicher abgelegt werden, ohne tatsächlich neue Module zu erstellen.
- Vorhandene Module können auf vielfältige Weise modifiziert und angepasst werden, indem dynamische Inputs verwendet und verkettet werden; Dies kann das Aufblähen des Moduls reduzieren und die Leistung verbessern.
Mikroausdrücke
- Jeder Inline-Wert kann in ein HLSL-Ausdrucksnippet konvertiert werden.
- Benutzer können auf jede Variable im Partikel, Emitter oder System sowie auf jede HLSL- oder VM-Funktion zugreifen.
- Dies funktioniert gut für kleine, einmalige Funktionen, die kein neues Modul benötigen.
Ereignisse
- Ereignisse sind eine Möglichkeit, zwischen Elementen (wie Partikeln, Emittern und Systemen) zu kommunizieren. Ereignisse können jede Art von Daten sein, die in eine Nutzlast (z. B. eine Struktur) gepackt und gesendet werden. Dann kann alles andere auf dieses Ereignis lauschen und Maßnahmen ergreifen.
- Optionen, die Sie verwenden können:
- Führen Sie das Ereignis mithilfe von Particle.ID direkt auf einem Partikel aus.
- Führen Sie das Ereignis auf jedem Partikel in einem System aus.
- Stellen Sie Partikel so ein, dass sie als Reaktion auf das Ereignis spawnen, und ergreifen Sie dann Maßnahmen gegen diese Partikel.
- Ereignisse sind ein spezieller Knoten im Graphen (structs). So verwenden Sie den Ereignisknoten:
- Benennen Sie das Ereignis.
- Fügen Sie beliebige Daten hinzu.
- Fügen Sie dem Emitter-Stack einen Event-Handler hinzu.
- Legen Sie die Optionen für den Event-Handler fest.
- Für Ereignisse gibt es einen separaten Ausführungsstapel.
- Sie können ausgefeilte Graph-Logik in den Event-Handler einbauen.
- Sie können ein ganzes Partikelsystem mit komplexer Logik einrichten und dann eine ganze Reihe von Verhaltensweisen haben, die bei Auslösen des Ereignisses auftreten.
Datenschnittstellen
Es gibt ein erweiterbares System, um den Zugriff auf beliebige Daten zu ermöglichen.
- Zu den willkürlichen Daten gehören Mesh-Daten, Audio, externe DDC-Informationen, Codeobjekte und Textcontainer.
- Datenschnittstellen können beim weiteren Vorgehen für eine größere Erweiterbarkeit als Plugins geschrieben werden.
- Benutzer können alle mit einem Skelettnetz verbundenen Daten abrufen, indem sie eine Skelettnetz-Datenschnittstelle verwenden.
Houdini
- Mit Houdini können Sie Split-Punkte, Spawn-Positionen, Aufprallpositionen, Aufprallgeschwindigkeit, Normalen usw. berechnen.
- Sie können diese Daten dann von Houdini in ein gängiges Containerformat (CSV) exportieren.
- Sie können diese CSV-Datei in Ihr UE4-Projekt in Niagara importieren.