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
Como isso é alcançado?
opengl
rendering
voxels
terrain-rendering
KaareZ
fonte
fonte
Respostas:
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.
fonte
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).
fonte