Voxel Space
Demo web: Motor Voxel Space
Historia
- En 1992, la CPU era unas mil veces más lenta que la actual, y la aceleración por GPU era poco conocida o muy costosa.
- Los juegos 3D se calculaban solo en la CPU, y el motor de renderizado dibujaba polígonos de un solo color.
- En 1991 se lanzó Gunship 2000 de MicroProse y en 1992 salió Comanche de NovaLogic.
- Comanche mostraba gráficos sorprendentes para esa época, incluyendo texturas, sombreado y sombras.
Algoritmo de renderizado
- Comanche usa una técnica llamada Voxel Space, que se basa en una idea similar al ray casting.
- El motor Voxel Space es un motor 2.5D y no ofrece toda la libertad de un motor 3D tradicional.
Mapas de altura y de color
- La forma más sencilla de representar el terreno es usar mapas de altura y mapas de color.
- Comanche usaba mapas de altura y color de 1 byte con un tamaño de 1024 * 1024.
- Estos mapas son periódicos y no permiten representar estructuras complejas, pero el mapa de color ya incluye sombreado y sombras, por lo que no hace falta calcular la luz durante el renderizado.
Algoritmo base
- El algoritmo de renderizado del motor 3D es muy simple.
- El motor Voxel Space rasteriza los mapas de altura y color y dibuja líneas verticales.
- Borra la pantalla y renderiza de atrás hacia adelante para garantizar la oclusión.
- Determina la línea del mapa correspondiente a la distancia óptica del observador.
- Rasteriza la línea para ajustarla al número de columnas de la pantalla.
- Toma la altura y el color de cada segmento de línea en el mapa 2D.
- Proyecta en perspectiva las coordenadas de altura.
- Con la altura proyectada y el color correspondiente, dibuja una línea vertical.
Añadiendo rotación
- Con ese algoritmo solo se puede mirar al norte.
- Para ver otros ángulos se necesitan unas pocas líneas de código para rotar las coordenadas.
Mejora de rendimiento
- Hay varios trucos para mejorar el rendimiento.
- Se puede renderizar de adelante hacia atrás en vez de hacerlo de atrás hacia adelante.
- Se necesita un y-buffer adicional para garantizar la oclusión.
- Ajusta el nivel de detalle para renderizar más detalle cerca y menos detalle a distancia.
Enlaces
- Página de demo del proyecto web
- Introducción al motor de terreno Voxel
- Sitio web personal
Mapas
Licencia
- La parte de software está bajo la licencia MIT.
- La tecnología Voxel Space podría seguir protegida por patente en algunos países.
- Los mapas de color y altura no están cubiertos por la licencia porque fueron ingeniería inversa desde el juego Comanche.
1 comentarios
Comentarios de Hacker News
Extraño la época en que los algoritmos ingeniosos y elegantes daban una experiencia casi mágica. En la época de recursos de hardware limitados, los desarrolladores avanzaban los juegos con nuevas técnicas y mucha creatividad.
Es interesante ver un video relacionado con un programa llamado mars.com.
Este método de renderizado es interesante, pero es difícil clasificarlo como voxel porque no puede renderizar volúmenes arbitrarios. Es una implementación muy limpia de un renderizador de mapas de altura.
Puede ser que el título incluya discusiones de 2020 o 2017. También hubo debate sobre el mismo repositorio en 2021.
Cuando aprendí a programar por primera vez, recuerdo haber hecho un programa en QBasic para generar mapas de altura del terreno y renderizarlos en estilo isométrico. Eso fue una de las cosas que me hizo seguir programando.
Usé esta técnica para hacer un juego con Adventure Game Studio. No está optimizada para versiones antiguas del motor, pero planeo actualizarla alguna vez.
La mayoría de los juegos modernos tienen montañas que parecen huecas, pero este método hace que las montañas se vean sólidas.
Recuerdo lo impactante que fue jugar Comanche por primera vez. Sentía como si viniera del futuro o de una película.
Un proyecto de renderizador por software es divertido y funciona perfecto para proyectos de fin de semana. Implementé un algoritmo similar antes, pero esta versión actual es mucho más rápida y más simple.
Me gustaría vivir en una línea temporal alternativa donde la GPU fuera basada en voxels.