Estou construindo uma ilha. Uso a solução clássica do mapa de altura: com uma função de construção de colinas, evitando os cantos do mapa, faço altitude. Então, o ruído permanente me dá algumas variáveis climáticas para lidar com os biomas. Agora, estou enfrentando dois desafios que estão, de alguma forma, conectados:
Em Dwarf Fortress, um dos aspectos mais interessantes da geração mundial é como o jogo parece "conhecer" áreas e dar nomes a elas, embora não sejam formas retangulares. Gostaria de poder "reconhecer" minhas florestas, meus rios, minhas colinas ... alguma idéia de que tipo de algoritmo eu poderia usar para digitalizar meu mapa e interpretar suas áreas? E como você armazenaria isso? Estou usando um gráfico C ++ básico feito de um vetor de vetor de "objeto de peças".
Esta ilha deve ser dividida em áreas políticas, não apenas em regiões puramente naturais. Eu poderia usar montanhas e rios para fazer "fronteiras naturais", mas meu mapa processualmente gerado não garante que terei bons "enclaves" que formariam um reino; Eu poderia me encontrar tendo uma gigantesca área política "em forma de fita" cercada por micro-reinos. Outra possibilidade seria procurar áreas apropriadas para uma cidade ou um castelo. Então, "cresça" uma área política ao seu redor. Mas, novamente, eu gostaria de ter alguns algoritmos conhecidos antes de tentar criar os meus.
Essa pergunta pode ser interpretada como um pouco vaga, então uma maneira de reformular seria: como particionar (sem modificar!) Um mundo gerado procedimentalmente em áreas adequadas para a jogabilidade? Agradeço antecipadamente por sua ajuda.
fonte
Respostas:
Amitp sugere o uso de bacias hidrográficas para definir várias regiões, conforme explicado em seu post sobre geração de mapas poligonais . As bacias hidrográficas são melhor visualizadas gerando um mapa usando sua demo . A vantagem de usar bacias hidrográficas para ajudar a subdividir os continentes é que ela fornece limites perpendiculares à costa, enquanto as montanhas geralmente fornecem limites paralelos.
Se subdividisse regiões geográficas, usaria uma combinação de montanhas, bacias hidrográficas e detecção de bordas nos vários biomas do meu mapa.
Também apontarei que as regiões políticas geralmente abrangem muitas regiões geográficas. Eu iria gerar regiões geográficas em primeiro lugar, em seguida, atribuir cada região uma classificação de conveniência (que é uma costa? Há ouro? Terra boa fazenda?) E custos de viagem (terreno íngreme? Madeiras pesadas ?.) Em seguida, usando seu algoritmo pathing favorito , gerar uma mapa térmico das viagens entre regiões desejáveis. Estas acabarão sendo suas estradas, e você poderá construir suas fronteiras políticas a partir daí. Esses limites geralmente terão muitas estradas dentro deles e menos estradas entre eles.
fonte
Para adicionar à resposta de Dan Rasmussen :
Uma das principais razões pelas quais mudei do Perlin Noise ( este projeto ) para o uso de polígonos ( este projeto ) é que os polígonos fornecem uma boa estrutura para atribuir áreas maiores (regiões políticas, florestas, desertos, áreas nomeadas, limites etc.). Começar com a estrutura e depois gerar o mapa é semelhante à renderização de polígonos - algo que é relativamente fácil. Começar com o mapa e depois inferir a estrutura é semelhante à visão computacional - algo que é relativamente difícil, mas possível. Como quero a estrutura e o mapa, decidi seguir a rota relativamente fácil de construir um mapa no topo da estrutura (nós e arestas).
Mesmo assim, descobri que queria estruturas maiores do que o que havia gerado. As bacias hidrográficas foram uma tentativa de construir essas estruturas maiores, mas preciso tentar mais abordagens para agrupar polígonos. Não encontrei algo com o qual estou feliz.
Não sei como Dwarf Fortress faz isso. Dado o quão brilhantes esses caras são, eu não ficaria surpreso se eles tivessem um sofisticado tipo de algoritmo de “visão computacional”.
fonte
Para sua primeira pergunta, meu melhor palpite seria usar um algoritmo de detecção de borda para encontrar os limites de suas regiões naturais (floresta, colinas, ...). Existem muitos algoritmos para esse tipo de problema.
Para a segunda pergunta, você pode usar sua própria idéia para gerar um castelo (geralmente no topo de uma colina para uma boa defesa e perto de água doce) e, em seguida, usar um algoritmo voronoi para ter regiões ao redor de cada castelo. Você pode usar os limites de ruído ou biomas para tornar os limites mais realistas.
fonte