Voxel Space
Demonstração web: engine Voxel Space
História
- Em 1992, a CPU era cerca de 1000 vezes mais lenta do que a atual, e a aceleração por GPU ainda era desconhecida ou cara.
- Os jogos 3D eram calculados apenas pela CPU, e o motor de renderização renderizava polígonos de uma única cor.
- Em 1991 foi lançado Gunship 2000 da MicroProse e, em 1992, Comanche da NovaLogic.
- Comanche trouxe gráficos impressionantes para a época, exibindo texturas, sombreamento e sombras.
Algoritmo de renderização
- O Comanche usa uma tecnologia chamada Voxel Space, baseada em uma ideia semelhante ao ray casting.
- O engine Voxel Space é um engine 2.5D e não oferece toda a liberdade de um engine 3D tradicional.
Mapas de altura e de cor
- A forma mais simples de representar terreno é usar mapas de altura e mapas de cor.
- O jogo Comanche usa mapas de altura e mapas de cor de 1 byte com tamanho 1024 * 1024.
- Esses mapas são periódicos e não conseguem representar estruturas complexas, mas o mapa de cor já inclui sombreamento e sombras, então não há necessidade de calcular iluminação durante a renderização.
Algoritmo básico
- O algoritmo de renderização de um engine 3D é bastante simples.
- O engine Voxel Space rasteriza os mapas de altura e de cor e desenha linhas verticais.
- Limpa a tela e renderiza do fundo para frente para garantir a oclusão.
- Determina as linhas do mapa que correspondem à distância óptica a partir do observador.
- Rasteriza a linha e a adapta ao número de colunas da tela.
- Obtém a altura e a cor correspondentes ao segmento de linha no mapa 2D.
- Aplica projeção de perspectiva às coordenadas de altura.
- Com a altura e a cor obtidas pela projeção de perspectiva, desenha linhas verticais.
Adicionando rotação
- Com o algoritmo acima, só é possível ver para o norte.
- Para visualizar outros ângulos, são necessárias algumas linhas de código para rotacionar as coordenadas.
Aumentando a performance
- Há vários truques para melhorar o desempenho.
- Em vez de renderizar do fundo para frente, é possível renderizar da frente para trás.
- É necessário um y-buffer extra para garantir a oclusão.
- Ajusta o nível de detalhe para renderizar mais detalhes perto e menos detalhes longe.
Links
- Página de demonstração do projeto web
- Introdução ao engine de terreno Voxel
- Site pessoal
Mapa
Licença
- A parte de software está sob licença MIT.
- A tecnologia Voxel Space pode ainda estar patenteada em alguns países.
- Os mapas de cor e de altura foram obtidos por engenharia reversa do jogo Comanche e estão excluídos da licença.
1 comentários
Comentários do Hacker News
Sinto falta de uma era em que algoritmos originais e elegantes ainda ofereciam uma experiência meio mágica. Quando os recursos de hardware eram limitados, os desenvolvedores avançavam os jogos com novas técnicas e criatividade.
O vídeo de um programa chamado mars.com parece interessante.
Esse método de renderização é legal, mas não é fácil classificá-lo como voxel porque não rende volume arbitrário. Na prática, é uma implementação limpa de um renderizador de heightmap.
Pode haver uma referência a discussões de 2020 ou 2017 no título. Em 2021 também houve conversa sobre o mesmo repositório.
Lembro de quando começei a aprender programação ter feito um programa em QBasic para gerar um heightmap de terreno e renderizá-lo em estilo isométrico. Foi uma das coisas que me fez continuar programando.
Eu fiz um jogo com essa técnica no Adventure Game Studio. Não está otimizado para as versões antigas do motor, mas pretendo atualizá-lo algum dia.
A maioria dos jogos modernos tem montanhas “vazias”, mas com esse método as montanhas parecem mais macias.
Lembro da primeira vez que joguei Comanche. Tinha a vibe de que aquilo era de um futuro de verdade, ou de um filme de ficção científica.
Projetos de renderizador por software são divertidos e ótimos para um projeto de fim de semana. Já fiz uma implementação similar no passado, mas a implementação atual é bem mais rápida e simples.
Quero viver numa linha do tempo alternativa em que a GPU seja baseada em voxels