Pour créer de grandes cartes, les développeurs devaient auparavant diviser manuellement les cartes en sous-niveaux, puis utiliser le système de streaming de niveaux en temps réel pour les charger et les décharger à mesure que le joueur traversait le paysage. Cette méthode entraînait souvent des problèmes de partage de fichiers entre utilisateurs et entravait l'affichage complet du monde dans son contexte.
World Partition est un système automatisé qui gère les données et pilote le chargement d'un niveau en temps réel en fonction de la distance. Il s'agit d'une solution complète pour gérer les vastes mondes. Avec ce système, vous n'avez plus besoin de diviser les grands niveaux en sous-niveaux en stockant votre monde dans un niveau persistant unique divisé en cellules de grille. Il offre un système de chargement automatique en temps réel permettant de charger et de décharger ces cellules en fonction de la distance qui les sépare d'une source de chargement en temps réel.
Le système World Partition fonctionne en synergie avec les fonctionnalités suivantes :
Activer la World Partition
Il existe trois façons d'activer le système World Partition dans l'Unreal Engine :
Créer un nouveau projet à partir d'un modèle de la catégorie Jeux.
Créer un nouveau niveau à l’aide du modèle Monde ouvert.
Convertir les niveaux existants pour utiliser le système World Partition.
Créer votre projet à l’aide d’un modèle de jeux
Le système World Partition est activé par défaut dans de nombreux modèles de projets de la catégorie Games.
Pour réduire la complexité et fournir une solution évolutive lors de la création de nouveaux projets, vous pouvez activer et désactiver le chargement dynamique des cellules de la grille à l'aide de l'option Activer le chargement dynamique dans les Paramètres du monde.
Les modèles suivants utilisent le système World Partition, mais l'option Activer le chargement dynamique est désactivée par défaut :
Vide
Première personne
Troisième personne
Descendant
Véhicule avancé
Utiliser le mappage Monde ouvert par défaut
Le type de mappage Open World par défaut sert de point de départ à la création de grands mappages de monde ouvert. Les fonctionnalités suivantes sont activées par défaut :
World Partition
Un fichier par acteur
Data Layers
Niveaux de détail hiérarchiques
La carte contient un exemple de paysage de 2 km x 2 km avec un matériau de paysage et une configuration d'éclairage adaptée à un environnement extérieur. Cet exemple comprend les composants suivants : atmosphère du ciel, lumière naturelle, lumière directionnelle, brouillard de hauteur exponentielle et nuages volumétriques.
Pour utiliser le type de mappage Open World par défaut dans votre projet :
Ouvrez le menu Fichier et sélectionnez Nouveau niveau.
Sélectionnez le type de mappage Monde ouvert.
Cliquez sur le bouton Créer pour créer un nouveau mappage.
Convertir les niveaux existants pour utiliser le système World Partition
Vous pouvez ajouter un système World Partition à n'importe quel niveau en convertissant ce dernier à l'aide de l'option de menu Outils > Convertir le niveau, ou en utilisant l'applet de commande Convert World Partition.
Pour utiliser l’applet de commande Convert World Partition, procédez comme suit :
Commande : UnrealEditor.exe QAGame -run=WorldPartitionConvertCommandlet Playground.umap -AllowCommandletRendering
Pour convertir vos niveaux existants vers le système World Partition :
Sous Windows, ouvrez une fenêtre d'invite de commande.
À l'invite, commencez par rechercher l'emplacement du fichier exécutable
UnrealEditor.exe. Dans l'exemple ci-dessus, il s'agit dec:\Builds\Home_UE5_Engine\Engine\Binaries\Win64.Lancez ensuite la commande portant le nom du fichier .exe qui exécutera l'applet de commande, c’est-à-dire
UnrealEditor.exeAjoutez le nom du projet. Il s’agit en l’occurrence de
QAGame.Poursuivez avec le nom de l'applet de commande à exécuter,
-run=WorldPartitionConvertCommandlet.Ajoutez le nom du fichier de carte à convertir. Dans l'exemple ci-dessus, il s’agit de
Playground.umap.Terminez la commande avec l'argument supplémentaire
-AllowCommandletRendering.Appuyez sur la touche Entrée ; l'applet de commande convertit le mappage pour utiliser le système World Partition.
Les arguments facultatifs suivants sont disponibles pour cet applet de commande :
| Argument facultatif | Description |
|---|---|
-SCCProvider=(None,Perforce...) | Spécifier le fournisseur de contrôle de source à utiliser. Pour exécuter sans contrôle de source, spécifiez |
-Verbose | Afficher la journalisation détaillée. |
-ConversionSuffix | Ajouter le suffixe _WP à un mappage converti. Ceci est utile lors de la conversion de niveaux à des fins de test tout en gardant le niveau source intact. |
-DeleteSourceLevels | Supprimer les niveaux sources après la conversion. |
-ReportOnly | Cette option signale ce qui se passe pendant la conversion. Elle n'exécute pas la conversion proprement dite. |
-GenerateIni | Générer un fichier |
-SkipStableGUIDValidation | Ignorer le processus de validation des GUID d'acteur instables. Les niveaux avec des GUID d'acteur instables entraînent un résultat de conversion différent lors des conversions multiples. Enregistrez à nouveau le niveau pour résoudre ce problème. |
-OnlyMergeSubLevels | Convertir et fusionner les niveaux et sous-niveaux en un fichier par acteur sans système World Partition. Il est possible d'utiliser le niveau converti comme instance de niveau dans un niveau World Partition. |
-FoliageTypePath=[chemin] | Extraire les types de végétation comme ressources sur le chemin donné. Utilisez cet argument uniquement si le niveau contient des types de végétation intégrés. |
Si vous souhaitez modifier les paramètres de conversion, utilisez un fichier de conversion .ini par défaut avec l’applet de commande. Le fichier .ini doit se trouver dans le même dossier que votre fichier de mappage et avoir le même nom de fichier que votre mappage, mais avec l’extension .ini .ini. Par exemple, un fichier .ini écrit pour le fichier FirstPersonExampleMap.umap porterait le nom FirstPersonExampleMap.ini.
Voici un exemple de fichier de conversion .ini par défaut :
[/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
Utiliser le système World Partition
Le système World Partition stocke votre monde dans un seul fichier de niveau persistant et subdivise l'espace en cellules de grille utilisables dans un flux à l'aide d'une grille d'exécution configurable. Ces cellules sont chargées et déchargées à l'exécution en fonction de la présence de sources de streaming, par exemple le joueur. De cette façon, l'Unreal Engine ne charge que les parties du niveau que le joueur voit et avec lesquelles il interagit à un moment donné.
Acteurs du système World Partition
Lorsque vous modifiez le monde, vous pouvez ajouter des acteurs n'importe où ; ceux-ci sont automatiquement assignés à une cellule de la grille en fonction de leur paramètre Est chargé spatialement, qui se trouve dans la section World Partition du panneau Détails.
| Option | Description |
|---|---|
Grille d'exécution | Cette option détermine dans quelle grille de partition cet acteur est placé. Si la valeur est Aucune, la grille est choisie par le système de partition. |
Est chargé spatialement | Détermine si l'acteur est chargé spatialement :
|
Les acteurs étant enregistrés dans leurs propres fichiers individuels à l'aide de la fonctionnalité Un fichier par acteur ; il n'est pas nécessaire d'extraire le fichier de niveau du contrôle de la source pour apporter des modifications aux acteurs dans le monde. Les autres membres de votre équipe peuvent ainsi utiliser le fichier de niveau.
Pour en savoir plus sur le système Un fichier par acteur et le contrôle de source intégré de l'Unreal Engine, consultez la documentation Un fichier par acteur.
Les acteurs qui font référence à d'autres acteurs dans le niveau sont regroupés et chargés en même temps.
Sources de chargement dynamique
Le chargement dynamique des cellules de la grille au moment de l'exécution est déterminé par deux facteurs :
Sources de chargement dynamique
Paramètres de la grille d'exécution
Le premier facteur indique la position des sources de chargement dynamique dans le niveau.
Cliquez sur l'image pour l'afficher à sa taille réelle.
Les sources de chargement dynamique sont des composants qui définissent la position dans le monde et qui déclenchent le chargement des cellules autour d'elles. Les contrôleurs de joueur sont une source de chargement dynamique. Il est possible d'ajouter d'autres sources de chargement dynamique au monde à l'aide du composant Source de chargement dynamique de World Partition. Par exemple, un composant de source de chargement dynamique peut être activé à un endroit où le joueur se téléportera afin de charger les cellules à cet endroit. Une fois le chargement des cellules de grille terminé, le joueur se téléporte à l'endroit et le composant de source de chargement dynamique est désactivé. Étant donné qu'il n'y a plus de source de chargement dynamique à l'emplacement que le joueur vient de quitter, ces cellules seront déchargées.
Utiliser le joueur comme source de chargement dynamique
Chaque contrôleur de joueur est utilisé comme source de chargement dynamique du système World Partition à l’aide de l'option Activer la source de chargement dynamique. Cette fonction est activée par défaut :
Utiliser le composant Source de chargement dynamique du système World Partition
Le chargement dynamique du système World Partition se fait également à l'aide du composant Source de chargement dynamique du système World Partition :
Ce composant dispose des options suivantes :
| Option | Description |
|---|---|
Plage de chargement de la visionneuse par défaut | Cette option détermine la taille de la grille de la visionneuse de débogage lorsque cette dernière est activée. |
Grille cible | Cette option détermine la grille de chargement dynamique affectée par cette source. |
Couleur de débogage | Cette option détermine la couleur utilisée pour le débogage. |
Couche de HLOD cible | Cette option détermine la couche de HLOD affectée par la source de chargement dynamique. |
Formes | Cette option détermine la liste de formes utilisée pour créer une forme personnalisée pour cette source de chargement dynamique. Si cette liste est vide, une sphère dont le rayon est égal à la plage de chargement de la grille est utilisée. |
Priorité | Cette option détermine la priorité de la source de chargement dynamique. Si une cellule de la grille croise plusieurs sources de chargement dynamique, sa priorité est la plus élevée parmi toutes les sources de chargement dynamique. |
Source de chargement dynamique activée | Cette option détermine si ce composant est activé. |
État cible | Cette option détermine l’état dans lequel la cellule de la grille d’intersection doit se trouver (Chargée ou Activée). Si une cellule de la grille croise plusieurs sources de chargement dynamique, l'état cible sera la valeur cible la plus élevée (où activé est supérieur à chargé). |
Les fonctions de blueprint Activer la source de chargement dynamique et Désactiver la source de chargement dynamique permettent d'activer et de désactiver le chargement dynamique avec ce composant.
La fonction de blueprint Le chargement dynamique est-il terminé ? renvoie la valeur true lorsque le composant a terminé le chargement dynamique des cellules de la grille qu'il croise.
Paramètres de la grille d'exécution
Le deuxième facteur qui détermine si une cellule de la grille est chargée ou déchargée à l'exécution est le paramétrage de la grille d'exécution proprement dite. Les paramètres de la grille d'exécution se trouvent dans le panneau Paramètres du monde de la section Configuration du système World Partition.
Une grille Hachage d'exécution 2D est fournie par défaut. L'utilisation de plusieurs grilles peut avoir un impact négatif sur les performances.
Pour en savoir plus sur la configuration et les paramètres recommandés pour votre grille Hachage d’exécution 2D, consultez le mappage Grande ville situé dans le projet Exemple de ville.
| Option | Description |
|---|---|
Nom de la grille | Cette option contient le nom de la grille d'exécution. |
Taille de la cellule | Cette option détermine la taille des cellules de la grille qui sont utilisées pour générer les niveaux de chargement dynamique. Dans l'exemple, la taille de la cellule est de 256 m x 256 m x 256 m. |
Plage de chargement | Cette option détermine la plage d'une source de chargement dynamique où les cellules sont chargées. Dans l'image ci-dessus, la plage de chargement est un rayon de 768 mètres autour d'une source de chargement dynamique. |
Blocage de chargement dynamique lent | Cette option bloque le chargement dans les cas où les cellules de la grille ne se chargent pas assez rapidement. |
Priorité | Cette option détermine la priorité de la source de chargement dynamique. Si une cellule de la grille croise plusieurs sources de chargement dynamique, sa priorité est la plus élevée parmi toutes les sources de chargement dynamique. |
Couleur de débogage | Cette option détermine la couleur des lignes de la grille qui sont affichées lorsque l'option Aperçu des grilles est activée. |
Grilles de prévisualisation | Lorsque cette option est activée, les lignes de la grille s'affichent dans le hublot. |
Charger et décharger des régions dans l'éditeur
Pour accompagner le développement de mondes de grande envergure, le monde est initialement déchargé. Lorsque le niveau s'ouvre, l'éditeur ne charge que les acteurs dont le paramètre Est chargé spatialement est défini sur False, comme les arrière-plans et les gestionnaires d'environnement. Cela permet de développer des mondes de grande taille pour lesquels il est impossible de charger la totalité du mappage dans l'éditeur.
Charger et décharger des régions à l'aide de la fenêtre World Partition
Dans la fenêtre World Partition, vous pouvez sélectionner manuellement la région dans laquelle vous souhaitez travailler. Ouvrez la fenêtre en sélectionnant Fenêtre > World Partition > Éditeur de World Partition dans le menu principal.
Dans la fenêtre, cliquez une région et faites-la glisser. Ensuite, faites un clic droit sur la sélection pour ouvrir le menu contextuel et sélectionnez Charger la région à partir de la sélection.
Charger et décharger des régions à l'aide des volumes d'emplacement
Les régions peuvent également être chargées et déchargées à l'aide de Volumes d'emplacement.
Un volume d’emplacement est un volume réservé à l’éditeur placé dans le niveau qui représente une région du mappage dans la fenêtre World Partition.
Pour ajouter un volume d’emplacement à votre niveau, procédez comme suit :
Ouvrez la fenêtre Placer des acteurs, si elle n'est pas déjà ouverte.
Recherchez Volume d'emplacement. Cliquez sur un volume et faites-le glisser dans votre niveau.
Enregistrez votre niveau.
Une fois le niveau enregistré, une nouvelle région apparaîtra dans la fenêtre World Partition avec le même nom que le volume d’emplacement.
Sélectionnez la région et faites un clic droit pour ouvrir le menu contextuel. Cliquez sur Charger la région sélectionnée pour charger la région. Vous pouvez charger et décharger plusieurs régions à la fois en faisant glisser la sélection ou en maintenant la touche ctrl appuyée et en cliquant sur plusieurs régions.
Les volumes d'emplacement ont les paramètres pris en charge suivants :
Paramètres du pinceau
| Paramètre | Description |
|---|---|
Afficher le volume ombré | Afficher le pinceau avec un volume ombré. |
Valeur d'opacité du volume ombré | Cette option définit l'opacité du volume ombré à l’aide d’une valeur comprise entre 0,0 et 1,0. |
La plupart des options de la section Paramètres du pinceau dépendent de la forme de pinceau que vous sélectionnez.
World Partition
| Paramètre | Description |
|---|---|
Charger et décharger | Cette option charge et décharge la région dans le volume sélectionné. |
Générer une minicarte pour la fenêtre World Partition
Vous pouvez générer une minicarte pour faciliter la navigation dans la fenêtre World Partition à l’aide de l'option Générer une minicarte située dans la section World Partition du menu Générer, ou en utilisant l'applet de commande World Partition Minimap Builder.
L'exécution de cette applet de commande crée une image de minicarte de votre système World Partition et la place dans la fenêtre World Partition.
Si vous créez votre minicarte et qu'elle ne figure pas dans la fenêtre World Partition, vous devez activer la prise en charge des textures virtuelles dans votre projet. Pour activer les textures virtuelles, dans le menu principal, accédez à Modifier > Paramètres du projet. Ensuite, cochez la case Activer la prise en charge des textures virtuelles.
Raccourci et option utiles dans la fenêtre World Partition
| Raccourci | Description |
|---|---|
Maj+Glisser | Cette opération fixe la sélection à la taille actuelle de la grille d'exécution. |
Double clic | Cette opération déplace la caméra vers l'emplacement dans tous les hublots. |
Maj + double clic | Cette opération démarre une session PIE à l’emplacement du clic. |
Ctrl + double clic | Cette opération charge une région autour de l'emplacement du clic. |
Molette + Glisser | Cette opération affiche la distance entre le point du clic et le point final en unités Unreal. |
Générer des niveaux de détail hiérarchiques (HLOD)
Les HLOD sont générés à l'aide de l'option Générer les HLOD qui se trouve dans la section World Partition du menu Générer, ou via l'applet de commandes Générateur de HLOD de World Partition.
L'exécution de cet applet de commande crée les acteurs de HLOD pour les cellules de votre système World Partition en fonction des paramètres de génération que vous avez spécifiés dans vos couches de HLOD. Pour en savoir plus sur l'utilisation des niveaux de détail hiérarchiques (HLOD) dans le système World Partition et sur l'utilisation de l'applet de commande World Partition HLODs Builder, consultez la documentation World Partition - Niveau de détail hiérarchique.
Préparer un monde World Partition
La préparation d'un mappage World Partition nécessite l'utilisation de l’applet de commande Préparer :
Commande : UnrealEditor.exe QAGame -run=cook -targetplatform=WindowsNoEditor -Unversioned -map=Playground
Pour préparer votre mappage World Partition :
Sous Windows, ouvrez une fenêtre d'invite de commande.
À l'invite, commencez par rechercher l'emplacement du fichier exécutable
UnrealEditor.exe.Lancez ensuite la commande portant le nom du fichier .exe qui exécutera l'applet de commande, c’est-à-dire
UnrealEditor.exe.Ajoutez le nom du projet. Il s’agit en l’occurrence de
QAGame.Poursuivez avec le nom de l'applet de commande à exécuter,
-run=cook.Terminez la commande avec les arguments suivants :
-targetplatform=WindowsNoEditorprépare le projet pour les plateformes Windows.-UnVersionedenregistre tous les paquets préparés sans les versions. Il est alors supposé qu'il s'agit de la version en cours de chargement.-map=Playgroundspécifie le nom du mappage, dans ce casPlayground.umap.
Pour plus d'informations sur l'utilisation de l'applet de commande Cook, consultez la rubrique Préparation de contenu.
Utiliser le système World Partition avec un blueprint
Les classes de blueprint et les blueprints de niveau sont tous deux pris en charge dans un monde World Partition. Il est néanmoins préférable d'utiliser les classes de blueprint, car tous les acteurs référencés dans le blueprint de niveau sont marqués comme toujours chargés.
Tester un monde partitionné
Débogage et remplacements à l'exécution
Plusieurs commandes de console sont utiles pour déboguer un monde World Partition pendant l'exécution.
| Commande de console | Description |
|---|---|
wp.Runtime.ToggleDrawRuntimeHash2D | Activer/désactiver l'affichage de débogage 2D du hachage d'exécution du système World Partition. |
wp.Runtime.ToggleDrawRuntimeHash3D | Activer/désactiver l'affichage de débogage 3D du hachage d'exécution du système World Partition. |
wp.Runtime.ShowRuntimeSpatialHashGridLevel | Choisir le niveau de grille à afficher lors de l'affichage du hachage d'exécution du système World Partition. |
wp.Runtime.ShowRuntimeSpatialHashGridLevelCount | Choisir le nombre de niveaux de la grille à afficher lors de l'affichage du hachage d'exécution du système World Partition. |
wp.Runtime.ShowRuntimeSpatialHashGridIndex | Afficher une grille spécifique lors de l'affichage du hachage d'exécution du système World Partition. Un index non valide affichera tout. |
wp.Runtime.RuntimeSpatialHashCellToSourceAngleContributionToCellImportance | Prendre une valeur comprise entre 0 et 1 qui module la contribution de l'angle entre le vecteur source/cellule de chargement dynamique et le vecteur avant de la source à l'importance de la cellule. Plus la valeur est proche de 0, moins l'angle contribue à l'importance de la cellule. |
wp.Runtime.OverrideRuntimeSpatialHashLoadingRange | Définit la plage de chargement à l'exécution. Prend les arguments suivants :
|
wp.Runtime.MaxLoadingLevelStreamingCells | Limiter le nombre de cellules de chargement dynamique du système World Partition qui se chargent simultanément. |
wp.Runtime.HLOD 0 | Afficher le monde sans HLOD à l'aide de |
Applets de commande du générateur de World Partition
Le système World Partition introduit un framework d'applet de commande de générateur via UWorldPartitionBuilderCommandlet et la classe de base UWorldPartitionBuilder.
Ces applets de commande sont utilisées pour automatiser des processus par lots et générer ou modifier des données dans les niveaux du système World Partition. Il n'est pas nécessaire de charger tous les mondes de grande taille simultanément pour générer des HLOD ou des données de navigation IA, ou pour réenregistrer un grand nombre d'acteurs, entre autres.
Pour plus d'informations sur l'utilisation des applets de commande de générateur de World Partition, consultez la rubrique Références des applets de commande de générateur de World Partition.