Um große Karten zu erstellen, mussten die Entwickler früher die Karten manuell in Unterebenen aufteilen und dann das Level-Streaming-System verwenden, um sie zu laden und zu entladen, während der Spieler die Landschaft durchquerte. Diese Methode führte oft zu Problemen bei der gemeinsamen Nutzung von Dateien durch mehrere Benutzer, und es wurde schwierig, die ganze Welt im Kontext zu sehen.
World Partition ist ein automatisches System zur Datenverwaltung und zum distanzbasierten Level-Streaming, das eine komplette Lösung für die Verwaltung großer Welten bietet. Durch dieses System müssen große Levels nicht in Sublevels unterteilt werden, da Ihre Welt in einem einzigen persistenten Level gespeichert wird, das in Rasterzellen unterteilt ist. Es bietet Ihnen ein automatisches Streaming-System, um diese Zellen basierend auf der Distanz zu einer Streaming-Quelle zu laden und zu löschen.
World Partition arbeitet eng mit den folgenden Funktionen zusammen:
World Partition aktivieren
Es gibt drei Möglichkeiten, World Partition in der Unreal Engine zu aktivieren:
Erstellen eines neuen Projekts aus einer Vorlage in der Kategorie Spiele.
Erstellen eines neuen Levels unter Verwendung der Open-World-Vorlage.
Konvertieren bestehender Levels, sodass sie World Partition verwenden.
Erstellen Ihres Projekts mit einer Spiele-Vorlage
World Partition ist in vielen der Projektvorlagen in der Kategorie Spiele standardmäßig aktiviert.
Um die Komplexität zu verringern und eine skalierbare Lösung beim Erstellen neuer Projekte zu bieten, kann das Streaming von Rasterzellen mit der Option Streaming aktivieren in den Welt-Einstellungen aktiviert und deaktiviert werden.
Die folgenden Vorlagen verwenden World Partition, haben aber standardmäßig Streaming aktivieren deaktiviert:
Leer
Ego-Perspektive
Third-Person-Perspektive
Draufsicht
Fahrzeug erweitert
Verwenden der Open-World-Standardkarte
Der Open-World-Standardkartentyp ist als Startpunkt für die Erstellung großer Open-World-Karten gedacht und verfügt standardmäßig über die folgenden Funktionen:
World Partition
Eine Datei pro Actor
Daten-Ebenen
Hierarchische Detaillierungsgrade
Die Karte enthält eine 2 km x 2 km große Beispiellandschaft mit einem Landschaftsmaterial und einer Beleuchtungseinrichtung für eine Außenumgebung. Dies umfasst eine Himmelsatmosphäre, Skylight, direktionales Licht, exponentiellen Höhennebel und volumetrische Wolken.
So verwendest du den Offene-Welt-Standardkartentyp in deinem Projekt:
Öffne das Datei-Menü und wähle Neues Level.
Wähle den Kartentyp Open World.
Klicken Sie auf die Schaltfläche Erstellen, um eine neue Karte zu erstellen.
Konvertieren bestehender Levels, sodass sie World Partition verwenden
Sie können World Partition zu jedem beliebigen Level hinzufügen, indem Sie sie mit der Option Werkzeuge > Level konvertieren umwandeln oder das Commandlet „World Partition Convert“ verwenden.
Um das Commandlet World Partition Convert zu verwenden, befolge diese Schritte:
Befehl: UnrealEditor.exe QAGame -run=WorldPartitionConvertCommandlet Playground.umap -AllowCommandletRendering
So konvertierst du deine bestehenden Levels zu World Partition:
Öffne unter Windows ein Fenster der Eingabeaufforderung.
Navigieren Sie in der Eingabeaufforderung zum Speicherort der ausführbaren Datei
UnrealEditor.exe. Im obigen Beispiel:c:\Builds\Home_UE5_Engine\Engine\Binaries\Win64.Beginnen Sie den Befehl als Nächstes mit dem Namen der .exe Datei, die das Commandlet ausführt,
UnrealEditor.exeFüge den Namen des Projekts hinzu. Hier
QAGame.Fahren Sie fort mit dem Namen des auszuführenden Commandlets,
-run=WorldPartitionConvertCommandlet.Füge den Namen der Map-Datei hinzu, die konvertiert werden soll. Im obigen Beispiel
Playground.umap.Beenden Sie den Befehl mit dem zusätzlichen Argument
-AllowCommandletRendering.Drücken Sie Eingabe und das Commandlet konvertiert die Karte so, dass sie World Partition verwendet.
Die folgenden optionalen Argumente sind für dieses Commandlet verfügbar:
| Optionales Argument | Beschreibung |
|---|---|
-SCCProvider=(None, Perforce...) | Gibt an, welcher Quellkontrollanbieter verwendet werden soll. Zur Ausführung ohne Quellkontrolle geben Sie |
-Verbose | Zeigt das ausführliche Logging an. |
-ConversionSuffix | Fügt das Suffix _WP an eine konvertierte Map an. Dies ist nützlich, wenn du Levels zu Testzwecken konvertieren und dabei das ursprüngliche Level erhalten willst. |
-DeleteSourceLevels | Löscht die Quell-Levels nach der Konvertierung. |
-ReportOnly | Berichtet, was während der Konvertierung geschehen würde. Führt die Konvertierung nicht durch. |
-GenerateIni | Generiert eine Standard- |
-SkipStableGUIDValidation | Überspringt die Validierung von GUIDs instabiler Actors. Levels mit instabilen Actor-GUIDs führen bei mehrmaliger Konvertierung zu unterschiedlichen Ergebnissen. Ein erneutes Speichern des Levels behebt dieses Problem. |
-OnlyMergeSubLevels | Konvertiert und führt Levels und Sublevels zu einer Datei pro Actor ohne World Partition zusammen. Das konvertierte Level kann als Level-Instanz in einem World Partition Level verwendet werden. |
-FoliageTypePath=[Pfad] | Extrahiert Vegetationstypen als Assets für den angegebenen Pfad. Verwenden, wenn das Level eingebettete Vegetationstypen enthält. |
Wenn Sie die Konvertierungseinstellungen ändern möchten, verwenden Sie eine Standardkonvertierungsdatei .ini Datei mit dem Commandlet. Die .ini -Datei muss sich im gleichen Ordner wie Ihre Map-Datei befinden und den gleichen Dateinamen wie Ihre Map haben, aber mit der .ini Erweiterung. Zum Beispiel eine .ini Datei, die für die FirstPersonExampleMap.umap geschrieben wurde, würde FirstPersonExampleMap.ini heißen.
Hier ist ein Beispiel für eine Standard-Konvertierungs-.ini Datei:
[/Script/UnrealEd.WorldPartitionConvertCommandlet]
EditorHashClass=Class'/Script/Engine.WorldPartitionEditorSpatialHash
RuntimeHashClass=Class'/Script/Engine.WorldPartitionRuntimeSpatialHash
LevelsGridPlacement=(("/Game/Maps/Highrise_Audio", Bounds),("/Game/Maps/Highrise_Collisions_Temp", Bounds),("/Game/Maps/Highrise_Gameplay", Bounds),("/Game/Maps/Highrise_Lights", Bounds),("/Game/Maps/Highrise_Vista", AlwaysLoaded))
HLODLayerAssetsPath=
DefaultHLODLayerName=
[/Script/Engine.WorldPartitionEditorSpatialHash]
CellSize=51200
WorldImage=None
Verwenden von World Partition
Das World Partition System speichert deine Welt in einer einzigen persistenten Level-Datei und unterteilt den Raum mithilfe eines konfigurierbaren Laufzeitrasters in streambare Rasterzellen. Diese Zellen werden zur Laufzeit durch das Vorhandensein von Streaming-Quellen, wie z. B. dem Player, geladen und entladen. Auf diese Weise lädt die Unreal Engine nur die Teile des Levels, die der Spieler zu einer bestimmten Zeit sieht und mit denen er interagiert.
Actors in World Partition
Beim Bearbeiten der Welt können Actors überall hinzugefügt werden und werden automatisch einer Rasterzelle zugewiesen, basierend auf ihrer Einstellung Ist räumlich geladen, die in ihrem Details-Panel im Abschnitt World Partition zu finden ist.
| Option | Beschreibung |
|---|---|
Laufzeitraster | Bestimmt, in welchem Partitionsraster dieser Actor platziert wird. Bei Keine wird das Raster vom Partitionssystem gewählt. |
Ist räumlich geladen | Bestimmt, ob der Actor räumlich geladen ist:
|
Da Actors mit der Funktion „Eine Datei pro Actor“ in ihren eigenen Dateien gespeichert werden, musst du die Level-Datei nicht aus der Versionskontrolle auschecken, um Änderungen an den Actors in der Welt vorzunehmen. So machst du die Level-Datei für andere in deinem Team verfügbar.
Weitere Informationen zum „Eine Datei pro Actor“-System und der integrierten Quellkontrolle der Unreal Engine finden Sie in der Eine Datei pro Actor-Dokumentation.
Actors, die andere Actors im Level referenzieren, werden in einem Paket zusammengefasst und zur gleichen Zeit geladen.
Streamingquellen
Das Streaming von Rasterzellen innerhalb des Rasters zur Laufzeit wird von zwei Faktoren bestimmt:
Streamingquellen
Laufzeitraster-Einstellungen
Der erste ist die Position der Streaming-Quellen im Level.
Bild für Großansicht anklicken.
Streaming-Quellen sind Komponenten, die eine Position in der Welt festlegen und das Laden der Zellen um sie herum auslösen. Steuerelemente für Spieler sind eine Streaming-Quelle. Andere Streaming-Quellen können der Welt mit der Komponente World Partition Streaming-Quelle hinzugefügt werden. Zum Beispiel kann eine Streaming-Quellenkomponente an dem Ort aktiviert werden, zu dem sich ein Spieler teleportieren wird, damit sie die Zellen dort laden kann. Sobald die Rasterzellen geladen sind, teleportiert sich der Spieler an den Ort und die Streaming-Quellenkomponente wird deaktiviert. Da es an der vorherigen Position des Spielers keine Streaming-Quelle mehr gibt, würden diese Rasterzelle entladen.
Verwenden des Spielers als Streamingquelle
Jeder Player-Controller wird als Streaming-Quelle der World Partition verwendet, wenn Sie die Option Streaming-Quelle aktivieren verwenden. Diese ist standardmäßig aktiviert.
Verwenden der World Partition-Streamingquelle-Komponente
World Partition-Streaming wird auch mit der World Partition-Streaming-Quellenkomponente durchgeführt:
Diese Komponente bietet die folgenden Optionen:
| Option | Beschreibung |
|---|---|
Standardbereich-Visualisierer Lädt | Bestimmt die Größe des Debug-Visualisierungsrasters, wenn der Visualisierer aktiviert ist. |
Zielraster | Bestimmt das von dieser Quelle betroffene Streaming-Raster. |
Debug-Farbe | Bestimmt die beim Debuggen verwendete Farbe. |
Ziel-HLOD-Ebene | Bestimmt die von der Streamingquelle betroffene HLOD-Ebene. |
Formen | Bestimmt die Formenliste, die zum Erstellen einer benutzerdefinierten Form für diese Streamingquelle verwendet wird. Wenn leer, wird eine Kugel mit einem Radius verwendet, der dem Ladebereich des Rasters entspricht. |
Priorität | Bestimmt die Priorität der Streamingquelle. Wenn sich eine Rasterzelle mit mehreren Streaming-Quellen überschneidet, hat sie die höchste Priorität unter allen Streaming-Quellen. |
Streamingquelle Aktiviert | Bestimmt, ob diese Komponente aktiviert ist. |
Zielzustand | Bestimmt, in welchem Zustand sich die überschneidende Rasterzelle befinden soll (entweder Geladen oder Aktiviert). Wenn sich eine Rasterzelle mit mehreren Streaming-Quellen überschneidet, ist der Zielzustand der höchste Zielwert (bei dem aktiviert größer als geladen ist). |
Die Blueprint-Funktionen Streamingquelle aktivieren und Streamingquelle deaktivieren aktivieren und deaktivieren das Streaming mit dieser Komponente.
Die Blueprint-Funktion Ist Streaming abgeschlossen gibt True zurück, wenn die Komponente das Streaming der Rasterzellen, die sie überschneidet, beendet hat.
Laufzeitraster-Einstellungen
Der zweite Faktor, der bestimmt, ob eine Rasterzelle zur Laufzeit geladen oder entladen wird, sind die Einstellungen des Laufzeitrasters selbst. Die Laufzeitraster-Einstellungen befinden sich im Panel Welteinstellungen im Abschnitt World Partition Setup.
Standardmäßig wird ein Raster vom Typ 2D Runtime Hash bereitgestellt. Die Verwendung von mehr als einem Raster kann sich negativ auf die Performance auswirken.
Weitere Informationen zur empfohlenen Einrichtung und zu den Einstellungen für das 2D-Runtime-Hash-Raster finden Sie in der Karte Big City im Projekt City Sample.
| Option | Beschreibung |
|---|---|
Rastername | Enthält den Namen des Laufzeitrasters. |
Zellengröße | Bestimmt die Größe der Rasterzellen, die zur Erzeugung der Streaming-Levels verwendet werden. Im Beispiel beträgt die Gzellengröße 256 m x 256 m x 256m. |
Ladebereich | Bestimmt den Bereich einer Streamingquelle, in den Zellen geladen werden. Im obigen Bild ist der Ladebereich ein Radius von 768 Metern um eine Streamingquelle. |
Blockierung bei langsamem Streaming | Blockiert das Laden in Situationen, in denen die Rasterzellen nicht schnell genug geladen werden. |
Priorität | Bestimmt die Priorität der Streamingquelle. Wenn sich eine Rasterzelle mit mehreren Streaming-Quellen überschneidet, hat sie die höchste Priorität unter allen Streaming-Quellen. |
Debug-Farbe | Bestimmt die Farbe der Rasterlinien, die angezeigt werden, wenn Vorschauraster aktiviert ist. |
Vorschauraster | Wenn aktiviert, werden die Rasterlinien im Viewport angezeigt. |
Laden und Entladen von Regionen im Editor
Um die Entwicklung großer Welten zu unterstützen, wird die Welt zunächst entladen. Wenn das Level geöffnet wird, lädt der Editor nur Actors, deren Einstellung Ist räumlich geladen als False markiert ist, wie z. B. Umgebungskulissen und Manager. Dies unterstützt die Entwicklung großer Welten, bei denen es unmöglich ist, die gesamte Karte im Editor zu laden.
Laden und Entladen von Regionen mithilfe des World Partition-Fensters
Im World Partition-Fenster kannst du die Region, in der du arbeiten möchtest, manuell auswählen. Öffnen Sie das Fenster, indem Sie im Hauptmenü Fenster > World Partition > World Partition Editor auswählen.
Klicke in das Fenster und ziehe einen Bereich heraus. Klicken Sie dann mit der rechten Maustaste auf die Auswahl, um das Kontextmenü zu öffnen und wählen Sie Region aus Auswahl laden.
Laden und Entladen von Regionen mithilfe von Positionsvolumen
Regionen können auch mithilfe von Positionsvolumen geladen und entladen werden.
Ein Positionsvolumen ist ein Editor-exklusives Volumen, das im Level platziert wird und eine Region der Karte im World Partition-Fenster repräsentiert.
Um ein Positionsvolumen zu deinem Level hinzuzufügen, befolge die folgenden Schritte:
Öffnen Sie das Fenster Actors platzieren, wenn es nicht bereits geöffnet ist.
Suchen Sie nach Positionsvolumen. Klicke darauf und ziehe eines in dein Level.
Speichern Sie Ihr Level.
Nachdem das Level gespeichert wurde, erscheint im World Partition-Fenster eine neue Region mit demselben Name wie das Positionsvolumen.
Wähle die Region aus und klicke mit der rechten Maustaste, um das Kontextmenü zu öffnen. Klicke auf Ausgewählte Region laden, um die Region zu laden. Mehrere Regionen können gleichzeitig geladen oder entladen werden, indem du mehrere Regionen per Ziehen mit dem Mauszeiger auswählst oder bei gedrückter Strg-Taste auf mehrere Regionen klickst.
Positionsvolumen haben die folgenden unterstützten Einstellungen:
Pinseleinstellungen
| Einstellung | Beschreibung |
|---|---|
Schattiertes Volumen anzeigen | Zeigt den Pinsel mit einem schattierten Volumen an |
Schattiertes Volumen Opazitätswert | Legt die Opazität des schattierten Volumens mit einem Wert von 0,0-1,0 fest. |
Viele der Optionen im Abschnitt Pinseleinstellungen hängen von der ausgewählten Pinselform ab.
World Partition
| Einstellung | Beschreibung |
|---|---|
Laden und Entladen | Lädt und entlädt die Region innerhalb des gewählten Volumens. |
Eine Minikarte für das World Partition-Fenster erzeugen
Sie können eine Minikarte erzeugen, um die Navigation im World Partition-Fenster zu erleichtern, indem Sie die Option Minikarte erstellen im World Partition-Abschnitt des Menüs Erstellen oder das Commandlet World Partition Minimap Builder verwenden.
Wenn du dieses Commandlet ausführst, wird ein Minikarten-Bild deiner World Partition-Welt erstellt und im World Partition-Fenster platziert.
Wenn du deine Minimap erstellst und sie nicht im World Partition-Fenster erscheint, musst du die Unterstützung für virtuelle Texturen in deinem Projekt aktivieren. Um virtuelle Texturen zu aktivieren, gehen Sie im Hauptmenü zu Bearbeiten > Projekt-Einstellungen. Aktivieren Sie dann das Kontrollkästchen Unterstützung für virtuelle Texturen aktivieren.
Nützliche Shortcuts und Optionen im World Partition-Fenster
| Tastaturkürzel | Beschreibung |
|---|---|
Umschalt+Ziehen | Dockt die Auswahl an die aktuelle Laufzeitrastergröße an. |
Doppelklick | Verschiebt die Kamera in allen Viewports an die Position. |
Umschalt+Doppelklick | Startet eine PIE-Sitzung an der angeklickten Position. |
Strg+Doppelklick | Lädt eine Region um die angeklickte Position herum. |
MMT+Ziehen | Zeigt die Entfernung vom angeklickten Punkt zum Endpunkt in Unreal-Units. |
Hierarchische Detaillierungsgrade (HLODs) erzeugen
HLODs werden mit der Option „Build HLODs“ im Abschnitt World Partition des Menüs „Build“ oder mit dem Commandlet World Partition HLODs Builder erzeugt.
Wenn du dieses Commandlet ausführst, werden die HLOD-Actors für deine World Partition-Zellen gemäß den Generierungseinstellungen erstellt, die du in deinen HLOD-Ebenen angegeben hast. Weitere Informationen zur Verwendung von Hierarchischen Detaillierungsgraden (HLODs) in World Partition und zur Verwendung des World Partition HLODs Builder Commandlet finden Sie in der Dokumentation World Partition – Hierarchischer Detaillierungsgrad.
Eine World Partition-Welt cooken
Das Cooking einer World Partition-Karte erfordert den Einsatz des Cook-Commandlet:
Befehl: UnrealEditor.exe QAGame -run=cook -targetplatform=WindowsNoEditor -Unversioned -map=Playground
So funktioniert das Cooking deiner World Partition-Karte:
Öffne unter Windows ein Fenster der Eingabeaufforderung.
Navigieren Sie in der Eingabeaufforderung zum Speicherort der ausführbaren Datei
UnrealEditor.exe.Beginnen Sie den Befehl als Nächstes mit dem Namen der .exe Datei, die das Commandlet ausführt,
UnrealEditor.exe.Füge den Namen des Projekts hinzu. Hier
QAGame.Fahren Sie fort mit dem Namen des auszuführenden Commandlets,
-run=cook.Beende den Befehl mit den folgenden Argumenten:
-targetplatform=WindowsNoEditorcookt das Projekt für Windows-Plattformen.-UnVersionedspeichert alle gecookten Pakete ohne Versionen. Es wird dann beim Laden davon ausgegangen, dass es sich um die aktuelle Version handelt.-map=Playgroundgibt den Namen der Karte an, in diesem FallPlayground.umap.
Weitere Informationen zur Verwendung des Cook-Commandlet finden Sie unter Content-Cooking.
World Partition mit Blueprint verwenden
Sowohl Blueprint-Klassen als auch Level-Blueprints werden in einer World Partition-Welt unterstützt. Blueprint-Klassen sind jedoch vorzuziehen, da alle Actors, auf die im Level-Blueprint verwiesen wird, als „Immer geladen“ markiert werden.
Testen einer partitionierten Welt
Debuggen und Laufzeitüberschreibungen
Es gibt mehrere nützliche Konsolenbefehle zum Debuggen einer World Partition-Welt während der Laufzeit.
| Konsolenbefehl | Beschreibung |
|---|---|
wp.Runtime.ToggleDrawRuntimeHash2D | Schaltet die 2D-Debug-Anzeige des World Partition Laufzeit-Hashes ein. |
wp.Runtime.ToggleDrawRuntimeHash3D | Schaltet die 3D-Debug-Anzeige des World Partition Laufzeit-Hashes ein. |
wp.Runtime.ShowRuntimeSpatialHashGridLevel | Wählt aus, welche Rasterebene angezeigt werden soll, wenn der World Partition Laufzeit-Hash angezeigt wird. |
wp.Runtime.ShowRuntimeSpatialHashGridLevelCount | Wählt aus, wie viele Rasterlevels angezeigt werden sollen, wenn der World Partition Laufzeit-Hash angezeigt wird. |
wp.Runtime.ShowRuntimeSpatialHashGridIndex | Zeigt ein bestimmtes Raster an, wenn der World Partition Runtime-Hash angezeigt wird. Ein ungültiger Index zeigt alle an. |
wp.Runtime.RuntimeSpatialHashCellToSourceAngleContributionToCellImportance | Nimmt einen Wert zwischen 0 und 1 an, der den Beitrag des Winkels zwischen dem Streamingquelle-zu-Zelle-Vektor und dem Source-Forward-Vektor zur Zellenbedeutung moduliert. Je näher der Wert bei 0 liegt, desto weniger trägt der Winkel zur Bedeutung der Zelle bei. |
wp.Runtime.OverrideRuntimeSpatialHashLoadingRange | Legt den Laufzeit-Ladebereich fest. Nimmt die folgenden Argumente an:
|
wp.Runtime.MaxLoadingLevelStreamingCells | Begrenzt die Anzahl der gleichzeitig ladenden World Partition Streaming-Zellen. |
wp.Runtime.HLOD 0 | Zeigt die Welt ohne HLODs mit |
World Partition Builder Commandlets
World Partition führt mit dem UWorldPartitionBuilderCommandlet und der Basisklasse UWorldPartitionBuilder ein Builder Commandlet Framework ein.
Diese Commandlets werden verwendet, um Batch-Prozesse zu automatisieren und Daten in World Partition-Levels zu erzeugen oder zu ändern. Große Welten müssen nicht mehr auf einmal geladen werden, um z. B. HLODs und KI-Nav-Daten zu erzeugen oder eine große Anzahl von Actors zu speichern.
Weitere Informationen zur Verwendung von World Partition Builder Commandlets finden Sie in der Referenz zu World Partition Builder Commandlets.