# Id Tech 3

id Tech 3 (anteriormente conocido como Quake III engine) es un motor de juego desarrollado por id Software para Quake III Arena y se han realizado muchos juegos bajo este motor y el motor del Quake III: Team Arena. En la época, competía con el Unreal engine, ambos motores fueron ampliamente licenciados. id Tech 3 es una mejora sustancial del motor de Quake y el id Tech 2. Aunque id Tech 3 derivó de la id Tech 2, una gran parte del código era nuevo o reescrito. Fue sucedido por el id Tech 4. En la QuakeCon 2005, John Carmack anunció que el código fuente del quake III se distribuirá bajo la Licencia Pública General GNU (versión 2), y fue lanzado el 19 de agosto de 2005. El código puede ser descargado desde el sitio FTP de id. El uso más notable del código fuente libre es el motor de IW, que se utiliza en la serie de Call of Duty.

## Características del motor
### Gráficos

A diferencia de la mayoría de los motores de otros juegos lanzados en la época, incluyendo su principal competidor, Unreal Tournament , id Tech 3 requiere un acelerador de gráficos compatible con OpenGL para funcionar. El motor no incluye un software de render. id Tech 3 introdujo superficies basadas en curvas, además de planos volúmenes, que son responsables de muchas de las superficies presentes en el juego.

#### Shaders

La tecnología gráfica del juego está basado firmemente en torno a un sistema "shader" en el que la aparición de muchas superficies pueden ser definidas en archivos de texto a que se refiere como "secuencias de comandos de sombreado". Los shaders se describen y representan como varias capas, cada capa contiene una textura, un "modo de mezcla", que determina la forma de superponer sobre la capa anterior y modos de orientación de la textura como el mapeo de medio ambiente, desplazamiento y rotación. Estas características se pueden ver fácilmente en el juego con muchas superficies brillantes en cada mapa, e incluso en los modelos de los personajes. El sistema de sombreado va más allá de la apariencia visual, la definición del contenido de los volúmenes (por ejemplo, un volumen de agua se define mediante la aplicación de un sombreado del agua de su superficie), la emisión de luz y sonido que se reproduzca cuando un volumen es pisoteada. Con el fin de calcular estos shaders, id Tech 3 implementó ingeniería inversa, que atrajo a una gran cantidad de atención en la comunidad de desarrollo de juegos para su uso inteligente de las operaciones con enteros.

#### Video

Todos los videos en el juego todo usan un formato propietario llamado "RoQ", que fue creado originalmente por Graeme Devine , diseñador del Quake 3, para el juego The 11th Hour. Internamente RoQ utiliza cuantización de vectores para codificar video y DPCM para codificar audio. Mientras que el formato en sí mismo es propietario exitosamente se aplicó ingeniería inversa en el año 2001, y el actual decodificador RoQ está presente en el código fuente liberado del Quake 3. RoQ ha visto poca utilidad fuera de los juegos basados en los motores id Tech 3 o id Tech 4, pero con el apoyo de varios reproductores de video (tales como MPlayer) y varios codificadores existentes.

#### Modelos

id Tech 3 carga modelos 3D en el formato MD3. El formato utiliza movimientos de vértice (a veces llamado animación por vértice) en comparación con la animación esquelética con el fin de guardar la animación. Las características de la animación en el formato MD3 son superiores a los formatos MD2 del id Tech 2, ya que un animador es capaz de tener un número variable de fotogramas por segundo en vez de la estándar de 10 fotogramas MD2 por segundo. Esto permite animaciones más complejas que son menos inestables que los modelos que se encuentran en el Quake II.
Otra característica importante del formato MD3 es que los modelos se dividen en tres partes diferentes que están anclados el uno al otro. Normalmente, esto se utiliza para separar la cabeza, el torso y las piernas de modo que cada parte puede animar de forma independiente por el bien de la mezcla de animación (es decir, una animación que se ejecutan en las piernas, y la animación de disparo en el torso). Cada parte del modelo tiene su propio conjunto de texturas.
Los modelos de los personajes están iluminados y sombreados con sombreado Gouraud mientras que los niveles (almacenado en el formato BSP) se encienden, ya sea con lightmaps o sombreado Gouraud en función de la preferencia del usuario. El motor es capaz de tener luces de colores o mapas de luz y aplicarlas a los modelos, resultando en una calidad de iluminación que fue, para su época, muy avanzado.
En la versión GPL del código fuente, la mayoría del código ocupado en los archivos de animación esquelética de MD4 se extravió. Se presume que Id simplemente nunca terminó el formato, aunque casi todas las licencias derivaron de sus propios sistemas esqueléticos de animación de lo que estaba presente. Ritual Entertainment hizo este uso en el juego, Heavy Metal: F.A.K.K.² , el SDK para constituir la base de apoyo MD4 se completó por alguien que usó el seudónimo de Gongo.

#### sombras dinámicas

