Rendering de Mapas de Quake 2

Estos últimos días tuve que quedarme en cama, y aproveché el tiempo para investigar y experimentar (cuando podía leer) sobre el formato interno de los mapas de Quake 2.


Primer mapa del Juego, renderizado desde la posición de inicio del jugador.



Internamente, los mapas de Quake 2 son un Árbol BSP con información de “visibilidad”. Esto se debe a que el motor del Quake 2 era un híbrido entre un motor de Árboles BSP y Portal Engine, utilizando el árbol para determinar rápidamente la hoja en la cual se encuentra la cámara y luego la información de visibilidad para descartar grandes porciones de los mapas a la hora de dibujar.

El formato es relativamente simple de leer ya que básicamente se trata de un conjunto de blobs con un directorio. Esto hace que sea extremadamente sencillo de levantarlo desde C o C++.

La mayor dificultad con la que me encontré consistió en dar un formato a estos datos que sea razonable para enviarlos a OpenGL en forma eficiente (recordemos que es un formato del ’97). Particularmente, a mi gusto, existe demasiada “distancia” entre las hojas del Árbol BSP que contienen geometría y los detalles de la misma, debiendo atravesar varias tablas para llegar desde una hoja que se sabe visible hasta las coordenadas de los vértices que componen todos sus polígonos.

Finalmente se me ocurrió una forma de transformar todos los polígonos para evitar el tener que estar saltando entre 6 tablas cada cuadro a dibujar : )

El renderer dispone de un sistema de iluminación muy básico, con luces direccionales y brillo especular.

Los próximos pasos que me gustaría realizar serían implementar el mapeo de texturas (idealmente leyendo los archivos .wal originales del juego desde el paquete .pak) y el descartado de geometría mediante el cálculo del PVS.

Les dejo algunos screenshots.


Cuarto de "Exteriores" en base1.bsp

Cuarto de inicio del segundo mapa (base2.bsp).


This entry was posted in C++, Computación Gráfica, OpenGL, Programacion, Quake. Bookmark the permalink.

One Response to Rendering de Mapas de Quake 2

  1. Pingback: Varrojo@Linux » Redering de Mapas de Quake 2 – Texturas

Comments are closed.