Construir mapas grandes solía exigir a los desarrolladores dividir manualmente los mapas en subniveles y luego utilizar el sistema de transmisión 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 de gestión de datos y transmisión de niveles basado en la distancia, que ofrece una solución completa para gestionar 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 proporciona un sistema de transmisión automático 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:
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 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 los Ajustes del entorno.
Las siguientes plantillas utilizan World Partition pero tienen Activar transmisión desactivado por defecto:
Vacío
Primera persona
Tercera persona
Vista elevada
Vehículo avanzado
Utilizar el mapa por defecto de Mundo abierto
El tipo de mapa por defecto 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
One File Per Actor
Capas de datos
Niveles de detalle jerárquicos
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 cenital, luz direccional, niebla de altura exponencial y nubes volumétricas.
Para utilizar el tipo de mapa por defecto Mundo abierto en tu proyecto:
Abre el menú Archivo y selecciona Nuevo nivel.
Selecciona el tipo de mapa Mundo abierto.
Ha clic en 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 del 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=WorldPartitionConvertCommandlet.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 versiones utilizar. Para ejecutar sin control de versiones, especifica |
-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 |
-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 One File Per 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 por defecto 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
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 del 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. |
Cargado espacialmente | Determina si el actor está cargado espacialmente:
|
Como los actores se guardan en sus propios archivos individuales utilizando la función One File Per Actor, no necesitas sacar el archivo de nivel del control de versiones para hacer cambios en los actores del mundo. Esto libera el archivo de nivel para otros miembros de tu equipo.
Si quieres más información sobre el sistema One File Per Actor y el control de versiones integrado de Unreal Engine, consulta la documentación de One File Per 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
Ajustes de cuadrícula en tiempo de ejecución
El primero es la posición de las fuentes de transmisión en el nivel.
Haz clic en la imagen para verla a tamaño completo.
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 la ubicación a la que se teletransportará un jugador, de modo que pueda cargar las celdas allí. Una vez cargadas las celdas de la cuadrícula, el jugador se teletransporta a la ubicación y se desactiva el componente de la fuente de transmisión. Dado que 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 por defecto:
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 |
|---|---|
Intervalo de carga por defecto 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 cuadrícula 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 intervalo 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.
Ajustes de 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 Ajustes del entorno, en la sección Ajustes 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.
Si quieres 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, el tamaño de la celda es 256 m x 256 m x 256 m. |
Intervalo de carga | Determina el intervalo de una fuente de transmisión donde se cargan las celdas. En la imagen anterior, Intervalo de carga tiene un radio de 768 metros alrededor de una fuente de transmisión. |
Bloquear si la transmisión es 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á habilitada. |
Cuadrículas de vista previa | Cuando están habilitadas, muestran las líneas de la cuadrícula en el visor. |
Cargar y descargar regiones en el editor
Para facilitar el desarrollo de mundos grandes, el mundo se descarga 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.
Cargar y descargar regiones con la ventana de World Partition
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 desde 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 la selección.
Cargar y descargar regiones con volúmenes de ubicación
Las regiones también se pueden cargar y descargar mediante volúmenes de ubicación.
Un volumen de ubicación es un volumen exclusivo del editor que se coloca en el nivel y representa una región del mapa en la ventana de World Partition.
Sigue los pasos que se indican a continuación para añadir un volumen de ubicación:
Abre la ventana Colocar actores, si aún no está abierta.
Busca Volumen de ubicación. Haz clic en él y arrastra uno al nivel.
Guarda el nivel.
Una vez guardado el nivel, aparecerá una nueva región en la ventana de World Partition con el mismo nombre que el volumen de ubicación.
Selecciona la región y haz clic con el botón derecho del ratón para abrir el menú contextual. Haz clic en Cargar región seleccionada para cargar la región. Varias regiones pueden cargarse o descargarse al mismo tiempo seleccionándolas arrastrando con el ratón o pulsando Ctrl y haciendo clic en varias regiones.
Los volúmenes de ubicación son compatibles con los siguientes ajustes:
Ajustes de pincel
| Ajuste | Descripción |
|---|---|
Mostrar volumen sombreado | Muestra el pincel con un volumen sombreado. |
Valor de opacidad del volumen sombreado | Establece la opacidad del volumen sombreado usando un valor entre 0.0-1.0. |
Muchas de las opciones en la sección Ajustes de pincel dependen de la forma de pincel que selecciones.
World Partition
| Ajuste | Descripción |
|---|---|
Cargar y descargar | Carga y descarga la región del volumen seleccionado. |
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 commandlet 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 de verificación Activar soporte de texturas virtuales.
Atajos y opciones útiles de la ventana World Partition
| Atajo de teclado | Descripción |
|---|---|
Mayús + arrastrar | Ajusta la selección al tamaño actual de la cuadrícula en tiempo de ejecución. |
Hacer doble clic | Mueve la cámara a la posición actual en todos los visores. |
Mayús + hacer doble clic | Inicia una sesión PIE en la ubicación donde se ha hecho clic. |
Ctrl + doble clic | Carga una región alrededor de la posición en la que se ha hecho clic. |
Botón central del ratón + arrastrar | Muestra la distancia desde el punto en el que se ha hecho clic hasta el punto final en unidades de Unreal Engine. |
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. Si quieres 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.
Hacer cook de 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 hacer cook de tu mapa de World Partition:
En Windows, abre una ventana del 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=WindowsNoEditorhace cook del proyecto para plataformas Windows.-UnVersionedguarda todos los paquetes con cook sin versiones. Se presupone que son los más actuales al cargarlos.-map=Playgroundespecifica el nombre del mapa, en este casoPlayground.umap.
Si quieres más información sobre el uso del comando Cook, consulta Content Cooking (Hacer cooking 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 blueprint, 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 |
Commandlets de 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.
Si quieres más información sobre el uso de los commandlets de constructor de World Partition, consulta World Partition Builder Commandlets Reference (referencia de commandlets de constructor de World Partition).