El motor es capaz de tres diferentes tipos de sombras. Uno solo coloca un círculo con bordes desvanecidos a los pies de los personajes, comúnmente conocida como la técnica de la "sombra gota". Los otros dos modos de proyectar una sombra precisa poligonales en el suelo. La diferencia entre estos dos modos es la propia dependencia opaca, sombras negras sólidas, mientras que los intentos de otro modo (con éxitos mezclados) para proyectar el volumen de profundidad de paso en un negro casi transparente. Ninguna de estas técnicas recortaron los volúmenes de sombra, haciendo que las sombras se extiendan por las paredes y a través de la geometría.

#### Otras características visuales

Estas incluyen niebla volumétrica , espejos, portales, calcomanías, y distorsión de vértice a modo de onda.

### Sonido

El sistema de sonido de Quake III tiene salida para dos canales usando un buffer de bucle de salida, mezclado desde 96 pistas con espacialización estéreo y efectos Doppler. Todas las mezclas de sonido se hacen dentro del motor, lo que puede crear problemas para las licencias que esperan implementar EAX o soporte para sonido envolvente. Ciertos efectos populares tales como ecos, tampoco están. Uno de los mayores problemas del sistema de sonido es que el mezclador no tiene su propio thread, así que si el juego se detiene por mucho tiempo (particularmente al navegar los menús o conectarse a un servidor), el pequeño buffer de salida empieza a repetirse, un problema muy notable. Este problema además está presente en los motores Quake, Quake II y el Id tech 4.

### Trabajo en red

Id tech 3 usa un sistema de cuadros (frames) para recolectar información sobre las pantallas del juego y subirlas a un cliente UDP. El servidor actualiza la interacción de los objetos a una frecuencia fija e independiente de las frecuencias de los clientes que actualizan el servidor con sus acciones. Luego intenta enviar el estado de todos los objetos en ese punto a tiempo (el cuadro actual del servidor) a cada cliente. El servidor intenta omitir tanta información como sea posible sobre cada pantalla, mandando solo diferencias desde la última pantalla confirmada como recibida por el cliente. Además, se comprimen casi todos los paquetes de datos usando la codificación de Huffman (codificación Delta), usando datos estáticos y frecuencias pre-calculadas, para reducir el ancho de banda mucho más.
Quake III, además, integró un sistema de protección contra trampas relativamente elaborado, llamado "pure server" o servidor puro. Cualquier cliente que se conecte a un servidor puro automáticamente activa el modo puro, y cuando éste está activo, solo se puede acceder a los archivos dentro de los paquetes de datos. Los clientes, además, son desconectados si sus paquetes de datos fallan durante uno de los varios controles de integridad. El archivo cgame.qvm, debido a su alto potencial para ser modificado con malas intenciones, está sujeto a controles adicionales de integridad. El sistema puede ser un obstáculo para los desarrolladores, quienes deben desactivar manualmente el servidor puro para probar mapas o modificaciones que todavía no están en los paquetes de datos. Versiones posteriores reemplazaron el servidor puro por el soporte para el anticheat PunkBuster, si bien todos los vínculos entre el juego y este software están ausentes en el código fuente lanzado, por la naturaleza de código cerrado de PunkBuster y que su inclusión en el código sea una violación a la Licencia GNU GPL.

### Máquina virtual

Id tech 3 usa una máquina virtual utilizada para controlar el comportamiento de los objetos, efectos y predicción del cliente, todos estos en el servidor y la interfaz de usuario. Esto presentó muchas ventajas, ya que los autores de las modificaciones no necesitaban preocuparse por arruinar el juego con mal código, y los clientes podían mostrar efectos más avanzados o mejores menús de juego de los que fueron posibles con el motor de Quake II, además de la alta personalización que ganó la interfaz de usuario para las modificaciones. Los archivos de la MV fueron programados en ANSI C, utilizando LCC para compilarlos al formato pseudo-ensamblador RISC de 32 bits. Luego, son convertidos por una herramienta llamada q3asm a archivos QVM, que son archivos multi-segmentados compuestos por datos estáticos e instrucciones basadas en un set reducido de códigos operacionales de entrada. A menos que haya operaciones que requieran una endianicidad específica, un archivo QVM puede correr en cualquier plataforma soportada por Quake 3. La máquina virtual también contiene compiladores de código de bytes para las arquitecturas x86 y PowerPC, ejecutando instrucciones QVM a través de un intérprete.

## ioquake3

