id Tech 3
id Tech 3 in Quake III, the engine's parent game | |
Developer(s) | id Software |
---|---|
Initial release | December 2, 1999 |
Stable release |
1.32b
/ August 19, 2005 |
Repository |
github |
Written in | C |
Type | Game engine |
License | GNU General Public License |
Website |
www |
id Tech 3, popularly known as the Quake III Arena engine, is a game engine developed by id Software for their video game Quake III Arena. It has been adopted by numerous games. During its time, it competed with the Unreal Engine; both engines were widely licensed.
While id Tech 3 is based on id Tech 2 engine; a large amount of the code was rewritten. Successor id Tech 4 was derived from id Tech 3.
At QuakeCon 2005, John Carmack announced that the id Tech 3 source code would be released under the GNU General Public License (version 2), and it was released on August 19, 2005. Originally distributed by id via FTP,[1] the code can be downloaded from id's GitHub account.
Features
Graphics
Unlike most other game engines released at the time — including its primary competitor, the Unreal Engine, id Tech 3 requires an OpenGL-compliant graphics accelerator to run. The engine does not include a software renderer.
id Tech 3 introduced spline-based curved surfaces in addition to planar volumes, which are responsible for many of the surfaces present within the game.[2]
- Shaders
The graphical technology of the game is based tightly around a "shader" system where the appearance of many surfaces can be defined in text files referred to as "shader scripts." Shaders are described and rendered as several layers, each layer contains a texture, a "blend mode" which determines how to superimpose it over the previous layer and texture orientation modes such as environment mapping, scrolling, and rotation. These features can readily be seen within the game with many bright and active surfaces in each map and even on character models. The shader system goes beyond visual appearance, defining the contents of volumes (e.g. a water volume is defined by applying a water shader to its surfaces), light emission and which sound to play when a volume is trodden upon.[3] In order to assist calculation of these shaders, id Tech 3 implements a specific fast inverse square root function, which attracted a significant amount of attention in the game development community for its clever use of integer operations.[4][5]
- Video
In-game videos all use a proprietary format called "RoQ", which was originally created by Graeme Devine, the co-designer of Quake 3, for the game The 11th Hour. Internally RoQ uses vector quantization to encode video and DPCM to encode audio. While the format itself is proprietary it was successfully reverse-engineered in 2001,[6] and the actual RoQ decoder is present in the Quake 3 source code release. RoQ has seen little use outside games based on the id Tech 3 or id Tech 4 engines, but is supported by several video players (such as MPlayer) and a handful of third-party encoders exist. One notable exception is the Unreal Engine-based game Postal 2: Apocalypse Weekend, which uses RoQ files for its intro and outro cutscenes, as well as for a joke cutscene that plays after a mission at the end of part one.
- Models
id Tech 3 loads 3D models in the MD3 format. The format uses vertex movements (sometimes called per-vertex animation) as opposed to skeletal animation in order to store animation. The animation features in the MD3 format are superior to those in id Tech 2's MD2 format because an animator is able to have a variable number of key frames per second instead of MD2's standard 10 key frames per second. This allows for more complex animations that are less "shaky" than the models found in Quake II.
Another important feature about the MD3 format is that models are broken up into three different parts which are anchored to each other. Typically, this is used to separate the head, torso and legs so that each part can animate independently for the sake of animation blending (i.e. a running animation on the legs, and shooting animation on the torso). Each part of the model has its own set of textures.
The character models are lit and shaded using Gouraud shading while the levels (stored in the BSP format) are lit either with lightmaps or Gouraud shading depending on the user's preference. The engine is able to take colored lights from the lightgrid and apply them to the models, resulting in a lighting quality that was, for its time, very advanced.
In the GPLed version of the source code, most of the code dealing with the MD4 skeletal animation files was missing. It is presumed that id simply never finished the format,[7] although almost all licensees derived their own skeletal animation systems from what was present. Ritual Entertainment did this for use in the game, Heavy Metal: F.A.K.K.², the SDK to which formed the basis of MD4 support completed by someone who used the pseudonym Gongo.[8]
- Dynamic shadows
The engine is capable of three different kinds of shadows. One just places a circle with faded edges at the characters' feet, commonly known as the "blob shadow" technique. The other two modes project an accurate polygonal shadow across the floor. The difference between the latter two modes is one's reliance on opaque, solid black shadows while the other mode attempts (with mixed success) to project depth-pass stencil shadow volume shadows in a medium-transparent black. Neither of these techniques clip the shadow volumes, causing the shadows to extend down walls and through geometry.
- Other rendering features
Other visual features include volumetric fog, mirrors, portals, decals, and wave-form vertex distortion.
Sound
id Tech 3's sound system outputs to two channels using a looping output buffer, mixed from 96 tracks with stereo spatialization and Doppler effect. All of the sound mixing is done within the engine, which can create problems for licensees hoping to implement EAX or surround sound support. Several popular effects such as echoes are also absent.
A major flaw of the sound system is that the mixer is not given its own thread,[9] so if the game stalls for too long (particularly while navigating the menus or connecting to a server), the small output buffer will begin to loop, a very noticeable artifact. This problem was also present in the Doom 3, Quake, and Quake II engines.
Networking
id Tech 3 uses a "snapshot" system to relay information about game "frames" to the client over UDP. The server updates object interaction at a fixed rate independent of the rate clients update the server with their actions and then attempts to send the state of all objects at that moment (the current server frame) to each client. The server attempts to omit as much information as possible about each frame, relaying only differences from the last frame the client confirmed as received (Delta encoding). All data packets are compressed by Huffman coding with static pre-calculated frequency data to reduce bandwidth use even further.[10]
Quake 3 also integrated a relatively elaborate cheat-protection system called "pure server." Any client connecting to a pure server automatically has pure mode enabled, and while pure mode is enabled only files within data packs can be accessed. Clients are disconnected if their data packs fail one of several integrity checks. The cgame.qvm file, with its high potential for cheat-related modification, is subject to additional integrity checks. Developers must manually deactivate pure server to test maps or mods that are not in data packs using the PK3 file format. Later versions supplemented pure server with PunkBuster support, though all the hooks to it are absent from the source code release because PunkBuster is closed source software and including support for it in the source code release would have caused any redistributors/reusers of the code to violate the GPL.[11]
Virtual machine
id Tech 3 uses a virtual machine to control object behavior on the server, effects and prediction on the client and the user interface. This presents many advantages as mod authors do not need to worry about crashing the entire game with bad code, clients could show more advanced effects and game menus than was possible in Quake II and the user interface for mods was entirely customizable.
Virtual machine files are developed in ANSI C, using LCC to compile them to a 32-bit RISC pseudo-assembly format. A tool called q3asm then converts them to QVM files, which are multi-segmented files consisting of static data and instructions based on a reduced set of the input opcodes. Unless operations which require a specific endianness are used, a QVM file will run the same on any platform supported by Quake 3.
The virtual machine also contained bytecode compilers for the x86 and PowerPC architectures, executing QVM instructions via an interpreter.
ioquake3
Ioquake3 is a game engine project which aims to build upon the id Tech 3 source code release[12][13] in order to remove bugs, clean up source code and to add more advanced graphical and audio features via SDL and OpenAL. ioquake3 is also intended to act as a clean base package, upon which other projects may be built. The game engine supports Ogg Vorbis format and video capture of demos in .avi format.[14]
The project was started shortly after the source code release with the goal of creating a bug-free, enhanced open source Quake III engine source code distribution upon which new games and projects can be based. In addition, the project aims to provide an improved environment in which Quake III: Arena, the Team Arena expansion pack and all the popular mods can be played.[15][16][17][18] Notable features added by the project include builtin VoIP support, Anaglyph stereo rendering (for viewing with 3D glasses), and numerous security fixes. A full list of features is available on the project's website.
Ioquake3 has been the basis of several game projects based on the id Tech 3 engine, such as OpenArena (mimicking Quake III Arena),[19][20] Tremulous,[21][22] Smokin' Guns,[23] Urban Terror,[24][25] Turtle Arena and World of Padman[26][27] as well as game engine projects such as efport (a Star Trek: Voyager – Elite Force Holomatch engine recreation project), ioJedi Outcast,[28] ioJedi Academy,[29] ioDoom3[30] and OpenMoHAA.[31] The engine and its associated games have been included in several Linux and BSD distributions.[32][33][34][35][36]
The source code for the Return to Castle Wolfenstein and Wolfenstein: Enemy Territory engines was released under the GNU General Public License on August 12, 2010.[37] The ioquake3 developers announced the start of respective engine projects (iortcw,[38][39] iowolfet, Enemy territory:Legacy[40]) soon after.[41]
The ioquake3 project has also been used in the academic arena as the basis for a variety of research in institutions such as Stanford University's Center for Computer Research in Music and Acoustics (CCRMA),[42][43] Notre Dame as the foundation for VR research,[44] and Swinburne University of Technology's Centre for Advanced Internet Architectures.[45][46] There are even collaborative efforts from researchers at Carnegie Mellon University and the University of Toronto that use ioquake3 as a platform for their published researches.[47][48] Students have used ioquake3 as the basis for advanced graphics work for their theses, as well, such as Stephan Reiter's work[49][50] which has even been noted at the LLVM project[51] due to his synthesis of the ioquake3 engine, ray-tracing rendering technique, and LLVM.
Though the name "ioquake3" is based on Ryan "Icculus" Gordon's site icculus.org, Ryan does not lead the project. Instead, he maintains a mentor role and provides hosting for the mailing lists and the SVN repository used by the project.[52]
Games using the engine
Games based on the source release
- OpenArena – An open source game based heavily on the Quake III Arena-style deathmatch. The gameplay attempts to emulate Quake III Arena in that the player scores frags to win the game using a balanced set of weapons, each designed for different situations.
- Space Trader – An action/strategy game from HermitWorks Entertainment.
- Smokin' Guns – is intended to be a semi-realistic simulation of the "Old West's" atmosphere. Originally a Quake 3 modification, but became a stand-alone game. It has been ported back to ioquake3 engine in 2009.[53]
- Urban Terror up to version 4.2 – A Quake III total conversion mod while designed and released to work with the retail software Quake III, it is also compatible with open source engine alternatives.
- Tremulous – Tremulous is a first-person shooter with elements of real time strategy. Each team must construct and defend a base, consisting of structures which aid the players in some way. Like Smokin' Guns, it started as a mod, but as of 1.1 has become stand-alone.
Games using a proprietary license
- Based on id Tech 3
- Quake III Arena (1999) – id Software
- Quake III: Team Arena (2000) – id Software
- Quake III Revolution (2001) – Bullfrog Productions
- Star Trek: Voyager – Elite Force (2000) – Raven Software
- Star Trek: Voyager – Elite Force – Expansion Pack (2001) – Raven Software
- Return to Castle Wolfenstein (2001) – Gray Matter Interactive (SP) / Nerve Software (MP)
- Soldier of Fortune II: Double Helix (2002) – Raven Software
- Star Wars Jedi Knight II: Jedi Outcast (2002) – Raven Software
- Star Wars Jedi Knight: Jedi Academy (2003) – Raven Software
- Wolfenstein: Enemy Territory (2003) – Splash Damage
- Call of Duty (2003) – Infinity Ward
- Call of Duty: United Offensive (2004) – Gray Matter Interactive / Treyarch
- Call of Duty Classic (2009) – Infinity Ward
- Severity (Canceled) – Cyberathlete Professional League
- Iron Grip: Warlord (2008) – Isotx
- Dark Salvation (2009) – Mangled Eye Studios
- Quake Live (2010) – id Software
- Using id Tech 3 with ÜberTools
- Heavy Metal: F.A.K.K.² (2000) – Ritual Entertainment
- American McGee's Alice (2000) – Rogue Entertainment
- 007: Agent Under Fire (2001) – EA Redwood Shores
- Medal of Honor: Allied Assault (2002) – 2015, Inc.
- Medal of Honor: Allied Assault – Spearhead (2003) – EA Los Angeles
- Medal of Honor: Allied Assault – Breakthrough (2003) – TKO Software
- Star Trek: Elite Force II (2003) – Ritual Entertainment
- 007: Everything or Nothing (2004) – EA Redwood Shores
References
- ↑ quake3-1.32b-source.zip
- ↑ Paul Jaquays, Brian Hook. "Quake III Arena Shader Manual". p. 5. Archived from the original on 2006-04-14. Retrieved 2006-10-01.
- ↑ Paul Jaquays, Brian Hook. "Quake III Arena Shader Manual". p. 1. Archived from the original on 2006-09-04. Retrieved 2006-10-01.
- ↑ Eberly, David (2002). "Fast Inverse Square Root" (PDF). Geometric Tools: 2
- ↑ Sommefeldt, Rys (November 29, 2006). "Origin of Quake3's Fast InvSqrt()". Beyond3D. Retrieved 2009-02-12.
- ↑ Tim Ferguson (2001). "Id Software's .RoQ Video File Format". Archived from the original on 2006-09-01. Retrieved 2006-10-01.
- ↑ ioquake3 md4-readme.txt
- ↑ gongo. "md4 v4 file spec, by gongo". Archived from the original on 2011-07-15. Retrieved 2012-08-11.
- ↑ "Sound in the main thread". Retrieved 2009-01-16.
- ↑ "Book of Hook: The Quake3 Networking Model". Retrieved 2006-10-01.
- ↑ "Ioquake3 Help Page". Retrieved 2007-02-17.
- ↑ "Complete Guide: Configure and Customise ioQuake3 in Linux". Linux Today. Retrieved 2010-01-03.
- ↑ "Quake 3 ported to iPod Touch with tilt controls – Betanews". Retrieved 2010-01-04.
- ↑ Valich, Theo (3 April 2007). "Two free games based on the Quake 3 engine tip up". The Inquirer. Retrieved 2010-01-12.
- ↑ "ioquake3 for OS X – Inside Mac Games". Retrieved 2010-01-03.
- ↑ "ioquake3 for Mac OS X available for download – Macsimum News". Retrieved 2010-01-03.
- ↑ "IOQuake3 OSX : Clone de Quake III (gratuit) – MaxiApple.com". Retrieved 2010-01-03.
- ↑ "IOQuake3 1.34 – Jogue Quake 3 no Mac OS X – Maclivre.net". Retrieved 2010-01-04.
- ↑ "Open Arena about page". Retrieved 2009-11-03.
- ↑ "XP Games". Retrieved 2009-11-03.
- ↑ "Tremulous about page". Retrieved 2009-11-04.
- ↑ "Quake, Meet GPL; GPL, Meet Quake – Linux Journal". Retrieved 2010-01-04.
- ↑ "Entretien avec l'équipe de Smokin'Guns – JeuxLinux". Retrieved 2009-11-04.
- ↑ "Urban Terror manual". Retrieved 2015-05-18.
- ↑ "Two free games based on the Quake 3 engine tip up – The Inquirer". Retrieved 2010-01-04.
- ↑ "A Look At Free Quake3 Engine Based Games – Slashdot". Retrieved 2010-01-03.
- ↑ "Comparison of free software shooters – linuX-gamers.net". Retrieved 2010-01-04.
- ↑
- ↑ ioJedi Academy
- ↑ Iodoom3
- ↑ OpenMOHAA
- ↑ "Fedora 12 Update: quake3-1.36-5.fc12 – fedora-package-announce". Retrieved 2010-01-04.
- ↑ "ioquake3-1.36-1mdv2010.0 RPM for i586 - RPM Find". Archived from the original on 2014-02-21. Retrieved 2010-01-04.
- ↑ "Package: openarena-data (0.8.1-2) – Debian". Retrieved 2010-01-04.
- ↑ "ioquake3 1.36 build 3 – FreshPorts". Retrieved 2010-02-05.
- ↑ "igames/ioquake3 – The NetBSD Packages Collection". Retrieved 2010-01-04.
- ↑ ftp://ftp.idsoftware.com/idstuff/source/%5B%5D
- ↑ Iortcw compiled package
- ↑ Iortcw source code
- ↑ ET Legacy source code
- ↑ Larabel, Michael (2010-06-13). "id Software Open-Sources ET, RTCW". Phoronix. Retrieved 2010-08-13.
- ↑ "Q3osc research paper" (PDF). Retrieved 2010-01-09.
- ↑ "Q3osc wiki". Retrieved 2010-01-09.
- ↑ "A Survey of Collaborative Virtual Environment Technologies" (PDF). Retrieved 2010-01-09.
- ↑ "L3DGEWorld 2.1 Input & Output Specifications" (PDF). Retrieved 2010-01-09.
- ↑ "L3DGEWorld 2.3". Retrieved 2010-01-09.
- ↑ "VMM-Independent Graphics Acceleration" (PDF). Retrieved 2010-01-09.
- ↑ "VMM article in ACM". pp. 33–43. ISBN 978-1-59593-630-1. Retrieved 2010-01-09.
- ↑ "Real-time Ray Tracing of Dynamic Scenes". Retrieved 2012-04-22.
- ↑ "Run-Time Code Generation for Materials". Retrieved 2012-04-22.
- ↑ "LLVM Users, Open Source Projects". Retrieved 2010-01-09.
- ↑ "ioquake3 Miscellany – LinuxGames". Retrieved 2010-01-04.
- ↑ Bougard, Guillaume (alias Tequila) (22 January 2009). "Smokin'Guns ioQuake3 backport". Smokin'Guns Productions. Retrieved 2010-01-26.
External links
- "Official id Tech 3 licensing page". Archived from the original on 2009-11-08. Retrieved 2012-07-06.
- Original Quake III source code repository (id Tech 3) on idsoftware.com
- id's current Quake III source code repository (id Tech 3) on github.com
- ioquake3 project page, community continuation