Das Prozedurale Inhalt-Generierungs-Framework (PCG) ist ein Werkzeugsatz zum Erstellen eigener prozeduraler Inhalte und Werkzeuge innerhalb der Unreal Engine. Das Framework enthält mehrere PCG-Generierungsmodi, um die Erstellung größerer Welten mit PCG zu erleichtern. Generierungsmodi teilen die Domäne einer PCG-Komponente in ein Raster auf, wobei jede Zelle ihre eigene lokale PCG-Komponente enthält.
Auf einem großen Raster können Sie große, visuell auffällige Meshs wie Bäume und Felsbrocken generieren. Auf einem kleinen Raster können Sie kleinere Details wie Gras, Blumen und Steine erstellen. Dieser Ansatz ermöglicht eine detailliertere Kontrolle über die Ausführung von PCG-Werkzeugen und wird verwendet, um die Performance von Werkzeugen anzupassen, die einen großen Bereich abdecken.
Es gibt vier PCG -Generierungsmodi:
Nicht partitionierte Generierung (Standard)
Verwenden der partitionierten Generierung
Standardmäßig sind alle Meshs, die von einer PCG-Komponente generiert werden, in der Domäne der Komponente enthalten, z. B. einem Volumen oder an einen Spline gebunden. Dieser Modus eignet sich für kleinere PCG Assets, kann aber zu Performance Problemen bei Assets führen, die einen großen Gebiet abdecken. Die Partitionierte Generierung erzeugt die resultierenden Meshs über ein benutzerdefiniertes Raster. Die Daten werden auf die einzelnen Zellen aufgeteilt, wodurch das Streaming mit anderen Systemen wie World Partition und Level-Instanzierung vereinfacht wird.
Aktiviert die Partitionierung im Diagramm
So schalten Sie die partitionierte Generierung für eine PCG-Komponente um:
Wählen Sie das PCG Asset in Ihrem Level aus.
Klicken Sie auf das Kästchen neben Ist partitioniert im Details-Panel.
Rastergröße der Partition konfigurieren
Die Größe des Rasters wird durch die Option Partition Rastergröße auf dem PCGWorldActor definiert:
Um die Rastergröße zu konfigurieren:
Wählen Sie den PCGWorldActor im Outliner aus.
Passen Sie den Wert der Option Rastergröße an.
Wählen Sie jedes PCG Asset in Ihrem Level aus und klicken Sie auf Bereinigung im Details-Panel.
Klicke Sie auf die Schaltfläche Generieren, um das Ergebnis erneut zu generieren.
Verwenden der hierarchischen Generierung
Hierarchische Generierung unterstützt Mesh-Generierung mit PCG in mehreren Maßstäben. Dieser Typ der Generierung überschreibt die Partition-Rastergröße, die bei der partitionierten Generierung mithilfe des Rastergröße-Knotens verwendet wird, und gibt Ihnen die Fähigkeit, Ihre Mesh-Generierung zu verfeinern.
Der Rastergröße-Knoten personalisiert die Größe des Rasters für alle nach ihm generierten Daten und sollte vor allen Sampler-Knoten platziert werden.
Aktivieren Sie die hierarchische Generierung im Diagramm
So schalten Sie die hierarchische Generierung in Ihrem PCG Diagramm ein:
Öffnen Sie Ihr PCG-Diagramm und klicken Sie auf die Einstellungen.
Klicken Sie auf das Kästchen neben der hierarchischen Generierung.
Öffnen Sie die Dropdown-Box für HiGen Standard Rastergröße und wählen Sie einen Wert aus.
Speichern Sie Ihr PCG Diagramm.
Hierarchische Generierung erfordert, dass Ihre PCG-Komponenten partitioniert sind. Stellen Sie sicher, dass partitionierte Generierung in Ihrem Level aktiviert ist, bevor Sie diese Funktion verwenden.
Konfigurieren Sie die Rastergrößen-Einstellungen
Verwenden Sie den Rastergröße-Knoten, um die Generierung Ihrer Meshs im PCG-Diagramm zu personalisieren:
Suchen Sie nach dem Rastergröße-Knoten und fügen Sie ihn vor dem Sampler-Knoten in jeder Verzweigung Ihres PCG-Diagramms hinzu, wo Sie die Standardgröße der hierarchischen Generierung überschreiben wollen.
Klicken Sie auf den Knoten Grid Size und passen Sie die Einstellung HiGen Rastergröße an.
Speichern Sie das Diagramm.
Regenerieren das Ergebnis in Ihrem Level.
Nutzen Sie die Größe Ihres Mesh, um die passende Rastergröße im Diagramm zu bestimmen. Große Meshs sind oft weniger zahlreich als kleinere Meshs und sollten auf einem größeren Raster platziert werden, um das Streaming zu ermöglichen. Kleinere Meshs gibt es mehr und sollten auf einer kleineren Rastergröße platziert werden.
Hierarchische Generierung nutzt die folgenden Ausführungsrichtlinien:
Knoten, die nicht auf einen Rastergröße-Knoten in Ihrem PCG-Diagramm folgen, erzeugen Daten basierend auf dem Wert, der in der Einstellung HiGen Standard Rastergröße definiert wurde.
Daten, die in einer größeren Raster erzeugt werden, sind während der Ausführung eines kleineren Raster als cached Daten verfügbar. Es cascades ein Diagramm von einer größeren Rastergröße zu einer kleineren Rastergröße, aber nicht von einer kleineren Rastergröße zu einer größeren Rastergröße.
Wenn ein Knoten über mehrere Inputs mit Daten aus verschiedenen Rastergrößen verfügt, wird der Output mit der kleinsten Rastergröße generiert.
Verwendung der ungebundenen Rastergröße
Im folgenden Beispiel sampled ein Mesh Sampler-Knoten ein Boulder-Mesh in einem PCG-Volumen:
Der Sampler sampled die Volumeninhalte mit der HiGen Standard Rastergröße und führt die Performance-intensive Operation viermal aus, jeweils eine für jede Rasterzelle im Volumen. Mit dieser Diagramm-Einrichtung verschlechtert sich die Performance mit zunehmender Größe des Volumens.
Für solche Situationen empfiehlt sich, die ungebundene Rastergröße zu verwenden. „Ungebunden“ hebt die Raster für die PCG Komponente auf und führt Knoten in diesem Raster einmal aus. Anschließend können Rasterbeschränkungen mithilfe der Knoten-Rastergröße angewendet werden.
Bei PCG Unterdiagrammen sind die Rastergrößen deaktiviert und verwenden die Rastergröße der Input-Daten oder des Parent-Diagramm.
Es ist möglich, dass Punktdaten dupliziert werden, wenn Daten von einem größeren Raster an ein kleineres Raster übergeben werden. Dies geschieht, wenn Daten, die für ein größeres Raster erzeugt wurden, in jeder Rasterzelle eines kleineren Rasters repliziert werden, was sich erheblich auf die Performance auswirkt. Sie können die duplizierten Daten mit dem Knoten Cull Punkte außerhalb der Actor-Grenzen entfernen, um Punkte aus den Punktdaten zu entfernen, die außerhalb der kleineren Rasterzelle existieren.
Verwendung der Laufzeitgenerierung
Die Laufzeitgenerierung ist ein spezieller Modus für PCG Komponenten, die in der Nähe von PCG Generierungsquellen erstellt und dynamisch bereinigt werden. Es ist als Im-Editor-, PIE- und eigenständige Builds verfügbar.
Die Laufzeitgenerierung lässt sich am effektivsten, wenn sie mit hierarchischer Generierung gepaart wird, um höhere Detailstufen effizient und nur dort zu verteilen, wo sie benötigt werden.
Generierungsquellen
Generierungsquellen sind Punkte in der Welt, die nahe bei der Laufzeit generierte Komponenten dazu veranlassen, Meshs zu generieren.
Ähnlich wie World Partition verwendet PCG die folgenden Streamingquellen:
Editor-Viewport-Quellen: Quellen, die dem aktiven oder fokussierten Editor Viewport angehängt sind, wenn die Option Editor-Viewport als Generierungsquelle behandeln auf dem PCGWorldActor aktiviert ist.
Spieler-Quellen: Quellen, die an Player-Controllern im Level angehängt sind.
World Partition Streamingquellen: Quellen, die an alles angehängt sind, was als Streamingquelle aus dem World Partition System agiert (PlayerController, WorldPartitionStreamingSourceComponent usw.).
PCG Generierungs-Quell-Komponenten: Quellen, die als allgemein Quelle verwendet werden und an jeden Actor ankoppeln können.
Die Einstellung Generierungsradien im PCG Diagramm legt den Bereich fest, in dem sich Generierungsquellen auf PCG Komponenten auswirken, und wird für jede Größe des Rasters festgelegt. Wenn eine zur Laufzeit generierte PCG-Komponente innerhalb dieses Radius liegt, wird sie zur Generierung eingeplant. Wenn sich eine Komponente nicht länger innerhalb dieses Radius (skaliert durch den Bereinigung Radius Multiplikator) befindet, wird sie bereinigt.
Die Generierung von Radien kann auch für jede PCG-Komponente im Level mithilfe des Details-Panels überschrieben werden, indem die Einstellung Generierungsradien überschreiben umgeschaltet wird.
Der Basis- Generierungsradius wird für nicht-partitionierte Komponenten angewendet, und der Ungebunden-Raster-Level für partitionierte Komponenten der hierarchischen Generierung.
Es wird empfohlen, kleine Rastergrößen zu vermeiden, die einen größeren Generierungsradius als größere Rastergrößen haben. Der Generierungsradius sollte im Vergleich zum vorherigen größer werden.
Zeitplanungsrichtlinien
Zeitplanungsrichtlinien werden verwendet, um praktische Regeln für die Reihenfolge bereitzustellen, in der zur Laufzeit generierte Komponenten generiert werden sollen. Die Standard-Planungsrichtlinie verwendet Entfernung und Blickrichtung, um Komponenten zu priorisieren, die sich vor und in der Nähe einer Generierungsquelle befinden.
Planungsrichtlinien werden für jede Komponente einzeln festgelegt und finden Sie im Details Panel der PCG Komponente.
In Unreal Engine 5.5 hat die Hinzufügung von „HiGen Rastergröße Exponentiell“ die relative Bedeutung der Richtungsgewichtung in der Zeitplanungsrichtlinie erheblich erhöht. Wenn Ihr Inhalt vor Version 5.5 erstellt wurde, müssen Sie möglicherweise das Gewicht verringern.
Frustum Culling verwenden
Wenn Sie Frustum Culling verwenden im Details-Panel eines PCG Assets -Panel auswählen, überprüft dieses Asset vor der Erstellung einer Komponente, ob diese Komponente basierend auf einem bestimmten Frustum sichtbar ist. Zum Beispiel, wenn die Spielerkamera das Frustum bereitstellt, würde das Asset eine Komponente ausblenden oder entscheiden, diese nicht zu generieren, basierend auf der Perspektive der Spielerkamera.
Verwenden Sie die Steuerelemente Generiere Grenzen Modifikator und Bereinigung Grenzen-Modifikator, damit Komponenten generiert oder bis zu einer bestimmten Entfernung bereinigt werden, bevor sie in den Sichtbereich Frustum gelangen. Dies verhindert, dass Komponenten plötzlich auftauchen, während die Kamera auf sie gerichtet ist. Der Bereinigungs-Modifikator ist immer größer als oder gleich dem Generieren-Modifikator.
Laufzeitgenerierung aktivieren
So schalten Sie die Laufzeitgenerierung in Ihrem PCG-Diagramm ein:
Ändern Sie im Details-Panel Ihres PCG-Assets den Generierungs-Trigger auf Zur Laufzeit generieren.
So testen Sie die Laufzeitgenerierung im Viewport:
Wählen Sie den PCGWorldActor im Outliner aus.
Stelle sicher, dass das Kästchen für Editor-Viewport als Generierungsquelle behandeln aktiviert ist.
Sie sollten die Meshs sehen, die in einem Radius um das Kamerablickfeld im Viewport erstellt wurden.
Laufzeitgenerierung konfigurieren
Die Generierungsradien werden für jedes Rastergrößen-Level in den PCG-Diagrammeinstellungen definiert oder können im Details-Panel einer PCGComponent angepasst werden, um den Anforderungen Ihres Levels zu entsprechen.
So konfigurieren Sie die Generierungsradien:
Öffnen Sie die PCG Diagramm Einstellungen und erweitern Sie Laufzeitgenerierung > Generierungsradien.
Passen Sie den Radius für jedes Raster an. Die Option Generierungsradius wird auf die Standard Rastergröße angewendet oder wenn Sie die Option „Ungebunden“ verwenden.
Passen Sie den Bereinigungsradiusmultiplikator an. Dieser Multiplikator wird auf den Generierungsradius angewendet, um den Radius zu bestimmen, bei dem Meshs aus dem Level entfernt werden.
Speichern Sie das Diagramm.
Das PCG Asset generiert jetzt nur noch Meshs in einem Radius um den Betrachter.
Debuggen und Laufzeitüberschreibungen
Es gibt mehrere nützliche Konsolenbefehle zum Debuggen der Laufzeitgenerierung während der Laufzeit.
| Konsolenbefehl | Beschreibung |
|---|---|
pcg.RuntimeGeneration.Enable | Schaltet die Laufzeitgenerierung um. |
pcg.RuntimeGeneration.EnableDebugging | Schaltet die ausführliche Protokollierung für den Laufzeitgenerierungs-Planer um, um Einblicke in sein genaues Verhalten zu holen. |
pcg.RuntimeGeneration.EnablePooling | Schaltet das Pooling für zur Laufzeit erstellte Partition-Actors um, um konstante Zuweisungen zu vermeiden. Diese Option ist standardmäßig aktiviert. |
pcg.RuntimeGeneration.BasePoolSize | Legt die anfängliche Anzahl der zur Laufzeit generierten Partition-Actors im Pool fest. Standardmäßig auf |
pcg.RuntimeGeneration.FramesBetweenGraphSchedules | Legt die Anzahl der Ticks fest, die der Laufzeitgenerierungs-Planer zwischen dem Planen von Komponenten für die Generierung warten muss. Nützlich beim Debugging Ihrer Richtlinie, um die genaue Reihenfolge einzuhalten, in der Komponenten geplant werden. Standardmäßig auf 0 gesetzt, wodurch alle Generierungen in einem einzigen Tick geplant werden können. |
pcg.RuntimeGeneration.NumGeneratingComponents | Legt die Anzahl der PCG Komponenten fest, die parallel generiert werden. Dies hilft, die CPU-Verwendung von PCG zu begrenzen und die Zeit bis zur Bildschirmanzeige für bestimmte Komponenten zu steuern. Eine niedrigere Zahl wirkt sich sichtbar auf die Distanz- und Richtungsgewichtung aus, denn wenn die Komponentengenerierung parallel erfolgt, ist die Ausführung nicht garantiert. Standardmäßig auf |
pcg.FrameTime | Weist PCG Zeit (in Millisekunden) für die Ausführung pro Frame zu. Standardmäßig auf |
pcg.EditorFrameTime | Weist PCG Zeit (in Millisekunden) für die Ausführung im Editor pro Frame zu (nicht-PIE). Standardmäßig auf |
Visualisierung der Rastergröße im PCG-Diagramm
Nutzen Sie den Debug Objekt Baum, um die Raster zu visualisieren, die von jedem Knoten im PCG Diagramm verwendet werden.
Um die Rastergröße im PCG-Diagramm zu visualisieren:
Wählen Sie eine lokale PCG Komponente aus der Liste im Debug Objekt Baum unten links aus. Jeder Komponentenname enthält die Rastergröße. Zum Beispiel ist
PCGPartitionActor_12800_1_5_0/PCGComponent_1/NewPCGGraphTeil des 12800-cm-Raster.Klicken Sie auf den Pfeil neben dem Komponentennamen und wählen Sie die Komponente aus.
Im obigen Beispiel wird eine Komponente ausgewählt, die Baum-Meshs spawnen (1). Die Knoten, die Fels-Meshs (2) und Gras-Meshs (3) spawnen, sind ausgegraut. Das zeigt an, dass diese Knoten Bäume auf einem kleineren Raster und nach den Baumknoten ausgeführt werden. Jeder Knoten zeigt oben rechts seine Rastergröße in Metern an.