Construir mapas grandes solía exigir a los desarrolladores dividir manualmente los mapas en subniveles y luego utilizar el sistema de flujo de niveles para cargarlos y descargarlos a medida que el jugador atravesaba el paisaje. Este método a menudo creaba problemas para compartir archivos entre varios usuarios, y ver todo el mundo en su contexto se convertía en una tarea difícil.
World Partition es un sistema automático de gestión de datos y transmisión de niveles basada distancia que proporciona una solución completa para la gestión de grandes mundos. El sistema elimina la necesidad anterior de dividir grandes niveles en subniveles, almacenando tu mundo en un único nivel persistente separado en celdas de cuadrícula, y te proporciona un sistema de transmisión automática para cargar y descargar esas celdas en función de la distancia a una fuente de transmisión.
World Partition trabaja en estrecha colaboración con las siguientes funciones:
- Un archivo por actor
- World Partition - Capas de datos
- Creación de instancias de niveles
- World Partition - Niveles jerárquicos de detalle
Activar World Partition
Hay tres formas de activar World Partition en Unreal Engine:
- Crear un nuevo proyecto a partir de una plantilla de la categoría Juegos.
- Crear un nuevo nivel utilizando la plantilla Mundo abierto.
- Convertir los niveles existentes para utilizar World Partition.
Crear tu proyecto utilizando una plantilla de juegos
World Partition está activado por defecto en muchas de las plantillas de proyecto que se encuentran en la categoría Juegos.
Para reducir la complejidad y proporcionar una solución escalable al crear nuevos proyectos, se puede activar y desactivar la transmisión de celdas de cuadrícula mediante la opción Activar transmisión de la Configuración del mundo.
Las siguientes plantillas utilizan World Partition pero tienen Activar transmisión desactivado por defecto:
- En blanco
- Primera persona
- Tercera persona
- Vista elevada
- Vehículo avanzado
Utilizar el mapa predeterminado de Mundo abierto
El tipo de mapa predeterminado Mundo abierto está diseñado para ser un punto de partida en la creación de grandes mapas de mundo abierto y viene con las siguientes características activadas por defecto:
- World Partition
- Un archivo por actor
- Capas de datos
- Niveles jerárquicos de detalle
El mapa contiene un paisaje de muestra de 2 km x 2 km con un material de paisaje y una configuración de iluminación para un entorno exterior. Esto incluye una atmósfera del cielo, luz del cielo, luz direccional, niebla de altura exponencial y nubes volumétricas.
Para utilizar el tipo de mapa predeterminado Mundo abierto en tu proyecto:
- Abre el menú Archivo y selecciona Nuevo nivel.
- Selecciona el tipo de mapa Mundo abierto.
- Pulsa el botón Crear para crear un nuevo mapa.
Convertir niveles existentes para utilizar World Partition
Puedes añadir World Partition a cualquier nivel convirtiéndolo mediante la opción de menú Herramientas > Convertir nivel o utilizando el commandlet WorldPartitionConvert.
Para utilizar el commandlet WorldPartitionConvert, sigue estos pasos:
Comando: UnrealEditor.exe QAGame -run=WorldPartitionConvertCommandlet Playground.umap -AllowCommandletRendering
Para convertir tus niveles existentes en World Partition:
-
En Windows, abre una ventana de símbolo del sistema.
-
En la ventana, navega hasta la ubicación del archivo ejecutable
UnrealEditor.exe. En el ejemplo anterior:c:\Builds\Home_UE5_Engine\Engine\Binaries\Win64. - A continuación, comienza el comando con el nombre del archivo .exe que ejecutará el commandlet
UnrealEditor.exe -
Añade el nombre del proyecto. En nuestro caso,
QAGame. - Continúa con el nombre del commandlet a ejecutar
-run=WorldPartitionConversionCommandlet. - Añade el nombre del archivo del mapa que se convertirá. En el ejemplo anterior,
Playground.umap. -
Finaliza el comando con el argumento adicional
-AllowCommandletRendering. - Pulsa Intro y el comando convertirá el mapa para que utilice World Partition.
Este commandlet dispone de los siguientes argumentos opcionales:
| Argumento opcional | Descripción |
|---|---|
| -SCCProvider=(None,Perforce...) | Especifica qué proveedor de control de código fuente utilizar. Para ejecutar sin control de código fuente, especifica -SCCProvider=None. |
| -Verbose | Muestra el registro detallado. |
| -ConversionSuffix | Añade el sufijo _WP a un mapa convertido. Esto es útil cuando se convierten niveles con fines de prueba, manteniendo intacto el nivel de origen. |
| -DeleteSourceLevels | Elimina los niveles de origen tras la conversión. |
| -ReportOnly | Informa de lo que ocurriría durante la conversión. No realiza la conversión. |
| -GenerateIni | Genera un archivo de conversión .ini predeterminado para este mapa. No realiza la conversión. |
| -SkipStableGUIDValidation | Omite el proceso de validación de GUID de actores inestables. Los niveles con GUID de actores inestables darán lugar a resultados de conversión diferentes cuando se conviertan varias veces. Se soluciona si vuelves a guardar el nivel. |
| -OnlyMergeSubLevels | Convierte y fusiona niveles y subniveles de un archivo por actor sin World Partition. El nivel convertido puede utilizarse como instancia de nivel en un nivel de World Partition. |
| -FoliageTypePath=[Path] | Extrae tipos de follaje como recursos en la ruta dada. Utilízalo si el nivel contiene tipos de follaje incrustados. |
Si quieres alterar la configuración de la conversión, utiliza un archivo .ini de conversión predeterminado con el commandlet. El archivo .ini tiene que estar en la misma carpeta que tu archivo de mapa y tener el mismo nombre de archivo que tu mapa, pero con la extensión .ini. Por ejemplo, un archivo .ini escrito para FirstPersonExampleMap.umap se llamaría FirstPersonExampleMap.ini.
Aquí tienes un ejemplo de archivo .ini de conversión por defecto:
[/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
WorldImageTopLeftW=(X=0.000000,Y=0.000000)
WorldImageBottomRightW=(X=0.000000,Y=0.000000)
[/Script/Engine.WorldPartitionEditorSpatialHash]
Grids=(GridName="MainGrid",CellSize=3200,LoadingRange=25600.000000,DebugColor=(R=0.500000,G=0.500000,B=0.500000,A=1.000000))
Usar World Partition
El sistema World Partition funciona almacenando tu mundo en un único archivo persistente de nivel y subdividiendo el espacio en celdas de cuadrícula que se pueden transmitir mediante una cuadrícula configurable en tiempo de ejecución. Estas celdas se cargan y descargan en tiempo de ejecución por la presencia de fuentes de transmisión, como el jugador. De este modo, Unreal Engine solo carga las partes del nivel que el jugador ve y con las que interactúa en un momento dado.
Actores en World Partition
Al editar el mundo, los actores pueden añadirse en cualquier lugar y se asignan automáticamente a una celda de la cuadrícula en función de su ajuste Está cargado espacialmente, que se encuentra en la sección World Partition de su panel Detalles.
| Opción | Descripción |
|---|---|
| Cuadrícula en tiempo de ejecución | Determina en qué cuadrícula de partición se coloca este actor. Si es Ninguna, la cuadrícula la elegirá el sistema de particiones. |
| Está cargado espacialmente | Determina si el actor está cargado espacialmente:
|
Como los actores se guardan en sus propios archivos individuales utilizando la función Un archivo por actor, no necesitas sacar el archivo de nivel del control de código fuente para hacer cambios en los actores del mundo. Esto libera el archivo de nivel para otros miembros de tu equipo.
Para obtener más información sobre el sistema Un archivo por actor y el control de código fuente integrado de Unreal Engine, consulta la documentación de Un archivo por actor.
Los actores que hagan referencia a otros actores del nivel se agruparán y cargarán al mismo tiempo.
Fuentes de transmisión
La transmisión de las celdas de la cuadrícula en tiempo de ejecución viene determinada por dos factores:
- Fuentes de transmisión
- Configuración de la cuadrícula en tiempo de ejecución
La primera es la posición de las fuentes de transmisión en el nivel.

Las fuentes de transmisión son componentes que definen una posición en el mundo y activan la carga de celdas a su alrededor. Los controladores de jugador son una fuente de transmisión. Se pueden añadir otras fuentes de transmisión al mundo utilizando el componente Fuente de transmisión de World Partition. Por ejemplo, se puede activar un componente de fuente de transmisión en el lugar al que se teletransportará un jugador, para que cargue allí las celdas. Una vez cargadas las celdas de la cuadrícula, el jugador se teletransporta a la ubicación y se desactiva el componente de fuente de transmisión. Como ya no hay una fuente de transmisión en la ubicación anterior del jugador, esas celdas de la cuadrícula se descargarían.
Utilizar el jugador como fuente de transmisión
Cada controlador de jugador se utiliza como fuente de transmisión de World Partition mediante la opción Activar fuente de transmisión. Esta opción está activada de forma predeterminada:
Utilizar el componente de fuente de transmisión de World Partition
La transmisión de World Partition también se realiza mediante el componente de fuente de transmisión de World Partition:
Este componente tiene las siguientes opciones:
| Opción | Descripción |
|---|---|
| Rango de carga predeterminado del visualizador | Determina el tamaño de la cuadrícula del visualizador de depuración cuando el visualizador está activado. |
| Cuadrícula objetivo | Determina la red de transmisión afectada por esta fuente. |
| Color de depuración | Determina el color utilizado para la depuración. |
| Capa HLOD objetivo | Determina la capa HLOD afectada por la fuente de transmisión. |
| Formas | Determina la lista de formas utilizada para construir una forma personalizada para esta fuente de transmisión. Si se deja vacío, utilizará una esfera con un radio igual al rango de carga de la cuadrícula. |
| Prioridad | Determina la prioridad de la fuente de transmisión. Si una celda de la cuadrícula cruza varias fuentes de transmisión, su prioridad será la más alta entre todas las fuentes de transmisión. |
| Fuente de transmisión activada | Determina si este componente está activado. |
| Estado objetivo | Determina en qué estado debe estar la celda de la cuadrícula de intersección (cargada o activada). Si una celda de la cuadrícula cruza varias fuentes de transmisión, el estado objetivo será el valor objetivo más alto (donde activado es mayor que cargado). |
Las funciones de blueprint Activar fuente de transmisión y Desactivar fuente de transmisión activarán y desactivarán la transmisión con este componente.
La función de blueprint Transmisión finalizada devuelve true cuando el componente ha finalizado la transmisión de las celdas de la cuadrícula con las que se cruza.
Configuración de la cuadrícula en tiempo de ejecución
El segundo factor que determina si una celda de la cuadrícula se carga o se descarga en tiempo de ejecución es la configuración de la propia cuadrícula en tiempo de ejecución. La configuración de la cuadrícula en tiempo de ejecución se encuentra en el panel Configuración del mundo, en la sección Configuración de World Partition.
Por defecto se proporciona una cuadrícula hash en tiempo de ejecución 2D. Utilizar más de una cuadrícula puede afectar negativamente al rendimiento.
Para obtener más información sobre la configuración y los ajustes recomendados para tu cuadrícula hash en tiempo de ejecución 2D, consulta el mapa Big City en el proyecto City Sample.
| Opción | Descripción |
|---|---|
| Nombre de cuadrícula | Contiene el nombre de la cuadrícula en tiempo de ejecución. |
| Tamaño de celda | Determina el tamaño de las celdas de la cuadrícula que se utilizan para generar los niveles de transmisión. En el ejemplo, Tamaño de celda tiene un valor de 256 metros cuadrados. |
| Rango de carga | Determina el rango de una fuente de transmisión donde se cargan las celdas. En la imagen anterior, Rango de carga tiene un radio de 768 metros alrededor de una fuente de transmisión. |
| Bloqueo en caso de transmisión lenta | Bloquea la carga en situaciones en las que las celdas de la cuadrícula no se cargan lo suficientemente rápido. |
| Prioridad | Determina la prioridad de la fuente de transmisión. Si una celda de la cuadrícula cruza varias fuentes de transmisión, su prioridad será la más alta entre todas las fuentes de transmisión. |
| Color de depuración | Determina el color de las líneas de la cuadrícula que se muestran cuando la opción de previsualización de cuadrícula está activada. |
| Previsualizar cuadrículas | Cuando está activada, muestra las líneas de la cuadrícula en el visor. |
| Tamaño de la cuadrícula del follaje instanciado | Determina el tamaño de la cuadrícula para los actores de follaje instanciados. |
| Configuración predeterminada de World Partition | Restablece la configuración actual de la cuadrícula a los valores predeterminados o guarda la configuración actual como nuevos valores predeterminados. |
| Tamaño de celda del editor de World Partition | Determina el tamaño de la celda del editor de World Partition. Los nuevos tamaños entrarán en vigor en la próxima recarga del mundo. |
Cargar y descargar regiones en el editor
Para facilitar el desarrollo de mundos grandes, todas las celdas de la cuadrícula se descargan inicialmente. Cuando se abre el nivel, el editor solo cargará los actores que tengan el ajuste Está cargado espacialmente marcado como false, como los telones de fondo del entorno y los directores. Esto permite desarrollar mundos grandes en los que es imposible cargar todo el mapa en el editor.
En la ventana de World Partition, puedes seleccionar manualmente la región en la que trabajar. Abre la ventana seleccionando Ventana > World Partition > Editor de World Partition en el menú principal.
En la ventana, haz clic y arrastra una región. A continuación, haz clic con el botón derecho en la selección para abrir el menú contextual y selecciona Cargar región desde selección.
Generar un minimapa para la ventana de World Partition
Puedes generar un minimapa para facilitar la navegación por la ventana de World Partition utilizando la opción Construir ,minimapa que se encuentra en la sección World Partition del menú Construir, o utilizando el commandlet WorldPartitionMinimapBuilder.
Ejecutando este comando se crea una imagen del minimapa de tu mundo de World Partition y se coloca en la ventana de World Partition.
Si construyes tu minimapa y no aparece en la ventana de World Partition, tendrás que activar el soporte de texturas virtuales en el proyecto. Para activar las texturas virtuales, desde el menú principal, ve a Editar > Configuración del proyecto. Después, marca la casilla Activar soporte de texturas virtuales.
Generar niveles jerárquicos de detalle (HLOD)
Los HLOD se generan utilizando la opción Construir HLOD que se encuentra en la sección World Partition del menú Construir o utilizando el commandlet WorldPartitionHLODsBuilder.
Ejecutando este comando se crean los actores HLOD para las celdas de tu World Partition según los ajustes de generación que hayas especificado en las capas HLOD. Para obtener más información sobre el uso de los niveles de detalle jerárquicos (HLOD) en World Partition y sobre el uso del commandlet WorldPartitionHLODsBuilder, consulta la documentación de World Partition - Nivel de detalle jerárquico.
Consolidar un mundo de World Partition
Para consolidar un mapa de World Partition es necesario utilizar el commandlet Cook:
Comando: UnrealEditor.exe QAGame -run=cook -targetplatform=WindowsNoEditor -Unversioned -map=Playground
Para consolidar tu mapa de World Partition:
- En Windows, abre una ventana de símbolo del sistema.
- En la ventana, navega hasta la ubicación del archivo ejecutable
UnrealEditor.exe. - A continuación, comienza el comando con el nombre del archivo .exe que ejecutará el commandlet
UnrealEditor.exe - Añade el nombre del proyecto. En nuestro caso,
QAGame. - Continúa con el nombre del commandlet a ejecutar
-run=cook. - Finaliza el comando con los siguientes argumentos:
-targetplatform=WindowsNoEditorconsolida el proyecto para plataformas Windows.-UnVersionedguarda todos los paquetes consolidados sin versiones. Se supone que son la versión actual en carga.-map=Playgroundespecifica el nombre del mapa, en este casoPlayground.umap.
Para obtener más información sobre el uso del comando Cook, consulta Consolidación de contenido.
Usar World Partition con blueprint
Tanto las clases de blueprint como los blueprints de nivel son compatibles con un mundo World Partition. Sin embargo, son preferibles las clases de blueprints, ya que cualquier actor al que se haga referencia en el blueprint de nivel se marcará como Siempre cargado.
Probar un mundo de World Partition
Depuración y anulaciones en tiempo de ejecución
Hay varios comandos de consola útiles para depurar un mundo de World Partition durante el tiempo de ejecución.
| Comando de consola | Descripción |
|---|---|
| wp.Runtime.ToggleDrawRuntimeHash2D | Activa la visualización de depuración 2D del hash de tiempo de ejecución de World Partition. |
| wp.Runtime.ToggleDrawRuntimeHash3D | Activa la visualización de depuración 3D del hash de tiempo de ejecución de World Partition. |
| wp.Runtime.ShowRuntimeSpatialHashGridLevel | Elige qué nivel de cuadrícula mostrar al mostrar el hash de tiempo de ejecución de World Partition. |
| wp.Runtime.ShowRuntimeSpatialHashGridLevelCount | Elige cuántos niveles de cuadrícula mostrar al mostrar el hash de tiempo de ejecución de World Partition. |
| wp.Runtime.ShowRuntimeSpatialHashGridIndex | Muestra una cuadrícula específica al mostrar el hash de tiempo de ejecución de World Partition. Un índice no válido mostrará todo. |
| wp.Runtime.RuntimeSpatialHashCellToSourceAngleContributionToCellImportance | Toma un valor entre 0 y 1 que modula la contribución del ángulo entre el vector fuente-celda y el vector fuente-avance a la importancia de la celda. Cuanto más se acerque el valor a 0, menos contribuirá el ángulo a la importancia de la celda. |
| wp.Runtime.OverrideRuntimeSpatialHashLoadingRange | Establece el intervalo de carga en tiempo de ejecución. Toma los siguientes argumentos:
|
| wp.Runtime.MaxLoadingLevelStreamingCells | Limita el número de celdas de transmisión de carga simultánea de World Partition. |
| wp.Runtime.HLOD 0 | Muestra el mundo sin HLOD utilizando wp.Runtime.HLOD. |
Commandlets del constructor de World Partition
World Partition introduce un marco constructor de comandos a través de UWorldPartitionBuilderCommandlet y la clase base UWorldPartitionBuilder.
Estos commandlets se utilizan para automatizar procesos por lotes y generar o modificar datos en los niveles de World Partition. Los mundos grandes no tendrán que cargarse todos a la vez para hacer cosas como generar HLOD, datos de navegación de IA o volver a guardar un gran número de actores.
Constructor de HLOD de World Partition
Los HLOD se generan utilizando el commandlet WorldPartitionHLODsBuilder. Ejecutando este comando se crean los actores HLOD para las celdas de tu World Partition según los ajustes de generación que hayas especificado en las capas HLOD.
Comando: UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -builder=WorldPartitionHLODsBuilder
Para obtener más información sobre el uso de los niveles de detalle jerárquicos (HLOD) en World Partition y sobre el uso del commandlet WorldPartitionHLODsBuilder, consulta la documentación de World Partition - Nivel de detalle jerárquico.
Constructor de minimapas de World Partition
El commandlet WorldPartitionMiniMapBuilder genera o actualiza el minimapa que se muestra en la ventana del editor de World Partition.
Comando: UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -builder=WorldPartitionMiniMapBuilder
Constructor de cambio de nombre de duplicados de World Partition
El commandlet WorldPartitionRenameDuplicateBuilder automatiza el proceso de renombrar o duplicar un nivel de World Partition existente y todos sus actores.
Comando: UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -SCCProvider=None -builder=WorldPartitionRenameDuplicateBuilder -NewPackage=/Game/ThirdPersonBP/Maps/NewPackage
Esto creará un duplicado del nivel de World Partition del mapa OpenWorldTest llamado NewPackage y dejará intacto el mapa original.
Para renombrar tu mapa de World Partition en lugar de hacer una copia, añade el argumento -Rename.
Constructor de reguardado de actores de World Partition
El commandlet WorldPartitionResaveActorsBuilder vuelve a guardar todos los actores de un nivel de World Partition y admite un filtro de clase para volver a guardar solo un subconjunto de actores.
Comando: UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -SCCProvider=None -builder=WorldPartitionResaveActorsBuilder
Cuando ejecutas el ejemplo anterior, se vuelven a guardar todos los paquetes del actor en el nivel OpenWorldTest.
Puedes utilizar el argumento -ActorClass para especificar solo un subconjunto de actores que deban guardarse de nuevo. Por ejemplo, añadir -ActorClass=StaticMeshActor guardará de nuevo solo los actores de malla estática del nivel especificado.
Constructor de follaje de World Partition
En un mapa de World Partition, el tamaño de cuadrícula de follaje instanciado predeterminado para las instancias de follaje es de 256 metros. El commandlet WorldPartitionFoliageBuilder se utiliza para cambiar el tamaño de la cuadrícula de follaje instanciado para el nivel de World Partition existente.
Comando: UnrealEditor.exe QAGame Playground.umap -run=WorldPartitionBuilderCommandlet -Builder=WorldPartitionFoliageBuilder -NewGridSize=Value
Para obtener más información sobre el uso del modo de follaje con World Partition, consulta la documentación del modo de follaje.
Constructor de datos de navegación de World Partition
El commandlet WorldPartitionNavigationDataBuilder reconstruye la malla de navegación en tu nivel de World Partition.
Comando: UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -AllowCommandletRendering -builder=WorldPartitionNavigationDataBuilder -SCCProvider=None
Este commandlet recibe los siguientes argumentos:
| Argumento opcional | Descripción |
|---|---|
| -SCCProvider | Especifica qué proveedor de control de código fuente utilizar. Para ejecutar sin control de código fuente, especifica -SCCProvider=None. |
| -Verbose | Muestra el registro detallado. |
| -Log | Envía el registro a un archivo específico. |
| -CleanPackages | Borra todos los paquetes de datos de navegación en lugar de construirlos. |
Constructor de colecciones de objetos inteligentes de World Partition
El commandlet WorldPartitionSmartObjectCollectionBuilder reconstruye la colección de objetos inteligentes a partir de todos los componentes de objetos inteligentes de tu nivel de World Partition.
Comando: UnrealEditor.exe "C:\Users\user.name\Documents\Unreal Projects\MyProject\MyProject.uproject" "/Game/ThirdPersonBP/Maps/OpenWorldTest" -run=WorldPartitionBuilderCommandlet -builder=WorldPartitionSmartObjectCollectionBuilder
Cuando ejecutas el ejemplo anterior, se vuelven a construir todas las colecciones de objetos inteligentes del nivel OpenWorldTest. Puedes utilizar el argumento -SCCProvider con este comando para especificar qué proveedor de control de código fuente utilizar.