El motor de Quake es el motor de juego desarrollado por id Software para impulsar su videojuego Quake de 1996 . Presentaba un verdadero renderizado 3D en tiempo real y ahora tiene la licencia de GNU General Public License v2.0 o posterior .
Desarrollador (es) | id Software , ( John Carmack , Michael Abrash , John Cash) |
---|---|
Lanzamiento final | 1.09 / 21 de diciembre de 1999 |
Repositorio | github.com/id-Software/Quake |
Escrito en | C , Ensamblaje (para renderizado y optimización de software) |
Plataforma | DOS , AmigaOS , Microsoft Windows , macOS , Linux , Amiga , PowerPC , Nintendo 64 , RiscPC , Zeebo |
Predecesor | Motor Doom |
Sucesor | Motor Quake II , GoldSrc |
Licencia | GNU GPL-2.0 o posterior |
Sitio web | www |
Después del lanzamiento, se bifurcó inmediatamente , al igual que el diseño de niveles. Gran parte del motor permaneció en Quake II y Quake III Arena . El motor de Quake , al igual que el motor de Doom , utilizó la partición de espacio binario (BSP) para optimizar la representación del mundo. El motor de Quake también usó sombreado Gouraud para objetos en movimiento y un mapa de luz estático para objetos inmóviles.
Históricamente, el motor Quake se ha tratado como un motor independiente de su sucesor, el motor Quake II . Sin embargo, ambos motores ahora se consideran variantes de id Tech 2 . Aunque, las bases de código para Quake y Quake II eran versiones GPL independientes. [1] [2]
Historia
El motor Quake fue desarrollado a partir de 1995 para el videojuego Quake , lanzado el 22 de junio de 1996. John Carmack hizo la mayor parte de la programación del motor, con la ayuda de Michael Abrash en algoritmos y optimización de ensamblajes . El motor Quake II (id Tech 2) se basó en él.
John Romero inicialmente concibió Quake como un juego de acción que tiene lugar en un mundo poligonal completamente en 3D , inspirado en el juego de lucha 3D Virtua Fighter de Sega AM2 . Quake también tenía la intención de presentar un combate cuerpo a cuerpo en tercera persona influenciado por Virtua Fighter . Sin embargo, id Software lo consideró arriesgado y habría llevado más tiempo desarrollar el motor. Debido a que el proyecto estaba tardando demasiado, finalmente se abandonó el combate cuerpo a cuerpo en tercera persona. [3] [4]
Diseño e hitos del motor
Reducir la complejidad 3D para aumentar la velocidad
Quake fue el primer juego en 3D real que utilizó un sistema de diseño de mapas especial que preprocesó y preprocesó algunos elementos del entorno 3D, para reducir el procesamiento requerido cuando se jugaba en las CPU de 50-75 MHz de la época. El entorno 3D en el que se desarrolla el juego se denomina mapa , aunque es de naturaleza tridimensional en lugar de un espacio 2D plano. El programa editor de mapas utiliza una serie de objetos geométricos 3D convexos simples conocidos como pinceles que se dimensionan y giran para construir el entorno. Los pinceles se colocan y orientan para crear un espacio volumétrico cerrado, vacío, y cuando el diseño está completo, el mapa se ejecuta a través del preprocesador de renderizado. El preprocesador se utiliza para ubicar dos tipos de espacios vacíos en el mapa: el espacio vacío encerrado por pinceles donde se jugará el juego y el otro espacio vacío fuera de los pinceles que el jugador nunca verá. El preprocesador luego quita las caras posteriores de los pinceles individuales, que están fuera del espacio de juego, dejando solo unos pocos polígonos que definen el perímetro exterior del espacio de juego cerrado.
Por lo general, una vez que se ha preprocesado un mapa, no se puede volver a editar de forma normal porque los pinceles originales se han cortado en trozos pequeños. En su lugar, los datos del editor de mapas originales con los pinceles se conservan y se utilizan para crear nuevas versiones del mapa. Pero es posible editar un mapa procesado abriéndolo en un editor de vértices especial y editando los datos sin procesar del vértice, o agregando o quitando caras de triángulos individuales. Aunque difícil, esta técnica fue utilizada ocasionalmente por tramposos para crear ventanas en las paredes, para ver enemigos normalmente ocultos acercándose desde detrás de puertas y paredes, y resultó en un mecanismo anti-trampas usado en juegos 3D recientes que calcula una suma de verificación para cada archivo usado en el juego, para detectar jugadores que utilizan archivos de mapas potencialmente pirateados.
Un archivo de mapa procesado puede tener un recuento de polígonos mucho menor que el mapa original sin procesar, a menudo entre un 50% y un 80%. En las PC de 50-75 MHz de la época, era común que este paso de poda demorara muchas horas en completarse en un mapa, y a menudo se ejecutaba de la noche a la mañana si el diseño del mapa era extremadamente complejo.
Este paso de procesamiento previo no puede funcionar si hay pequeños agujeros o "fugas" que interconectan el espacio interior del juego con el espacio vacío exterior, y era común que se abandonaran proyectos complejos de construcción de mapas porque el diseñador del mapa no podía localizar las fugas en su mapa. Para evitar fugas, los cepillos deben superponerse y penetrar ligeramente entre sí; intentar alinear perfectamente a lo largo de los bordes de pinceles de formas inusuales en una cuadrícula puede resultar en espacios muy pequeños que son difíciles de localizar.
El cielo abierto en los mapas de Quake , de hecho, no está abierto, sino que está cubierto y encerrado con pinceles grandes y texturizado con una textura especial de caja de cielo , que está programada para usar mapeo de esferas , y por lo tanto siempre se ve igual desde cualquier posición de visualización, la ilusión de un cielo lejano.
Precálculo de luces y sombras
Quake también incorporó el uso de mapas de luz y fuentes de luz 3D, a diferencia de la iluminación estática basada en sectores que se usaba en los juegos del pasado. La innovación de id Software se ha utilizado para muchos juegos 3D lanzados desde entonces, particularmente los juegos de disparos en primera persona, aunque id Software cambió a un modelo de iluminación y sombras unificadas para Doom 3 (sin embargo, cambiaron de nuevo a un método de mapas de luz o semi-mapas de luz comenzando con RAGE ). Después de que se eliminó el exceso de polígonos de un mapa, se usó un segundo sistema de preprocesamiento para precalcular y hornear los mapas de luz en el mapa del juego para reducir aún más la carga en la CPU cuando se juega. Sin embargo, el procesamiento completo de la luz podría llevar mucho tiempo, por lo que para el proceso de diseño inicial del mapa, se podría realizar un procesamiento de luz de menor calidad, pero a costa de crear una proyección de luz irregular alrededor de las luces.
Sección del mapa para aumentar la velocidad
Para disminuir aún más la carga de trabajo de la representación 3D, se desarrolló un mecanismo para seccionar grandes regiones del mapa que actualmente no son visibles para el jugador, por lo que el motor no necesitaría representar esos espacios invisibles. Un motor de renderizado 3D sin tales optimizaciones debe dibujar cada parte del mundo y luego intentar determinar qué polígonos son los más cercanos, luego ocultar todos los polígonos ubicados detrás de estos polígonos más cercanos (una técnica conocida como Z-buffering ). El hecho de que un polígono no sea visible no significa que esté excluido de los cálculos de la escena.
El motor de Quake se optimizó específicamente para evitar este problema. Se le podría decir al motor con anticipación que no calcule el renderizado para todos los objetos en cualquier espacio fuera de la vista del jugador, reduciendo en gran medida la carga de renderizado en la CPU. Este efecto se nota en el juego como pequeños túneles con curvas pronunciadas de 90 grados que conducen de un gran espacio a otro. Este pequeño túnel sirve para bloquear la vista en el espacio contiguo sin renderizar, y se coloca un tipo especial de cepillo transparente (llamado visportal ) dentro de él para definir el borde de donde el motor debe dejar de representar el espacio contiguo. Es poco común en el Quake original poder ver en toda la longitud de un mapa, y los espacios al aire libre son a menudo muy altos y estrechos, principalmente utilizando la distancia de arriba hacia el cielo abierto o de abajo hacia la lava para crear una ilusión de extensión poligonal baja. .
Cómo se realiza el seccionamiento
Se crea un árbol de partición de espacio binario (BSP) a partir del mapa, lo que simplifica la complejidad de la búsqueda de un polígono dado a O (número de polígonos). Cada hoja crea un área de espacio 3D (imagina cortar un pastel en pedazos arbitrarios). Las hojas de este árbol binario tienen polígonos del mapa original asociados con ellas, que luego se utilizan para calcular la visibilidad de cada área. Para cada área, el algoritmo VSD busca las partes del mapa para las que existe una línea de visión. Esto se denomina conjunto potencialmente visible (PVS). [5]
Este proceso utiliza una gran cantidad de memoria, ya que debería tomar (dónde es el número de polígonos) bits (solo se necesita información visible / oculta). John Carmack se dio cuenta de que un área ve solo una pequeña fracción de las otras áreas, por lo que comprimió esta información utilizando codificación de longitud de ejecución (RLE). Esto es lo que permitió Quake ' geometría compleja s que pasarán a ser tan rápido en el hardware del tiempo.
Acelerar el renderizado y el orden de renderizado
Para reducir el sobredimensionamiento (renderizar un nuevo píxel que oculta un punto renderizado previamente, lo que significa que el trabajo anterior fue inútil y desperdiciado), el entorno se mostró primero, de adelante hacia atrás. Para ocultar partes de muros ocultos por otros muros, una Lista de bordes global ordenaba los bordes de polígonos ya renderizados; Los nuevos polígonos se recortaron primero contra los bordes anteriores para que solo las partes visibles llegaran al búfer de fotogramas.
Además, al renderizar el entorno, se llenó un búfer z, pero nunca se leyó mientras se renderizaba el entorno, ya que el árbol BSP y la Lista de bordes globales aseguraron que cada píxel se renderizara solo una vez. El ZBuffer se utilizó más tarde para representar correctamente personajes y otros objetos en movimiento que estaban parcialmente ocultos por el entorno.
El bucle de representación de píxeles se implementó en el ensamblaje. La corrección e interpolación de la perspectiva de las coordenadas de textura se realizó utilizando la unidad de punto flotante , debido al número limitado de registros enteros; también permite calcular la operación de división costosa (parte de la corrección de perspectiva) en la unidad de punto flotante en paralelo con la interpolación de enteros (en otras palabras, sin costo).
La textura base y el mapa de luz de una pared se renderizaron al mismo tiempo: un "caché de superficie" estaba creando nuevas superficies, que son nuevas texturas preiluminadas que combinan las texturas del mapa base y de luz horneadas juntas. Las superficies no se utilizaron desde que se lanzaron algunos fotogramas, mientras que las nuevas superficies necesarias se crearon dinámicamente. Generar las superficies consumía menos tiempo que un pase de iluminación secundaria. Para ahorrar memoria, primero se generaron superficies más pequeñas utilizando mapas MIP de la textura original para más paredes.
Los personajes fueron iluminados con una luz ambiental constante, cuyo valor provenía de una estructura que almacena los colores ambientales en 3D, dependiendo de la posición del personaje. Los personajes y objetos muy alejados de la cámara no se renderizaron en 3D, sino que se renderizaron como vóxeles : grandes puntos cuadrados 3D de un solo color (que provenían de la textura del objeto).
Aceleración 3D por hardware
Quake fue uno de los primeros juegos en admitir la aceleración de hardware 3D . Aunque inicialmente se lanzó solo con renderizado de software , John Carmack creó una versión del ejecutable de Quake que aprovechó el chip gráfico Vérité 1000 de Rendition ( VQuake ). Se agregó compatibilidad con OpenGL en forma del ejecutable GLQuake para Windows 95 y superior. Otras tarjetas capaces de renderizar GLQuake fueron una tarjeta Intergraph 3D OpenGL profesional (y muy cara) y, más tarde, las tarjetas PowerVR .
Para optimizar el motor de renderizado del software, los mapas de luz fueron compartidos por polígonos que estaban cerca en el espacio y en la misma hoja del árbol BSP. Esto significa que, con bastante frecuencia, los polígonos que utilizan la misma textura principal no se pueden renderizar al mismo tiempo con la aceleración 3D, debido a que la segunda unidad de texturas múltiples tiene que ser reconfigurada con otro mapa de luz. Esta decisión de arquitectura redujo el rendimiento de renderizado acelerado por hardware.
Juego en red
Quake incluye modos multijugador cooperativo y deathmatch a través de LAN o Internet . Más tarde se agregaron modos multijugador adicionales usando mods .
Quake usa el modelo cliente-servidor , donde un servidor tiene el control de todos los eventos del juego. Todos los jugadores se conectan a este servidor para participar, y el servidor les dice a los clientes lo que está sucediendo en el juego. El servidor puede ser un servidor dedicado o un servidor de escucha . Incluso en la última situación, Quake todavía usa el modelo cliente-servidor, a diferencia de la red de igual a igual utilizada por algunos otros juegos. Por lo tanto, Quake no puede sufrir juegos de red desincronizados que podrían ocurrir cuando diferentes clientes no estén de acuerdo entre sí, ya que el servidor es siempre la autoridad final.
Motores derivados
El 21 de diciembre de 1999, John Carmack de id Software lanzó el código fuente del motor Quake en Internet bajo los términos de GPL-2.0-o-posterior, permitiendo a los programadores editar el motor y agregar nuevas funciones. Los programadores pronto lanzaron nuevas versiones del motor en la red. Algunos de los motores más conocidos son:
- GoldSrc : el primer motor creado por Valve . Se utilizó en la serie Half-Life , dio lugar al motor Source .
- DarkPlaces : un motor significativamente modificado que se utiliza en varios juegos independientes y modificaciones de Quake . [6] Aunque su última versión estable fue el 13 de mayo de 2014, ha recibido numerosas actualizaciones a través de su repositorio SVN desde entonces. [7] Mientras que la página de inicio y el código fuente de DarkPlaces están alojados en Icculus.org , Team Xonotic proporciona espejos del código fuente de DarkPlaces en varias plataformas de codificación social [8] [9] ya que el juego está construido y distribuido con la versión de desarrollo del motor.
- Tenebrae : un derivado que fue el primero en introducir iluminación y sombreado en tiempo real en el motor Quake .
- Telejano : una modificación que agrega muchas más funciones y efectos de partículas.
- Tomaz Quake : una de las primeras modificaciones del motor Quake en la red. Tomaz Quake se actualizó por última vez a la versión 1.481 el 8 de junio de 2010.
- Twilight Engine : el más rápido de los motores Quake conocidos , esta modificación se basa en el rendimiento más que en características adicionales.
- vkQuake - (Derivado de Fitzquake derivado de GLquake) Utiliza la API de Vulkan para la renderización programada por el empleado de id Software Axel Gneiting, publicada bajo la GPLv2 . [10] [11]
Juegos que utilizan el motor Quake
Año | Título | Desarrollador (es) | Editorial (es) |
---|---|---|---|
1996 | Terremoto | software de identificación | GT interactivo |
1997 | Paquete de misiones de Quake n. ° 1: Azote de Armagon | Hipnotic interactivo | Reinos 3D |
Paquete de misiones de Quake n. ° 2: Disolución de la eternidad | Entretenimiento pícaro | Reinos 3D | |
Hexen II | Software Cuervo | id Software , Activision | |
Malicia | Ratloop | Axcess cuántico | |
X-Men: Los estragos del Apocalipsis | Entretenimiento de gravedad cero | WizardWorks | |
1998 | Paquete de misiones Hexen II: Portal of Praevus | Software Cuervo | id Software , Activision |
2000 | Arena láser | Estudios Trainwreck | ValuSoft |
2001 | Operativo de la CIA: Misiones en solitario | 2015, Inc. , Trainwreck Studios | ValuSoft |
Mercenario urbano | Moshpit Entertainment | ||
2002 | Guerra eterna: sombras de luz | Software de dos chicos | Software de dos chicos |
2005 | Nexuiz | Alientrap | Alientrap |
2011 | Xonótico | Equipo Xonotic | Equipo Xonotic |
2021 | Ira: Aeon of Ruin | Reinos 3D | Reinos 3D , Entretenimiento 1C |
Herramientas de motor Quake
- QuArK : una herramienta multipropósito parajuegos basados en el motor Quake .
Ver también
- Lista de motores de juegos
- Motor de disparos en primera persona
- id Tech
- Motor Quake II
Referencias
- ^ "Lanzamiento de la GPL del motor de Quake" . Consultado el 24 de mayo de 2020 .
- ^ "Lanzamiento de id Tech 2 GPL" . Consultado el 24 de mayo de 2020 .
- ^ "¿A John Romero todavía le gusta dispararle a la gente?" . Próxima Generación . No. 30, junio de 1997. págs. 9-12.
- ^ Edge , mayo de 1997.
Mi idea original era hacer algo como Virtua Fighter en un mundo en 3D, con peleas de contacto total, pero también podrías correr por un mundo y hacer lo mismo que haces en Quake , solo que cuando te metías en estos tumultos, la cámara se mostraba en una perspectiva en tercera persona. Hubiera sido genial, pero nadie más tenía fe en intentarlo. El proyecto estaba tardando demasiado y todo el mundo quería recurrir a lo seguro: la fórmula.
- ^ Abrash, Michael. "Motor 3-D de Quake: el panorama general" . Consultado el 22 de agosto de 2012 .
- ^ "Página de inicio de DarkPlaces" . icculus.org . Consultado el 6 de noviembre de 2017 .
- ^ "Repositorio de subversión de Darkplaces" . svn.icculus.org . Consultado el 9 de agosto de 2019 .
- ^ "DarkPlaces Quake Engine en Xonotic GitLab" . Consultado el 3 de febrero de 2020 .
- ^ "DarkPlaces Quake Engine en Xonotic GitHub" . Consultado el 6 de noviembre de 2017 .
- ^ Gneiting, Axel (20 de julio de 2016). "Mi puerto Vulkan Quake 1 está ejecutando el mod" In the Shadows ". Aún faltan algunas cosas. El código está aquí https://github.com/Novum/vkQuake" . Twitter . Consultado el 6 de agosto de 2016 .
- ^ "Puerto de Vulkan Quake basado en QuakeSpasm" . github.com/Novum/vkQuake . Consultado el 6 de agosto de 2016 .
enlaces externos
- Modelo de iluminación de Quake : almacenamiento en caché de superficie por Michael Abrash
- Análisis del código del motor Quake por Fabien Sanglard
- Código fuente para winquake, glquake, quakeworld y glquakeworld