ioquake3 es un proyecto de motor de juego que tiene por objeto desarrollar bajo el gratuito Id tech 3. El proyecto se inició poco después de la liberación de código fuente con el objetivo de crealo libre de bugs, aumentando el código fuente en el motor en la que nuevos juegos y proyectos se puedan basar. Además, el proyecto tiene como objetivo proporcionar un mejor entorno en el cual, Quake III: Arena, the Team Arena expansion pack y todos los populares mods se puedan jugar. Las características notables añadidas por el proyecto incluye soporte VoIP incorporado, prestación anaglifo estéreo (para ver con anteojos 3D), y numerosas correcciones de seguridad. Una lista completa de características está disponible en el sitio web del proyecto.
ioquake3 ha sido la base de varios proyectos basados en el id Tech 3, tales como OpenArena, Tremulous, Smokin 'Guns, Urban Terror y World of Padman, así como los proyectos de motor de juego, tales como efport (un proyecto de recreación de Star Trek: Voyager - Elite Force Holomatch) y OpenMoHAA. El motor y sus juegos asociados se han incluido en varias distribuciones Linux y BSD. El proyecto ioquake3 también se ha utilizado en el campo académico como base para una variedad de investigaciones en instituciones como el centro de investigación computacional en música y acústica de la Universidad de Stanford (CCRMA), Notre Dame como la fundación de investigación de VR, y el centro de Tecnología para Arquitecturas Avanzadas de Internet de la Universidad de Swinburne. Hay esfuerzos de colaboración, incluso de los investigadores en Carnegie Mellon University y la Universidad de Toronto que utilizan ioquake3 como plataforma para su publicación de investigaciones.
Los estudiantes han utilizado ioquake3 como base para el trabajo de gráficos avanzados para su tesis, así como el trabajo de Stephan Reiter que incluso ha sido señalado en el proyecto LLVM debido a su síntesis del motor ioquake3, técnica de representación ray-tracing, y LLVM.
Aunque el nombre ioquake3 se basa en el sitio de Ryan "icculus" Gordon icculus.org, Ryan no lidera el proyecto. En cambio, mantiene un papel de mentor y provee almacenamiento para las listas de correo y repositorio SVN usados por el proyecto.
El código fuente de Return to Castle Wolfenstein y Wolfenstein: Enemy Territory fue liberado bajo la Licencia Pública General GNU el 12 de agosto de 2010. Los desarrolladores de ioquake3anunciaron el inicio de los respectivos proyectos del motor poco después.

## Usos del motor
### Proyectos basados en la versión GPL

ioquake3 - Un proyecto para eliminar errores, limpiar el código fuente y añadir características avanzadas de audio y gráficos a través de SDL y OpenAL. También intencionado de actuar como un paquete de base limpia para construir otros proyectos. El motor de juego es compatible con formato Ogg Vorbis y captura de demos de video en formato .Avi. Juegos escritos que usan este motor son: World of Padman , OpenArena (imitando Quake III Arena), Tremulous y TurtleArena. Space Trader - Un juego de acción y estrategia de HermitWorks Entertainment Smokin' Guns - está destinado a ser una simulación semi-realista del "Viejo oeste". Originalmente una modificación de Quake 3, pero se convirtió en un juego stand-alone. Se ha portado a ioquake3 en el año 2009. Urban Terror hasta la versión 4.1 - una conversión total del Quake 3 que se volvió stand-alone (que todavía conserva la capacidad de ser jugado como un mod de Quake III al copiar el directorio q3ut4 a Quake III). El código fuente no ha sido lanzado al público hasta el momento.

### Juegos que usan una licencia privativa
#### para PC y/o consolas

* Quake III Arena (1999) id Software
* Heavy Metal: F.A.K.K.² (2000) - Ritual Entertainment
* Star Trek: Voyager Elite Force (2000) - Raven Software
* American McGee's Alice (2000) - Rogue Entertainment (basado en el código base F.A.K.K.²)
* Quake III: Team Arena (2000) - id Software
* Return to Castle Wolfenstein (2001) - Gray Matter Interactive (SP) / Nerve Software (MP)
* Medal of Honor: Allied Assault (2002) - 2015, Inc. (basado en la modificación del código base F.A.K.K.²)
* Star Wars Jedi Knight II: Jedi Outcast (2002) - Raven Software
* Medal of Honor: Allied Assault - Spearhead (2002) - EA Los Angeles
* Soldier of Fortune II: Double Helix (2002) - Raven Software
* Wolfenstein: Enemy Territory (2003) - Splash Damage
* Star Trek: Elite Force II (2003) - Ritual Entertainment
* Star Wars Jedi Knight: Jedi Academy (2003) - Raven Software
* Medal of Honor: Allied Assault - Breakthrough (2003) - TKO Software
* Call of Duty (2003) - Infinity Ward
* Call of Duty: United Offensive (2004) - Gray Matter Interactive
* Iron Grip: Warlord (2008) - Isotx
* Dark Salvation (2009) - Mangled Eye Studios
* Quake Live (2010) - id Software

#### Juegos aparecidos solo en consolas

* James Bond 007: Agent Under Fire (2001) - EA Redwood Shores (iba a ser una versión PS2 y PC del juego de PlayStation y Nintendo 64 "El mundo no basta (The world is not enough)" que fue cancelado en última instancia; basado en la modificación del código base F.A.K.K.²)
* James Bond 007: Everything or Nothing (2004) - EA Redwood Shores
* Call of Duty Classic (2009) - Infinity Ward

#### Cancelado

* Severity (2007) - Cyberathlete Professional League