Saltearse al contenido

Generación de mundos

Descripción general

La generación de mundos en Hytale es impulsada por un pipeline basado en grafos de nodos llamado HytaleGenerator. Produce terreno a través de funciones de ruido por capas, mapas de densidad, definiciones de biomas y asignaciones de prefabs ponderadas. Cada componente se define en un archivo JSON separado y se conecta mediante referencias de importación/exportación. El sistema soporta formas de continentes procedurales, zonas climáticas, redes de cuevas, tallado de ríos y colocación de dispersión por bioma.

Ubicación de archivos

Assets/Server/HytaleGenerator/
Assignments/
Boreal1/
Boreal1_Hedera_Trees.json
Boreal1_Hedera_Mushrooms.json
...
Desert1/
Plains1/
Volcanic1/
Biomes/
Basic.json
Boreal1/
Boreal1_Hedera.json
Boreal1_Henges.json
Desert1/
Plains1/
Volcanic1/
Default_Flat/
Default_Void/
BlockMasks/
Density/
Map_Default.json
Map_Portals.json
Map_Tiles.json
Plains1_Caves_Terrain.json
...
Graphs/
Settings/
Settings.json
WorldStructures/

Esquema

Settings (Settings.json)

FieldTypeRequiredDefaultDescription
StatsCheckpointsnumber[]NoUmbrales de conteo de chunks en los que se registran estadísticas de generación.
CustomConcurrencynumberNo-1Conteo de hilos para la generación. -1 usa el valor predeterminado del motor.
BufferCapacityFactornumberNo0.1Fracción de memoria total asignada a los búferes de generación.
TargetViewDistancenumberNo512Distancia de visión objetivo en bloques usada para pre-calcular la prioridad de generación.
TargetPlayerCountnumberNo3Conteo esperado de jugadores usado para dimensionar las colas de generación.

Nodo de densidad (archivos de grafo de nodos)

Los archivos de densidad definen un árbol de nodos de procesamiento que producen un campo escalar usado para la forma del terreno, tallado de ríos o mapeo de biomas. Cada nodo tiene como mínimo:

FieldTypeRequiredDefaultDescription
$NodeIdstringIdentificador único para este nodo en el grafo.
TypestringTipo de nodo. Ver tipos de nodo abajo.
SkipbooleanNofalseCuando es true, el nodo se omite durante la generación.
ExportAsstringNoNombre bajo el cual se publica la salida de este nodo para importación por otros grafos.
SingleInstancebooleanNofalseCuando es true, el nodo se evalúa una vez y se cachea globalmente.
InputsDensityNode[]No[]Nodos hijos cuyas salidas alimentan este nodo.

Tipos comunes de nodos de densidad

TypeDescriptionKey Fields
SimplexNoise2DGenerador de ruido simplex 2DLacunarity, Persistence, Octaves, Scale, Seed
ConstantProduce un valor fijoValue
SumSuma todos los valores de entrada
Min / MaxRetorna el mínimo o máximo de las entradas
ClampLimita la entrada entre dos paredesWallA, WallB
NormalizerRemapea un rango de valoresFromMin, FromMax, ToMin, ToMax
InverterNiega la entrada
AbsValor absoluto
MixMezcla dos entradas usando una tercera como alfa
ScaleMultiplica las coordenadas de entradaScaleX, ScaleY, ScaleZ
CacheCachea el resultado de los nodos hijosCapacity
YOverrideFuerza una coordenada Y fija para evaluación 2DValue
DistanceDistancia desde el origen con una curva de caídaCurve
ExportedMarca la salida de un nodo para importación entre grafosExportAs, SingleInstance
ImportedReferencia un nodo exportado por nombreName

Asignación (colocación de dispersión/prefabs)

Los archivos de asignación controlan qué decoraciones, vegetación o estructuras se colocan en una región de bioma. Usan un enfoque de función de campo con delimitadores.

FieldTypeRequiredDefaultDescription
TypestringTipo de nivel superior, típicamente "FieldFunction".
ExportAsstringNoNombre de exportación para esta asignación.
FieldFunctionFieldFunctionFunción de ruido que produce el campo de densidad de colocación.
DelimitersDelimiter[]Rangos dentro de la salida de la función de campo que activan la colocación.

FieldFunction

FieldTypeRequiredDefaultDescription
TypestringTipo de ruido, ej. "SimplexNoise2D".
SkipbooleanNofalseOmitir esta función.
LacunaritynumberNo2Multiplicador de frecuencia por octava.
PersistencenumberNo0.5Multiplicador de amplitud por octava.
OctavesnumberNo1Número de octavas de ruido.
ScalenumberEscala espacial del ruido.
SeedstringCadena de semilla para generación determinista.

Delimiter

FieldTypeRequiredDefaultDescription
MinnumberValor mínimo de campo para este rango.
MaxnumberValor máximo de campo para este rango.
AssignmentsAssignmentNodeQué colocar cuando el valor del campo cae en este rango.

AssignmentNode

FieldTypeRequiredDefaultDescription
Typestring"Weighted", "Constant" o "Cluster".
SkipChancenumberNo0Probabilidad (0–1) de omitir la colocación por completo.
SeedstringNoSemilla para selección aleatoria ponderada.
WeightedAssignmentsWeightedEntry[]NoArreglo de opciones ponderadas (cuando Type es "Weighted").
PropPropConfigNoPrefab/prop a colocar (cuando Type es "Constant" o dentro de una entrada ponderada).

Ejemplo

Mapa de densidad (Assets/Server/HytaleGenerator/Density/Map_Default.json, condensado para mostrar la estructura):

{
"$NodeId": "Exported.Density-ed27c3c9",
"Type": "Exported",
"ExportAs": "Biome-Map",
"SingleInstance": true,
"Inputs": [
{
"Type": "YOverride",
"Value": 0,
"Inputs": [
{
"Type": "Cache",
"Capacity": 1,
"Inputs": [
{
"Type": "Mix",
"Inputs": [
{ "Type": "Imported", "Name": "Biome-Map-Tiles" },
{ "Type": "Constant", "Value": -0.3 },
{
"Type": "Clamp",
"WallA": 0,
"WallB": 1,
"Inputs": [
{
"Type": "Normalizer",
"FromMin": 0.62,
"FromMax": 0.62,
"ToMin": 0,
"ToMax": 1,
"Inputs": [
{ "Type": "Exported", "ExportAs": "World-River-Map" }
]
}
]
}
]
}
]
}
]
}
]
}

Configuración del generador (Assets/Server/HytaleGenerator/Settings/Settings.json):

{
"StatsCheckpoints": [1, 100, 500, 1000],
"CustomConcurrency": -1,
"BufferCapacityFactor": 0.1,
"TargetViewDistance": 512,
"TargetPlayerCount": 3
}

Páginas relacionadas

  • Máscaras de mundo — máscaras de ruido para forma de continente, temperatura y clima
  • Ambientes — definiciones de ambiente asignadas por zona
  • Instancias — configuraciones de instancia que seleccionan un perfil de generación de mundo