Atualmente, estou tentando gerar um Minecraft como voxel terreno com 3D Simplex Noise e também quero implementar cavernas.
Eu encontrei o método de Perlin Worms neste tópico, que gera resultados muito bons. No entanto, não tenho idéia de como gerá-lo em um pedaço por pedaço. Isso é possível ou existem alternativas que produzam um sem-fim semelhante, como uma caverna em pedaços por pedaços?
Edit: Este é o problema que eu não sei como resolver.
Edit2: Este é o resultado da combinação de Ruído Multifractal 2D Ridged com um mapa de altura do Simplex Noise Ainda precisa de alguns ajustes, mas esse é praticamente o resultado que eu queria. Graças a Byte56.
terrain
minecraft-modding
voxels
perlin-noise
user000user
fonte
fonte
Respostas:
A maioria dos algoritmos de ruído perlin permitirá recuperar o valor do ruído em qualquer local, com algo parecido
noise(x,y,z)
. Isso faz com que seja bastante trivial gerar ruído em partes por partes. Tudo que você precisa fazer é passar a posição global, em vez da posição do bloco.Como você pode ver, estamos gerando terreno para o bloco, iterando sobre os limites do bloco e verificando se essa posição global é sólida ou não. Essa é provavelmente a mesma metodologia usada para gerar o terreno em geral.
perlinNoise.get
assume uma posição global e retorna sua densidade. OndeisSolid
seria apenas um teste simples para ver se o voxel é "denso o suficiente" para se qualificar para sólido.perlinNoise.get
pode ser mais complexo do que apenas um simples algoritmo de ruído. Você pode ter verificações com base na profundidade do voxel em seu mundo. Por exemplo, se o voxel estiver abaixo do que você decidiu como "nível absoluto da base", ele poderá usar o algoritmo perlin worms para retornar uma densidade; se estiver acima da base absoluta, poderá usar uma função de densidade normal para fornecer terreno mais variado. Eu recomendaria algumas misturas entre os dois.Combinar diferentes funções de ruído Perlin é apenas algo com o qual você precisa brincar e ver o que funciona. É melhor configurar seu ambiente para que você possa alterar alguns valores e trocar de terreno a quente sem precisar recarregar o jogo. Feliz experimentando.
fonte
Eu acho que é assim que funciona no Minecraft. Cada worm tem um comprimento máximo (vamos chamá-lo
M
). As cabeças de cada verme são calculadas com base na posição do pedaço. Ao renderizar cada pedaço, você deve verificar todos os pedaços dentro de umM
raio e seguir todos os seus worms. Não é ideal em termos de desempenho, mas funciona.fonte