Pular para o conteúdo

Geração de Mundo

Visão Geral

A geração de mundo no Hytale é conduzida por um pipeline baseado em grafo de nós chamado HytaleGenerator. Ele produz terreno através de funções de ruído em camadas, mapas de densidade, definições de biomas e atribuições de prefabs ponderados. Cada componente é definido em um arquivo JSON separado e conectado através de referências de importação/exportação. O sistema suporta formas de continente procedurais, zonas climáticas, redes de cavernas, escavação de rios e posicionamento de dispersão por bioma.

Localização dos Arquivos

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/

Schema

Settings (Settings.json)

FieldTypeRequiredDefaultDescription
StatsCheckpointsnumber[]NãoLimiares de contagem de chunks nos quais estatísticas de geração são registradas.
CustomConcurrencynumberNão-1Contagem de threads para geração. -1 usa o padrão do motor.
BufferCapacityFactornumberNão0.1Fração da memória total alocada para buffers de geração.
TargetViewDistancenumberNão512Distância de visualização alvo em blocos usada para pré-computar prioridade de geração.
TargetPlayerCountnumberNão3Contagem esperada de jogadores usada para dimensionar filas de geração.

Nó de Densidade (arquivos de grafo de nós)

Arquivos de densidade definem uma árvore de nós de processamento que produz um campo escalar usado para forma de terreno, escavação de rios ou mapeamento de biomas. Cada nó tem no mínimo:

FieldTypeRequiredDefaultDescription
$NodeIdstringSimIdentificador único para este nó no grafo.
TypestringSimTipo do nó. Veja tipos de nós abaixo.
SkipbooleanNãofalseQuando true, o nó é ignorado durante a geração.
ExportAsstringNãoNome sob o qual a saída deste nó é publicada para importação por outros grafos.
SingleInstancebooleanNãofalseQuando true, o nó é avaliado uma vez e cacheado globalmente.
InputsDensityNode[]Não[]Nós filhos cujas saídas alimentam este nó.

Tipos Comuns de Nós de Densidade

TypeDescriptionKey Fields
SimplexNoise2DGerador de ruído simplex 2DLacunarity, Persistence, Octaves, Scale, Seed
ConstantProduz um valor fixoValue
SumSoma todos os valores de entrada
Min / MaxRetorna o mínimo ou máximo das entradas
ClampLimita a entrada entre dois limitesWallA, WallB
NormalizerRemapeia uma faixa de valoresFromMin, FromMax, ToMin, ToMax
InverterNega a entrada
AbsValor absoluto
MixMistura duas entradas usando uma terceira como alfa
ScaleMultiplica coordenadas de entradaScaleX, ScaleY, ScaleZ
CacheCacheia o resultado dos nós filhosCapacity
YOverrideForça uma coordenada Y fixa para avaliação 2DValue
DistanceDistância da origem com uma curva de atenuaçãoCurve
ExportedMarca a saída de um nó para importação entre grafosExportAs, SingleInstance
ImportedReferencia um nó exportado por nomeName

Assignment (posicionamento de dispersão/prefab)

Arquivos de atribuição controlam quais decorações, vegetação ou estruturas são colocadas em uma região de bioma. Eles usam uma abordagem de função de campo com delimitadores.

FieldTypeRequiredDefaultDescription
TypestringSimTipo de nível superior, tipicamente "FieldFunction".
ExportAsstringNãoNome de exportação para esta atribuição.
FieldFunctionFieldFunctionSimFunção de ruído que produz o campo de densidade de posicionamento.
DelimitersDelimiter[]SimFaixas dentro da saída da função de campo que ativam o posicionamento.

FieldFunction

FieldTypeRequiredDefaultDescription
TypestringSimTipo de ruído, ex: "SimplexNoise2D".
SkipbooleanNãofalseIgnora esta função.
LacunaritynumberNão2Multiplicador de frequência por oitava.
PersistencenumberNão0.5Multiplicador de amplitude por oitava.
OctavesnumberNão1Número de oitavas de ruído.
ScalenumberSimEscala espacial do ruído.
SeedstringSimString de semente para geração determinística.

Delimiter

FieldTypeRequiredDefaultDescription
MinnumberSimValor mínimo do campo para esta faixa.
MaxnumberSimValor máximo do campo para esta faixa.
AssignmentsAssignmentNodeSimO que posicionar quando o valor do campo cai nesta faixa.

AssignmentNode

FieldTypeRequiredDefaultDescription
TypestringSim"Weighted", "Constant" ou "Cluster".
SkipChancenumberNão0Probabilidade (0–1) de pular o posicionamento inteiramente.
SeedstringNãoSemente para seleção aleatória ponderada.
WeightedAssignmentsWeightedEntry[]NãoArray de opções ponderadas (quando Type é "Weighted").
PropPropConfigNãoPrefab/prop a ser posicionado (quando Type é "Constant" ou dentro de uma entrada ponderada).

Exemplo

Mapa de densidade (Assets/Server/HytaleGenerator/Density/Map_Default.json, condensado para mostrar a estrutura):

{
"$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" }
]
}
]
}
]
}
]
}
]
}
]
}

Configurações do gerador (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 ruído para forma de continente, temperatura e clima
  • Ambientes — definições de ambiente atribuídas por zona
  • Instâncias — configs de instância que selecionam um perfil de geração de mundo