Como fazer voxel com aparência natural

11

Estou desenvolvendo um jogo de voxel, mas acho que uso a técnica errada. Atualmente, uso ladrilhos planos para fazer blocos e acho que há uma maneira melhor e mais eficiente.

Eu já vi um jogo de voxel, que tem um terreno natural. Com isso eu quero dizer não-bloco. O jogo tem 4 * 4 * 4 blocos por metro cúbico, e blocos como sujeira, areia e pedra, têm bordas arredondadas e meio que se derretem juntos (como nos jogos comuns). Heres uma captura de tela insira a descrição da imagem aqui

Como isso é alcançado?

KaareZ
fonte
você sabe que jogo é esse? como você pode ter certeza de que são voxels? Ok, descobriu-me, o jogo é chamado Blockscape: indiedb.com/games/blockscape
Babis
Existe um blog em procworld.blogspot.com com todos os tipos de postagens detalhadas sobre como seu mecanismo voxel foi criado. As postagens remontam a vários anos, desde o início do mecanismo até o momento em que está sendo licenciado para o Everquest Next.
stokastic

Respostas:

14

Isso é obtido interpolando rampas entre cubos de diferentes alturas.

Quando você tem um cenário como este (visto de lado)

  #
 ####   ##
############

você adicionaria polígonos para torná-lo assim:

 /#\
/####\ /##\
############

Um algoritmo para calcular essas rampas é o algoritmo de cubos de marchas .

Quando quiser que fique ainda mais bonito, não use apenas polígonos únicos para interpolar entre cubos, use curvas de vários polígonos. Mas lembre-se de que isso adicionará muitos polígonos à sua cena; portanto, você deve fazer isso apenas para os cubos que estão próximos à câmera.

Philipp
fonte
Obrigado! Você conhece um lugar que explica como fazer isso no OpenGL, Lightweight Java Game Library? Edit: E se você conhece uma boa técnica como adicionar detecção de colisão para o terreno em marcha, isso também seria apreciado.
precisa saber é
@KaareZ Desculpe, eu nunca trabalhei com LWJGL.
Philipp
@Philipp você pode estar interessado nesta resposta
1
Ou você pode pular o cubo de marcha completamente e ir para o muito mais interessante frankpetterson.com/publications/dualcontour/dualcontour.pdf menos complicado, você também pode simplesmente adicionar a função de ruído como um deslocamento ao vértice da parte final. Você ainda tem bloqueio, mas agora eles têm a propriedade de colinas por não serem estritamente alinhados em atrito em linha reta ... combinando contornos duplos e isso para um resultado ainda mais interessante (com um modificador no deslocamento de vértice para controlar a geração mais ou menos orgânica) .
precisa saber é o seguinte
forum.unity3d.com/attachments/captura-jpg.23795 aqui está uma imagem de "bloco de rolamento" (deslocamento aplicado como deslocamento vertical) Aqui está mais imagens, mas com deslocamento aplicado em todas as direções forum.unity3d.com/attachments/t1- Você está aqui: Página Inicial
Notícias
6

Há dois obstáculos com os quais você precisa lidar para obter qualidade semelhante à da imagem, a primeira é artística e a segunda é técnica (memória, processamento). Primeiro, suponho que você já resolveu seu problema artístico, você pode criar os modelos, a arte e os shaders etc. (Parcialmente porque não posso responder a problemas de arte)

O principal problema técnico é que, ao voxelizar os modelos criados em um alto nível de detalhe, você terá um grande número de pequenos voxels. Processar e renderizar um grande número de voxels não é trivial. A resposta para isso é chamada Sparse Voxel Octrees

O SVO oferece a capacidade de renderizar modelos altamente detalhados sem processar todos os voxels, mas apenas os visíveis. Observe que, para renderizar o SVO, você precisará usar a projeção de raios em vez da técnica de rasterização usual.

Mais detalhes sobre o SVO neste documento

Aqui está um código-fonte aberto com a implementação de licença BSD do SVO https://code.google.com/p/efficient-sparse-voxel-octrees/

Aqui está um vídeo que explica a renderização baseada em polígonos e em SVO (prós e contras).

concept3d
fonte
Isso é incrível! Além disso, dê uma olhada sauerbraten.org , ele usa uma técnica similar (mas não implementa marchando cubos, essa parte é deixada para o designer de nível)
Kroltan