O ruído 3D se torna obrigatório se o terreno precisar de redes de cavernas e saliências.
Para extrair uma isossuperfície das informações de densidade, as 2 técnicas mais populares são Cubos de Marcha (MC) e o mais recente Dual Contouring (DC). A estrutura de dados necessária é bem diferente, dependendo do método escolhido.
Como mencionado anteriormente, o artigo da Geiss GPU Gems 3 é um ponto de partida muito instrutivo para a compreensão e implementação de terrenos de MC na GPU (observe que sua abordagem de MC funciona inteiramente na GPU e requer pelo menos uma SM4 - compatível com GS).
Como os dados de densidade nos voxels do MC só podem permanecer nas bordas do voxel, o MC clássico pode contornar o volume sem preservar os recursos das bordas afiadas. O DC não sofre essa desvantagem, pois as informações de densidade são expressas como um ponto 3D (minimizador de QEF) localizado em qualquer lugar dentro do voxel mais o sinal em cada canto.
Por outro lado, o MC não sofre de faces que se cruzam automaticamente porque todos os triângulos gerados estão entre seus voxels correspondentes, enquanto o DC precisa de cálculos adicionais para evitar interseções entre as faces geradas. Os autores da DC abordaram esse problema em uma versão aprimorada de seu algoritmo.
http://www.cs.wustl.edu/~taoju/research/interfree_paper_final.pdf
http://www.cs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf
Esse sujeito também propõe uma abordagem provavelmente mais limpa, com base na análise convexa / côncava, para evitar interseções automáticas. Ele também usa regras de divisão de quadratura melhores para ajudar a preservar a orientação da borda:
http://www2.mae.cuhk.edu.hk/~cwang/pubs/TRIntersectionFreeDC.pdf
O Classic MC também não está pronto para uso "livre de trincas" e pode exigir correção de trincas se executado em locais sem restrições. DC não sofre com este último problema.
Aqui está uma pesquisa bastante agradável e completa da maioria das técnicas de extração de malha:
http://www.cs.berkeley.edu/~jrs/mesh/
Uma abordagem octree / voxel é intrinsecamente "compatível com CSG", o que facilita o planejamento de uma estratégia de nível de jogo totalmente "destrutível", mas se for necessário implementar tudo isso em um jogo, a profundidade da octree também precisará ser frustum -dependente.
Se todo o material couber na memória ou for transmitido corretamente, os dados também podem ser usados para renderizar AO e computar física / colisão.
Meu palpite, nesse exemplo em particular, é que ele usou o valor z para determinar que tipo de material: rocha, pedra, sujeira ou ar.
fonte
O Minecraft usa o algoritmo de cubos de marcha para gerar terreno 3D. Eu não tenho uma referência para isso, me desculpe. Não tenho certeza exatamente do que Notch estava falando quando mencionou a função Perlin Noise - talvez uma semente para o algoritmo de marchar em cubos. Mais informações aqui:
E um ótimo artigo sobre GPU Gems se você estiver interessado em marchar em cubos:
fonte
fonte