Id Tech 2

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Id Tech 2
Développeur id Software
Écrit en C, Assembleur
Type Moteur de jeu
Licence Licence publique générale GNU

Le id Tech 2 est un moteur de jeu vidéo développé par id Software. Il succède à l'id Tech 1 utilisé pour le jeu Doom. Initié pour le jeu Quake (1996) et amélioré pour le jeu Quake II (1997). Il a selon son évolution successivement été désigné Quake engine, puis Quake II engine, et en 2007 id Software renomme sa gamme de moteurs, et cette version prend le nom définitif de id Tech 2. L'article traite des deux versions (pour Quake et Quake II), versions qui ont énormément de code en commun.

Historique[modifier | modifier le code]

Arbre généalogique des différents moteurs id Tech et des jeux phare.

Les bases du id Tech 2 ont été créées en 1996 avec le Quake engine pour le jeu Quake. John Carmack y réalisa la grosse partie du travail de programmation, avec l'aide de Michael Abrash, un spécialiste des optimisations algorithmiques et assembleur.

La même année, le code de la partie réseau, alors uniquement adaptée aux faibles latences des réseaux locaux, est entièrement revue pour fonctionner sur un réseau moins fiable et plus lent qu'est Internet. C'est la branche nommée QuakeWorld (décembre 1996), réalisée par John Carmack avec l'aide de John Cash et de Christian Antkow.

Le moteur initial de Quake réalise tout le rendu de manière logiciel. John Carmack expérimente plusieurs exécutables dédiés supportant différentes accélérations matérielles[réf. nécessaire] (par exemple VQuake, pour supporte la puce Vérité 1000 de Rendition de la carte 3D Blaster), puis en fin janvier 1997 réalise un support OpenGL générique (GLQuake), alors supporté par quelques cartes[réf. nécessaire] (dont la Voodoo de 3dfx).

Fin 1997, Quake II est publié. Le Quake II engine résulte principalement de la convergence du code des différentes branches[réf. nécessaire]. Des retouches structurelles sont apportées, dont la scission des différents aspects du moteur en plusieurs bibliothèques dynamiques séparant par exemple la logique propre au jeu du reste du moteur[réf. nécessaire].

Les différentes versions sont libérées successivement sous GPL en 1999 (Quake engine)[1], puis en 2001 (Quake 2 engine)[2],[3].

En 2007, id Software renomme sa gamme de moteurs, et formellement le Quake II engine prend le nom de id Tech 2, et les autres versions intermédiaires depuis le Doom engine (id Tech 1) sont retirées de la gamme.

Technique[modifier | modifier le code]

Software / hardware[modifier | modifier le code]

L'id tech 2 propose deux modes de rendu de la 3d, soit via la carte vidéo, soit calculée par le processeur. Quake1 ne gérait, dans sa première version, que le rendu processeur.

Arbre BSP[modifier | modifier le code]

Les décors sont découpés selon un arbre BSP (Binary space partitioning) : une hiérarchie de plan subdivise l'espace en deux moitiés complètement séparées. Des plans sont également introduits le long des murs extérieurs de la carte. Les sous-zones ainsi définies par les plans sont appelées les Leaf : ce sont elles qui contiennent les objets de la carte. Les feuilles vides contiennent la surface visible (polygones) et les feuilles pleines contiennent les volumes rigides (brushes).

Il est facile de savoir récursivement de quel côté d'un plan un point (ici la caméra) est, et de trouver dans quel leaf elle se situe. On en récupère la liste des leafs visibles (voir pvs). En suivant les plans de l'arbre BSP découpant le monde, on peut avoir un tri parfait des leafs du plus proche au plus éloigné de la caméra. Ce z-ordering est nécessaire pour optimimser le rendu software.

PVS ou Potentially Visible Set[modifier | modifier le code]

Alors que l'id tech 1 calculait entièrement l'occlusion en temps réel, à partir de l'id tech 2, l'occlusion des feuilles est précalculée à l'aide de portails lors de la compilation de map.

Chaque feuille contient une liste de feuilles visibles. Cela permet de limiter considérablement le rendu de géométrie cachée.

Voilà comment fonctionne la pipeline de rendu de l'id tech 2:

- le frustum de la caméra parcourt le bsp avec un z-ordering afin d'éliminer les feuilles en dehors du champ de vision. Les feuilles occluses qui ne sont pas contenues dans la liste de feuilles visibles sont également éliminées.

- on indique au moteur de rendre tous les polygones contenus dans ces feuilles visibles.

- en rendu "software" les polygones sont clippés entre eux avant d'être rendus (voir GEL).

- les polygones sont envoyés à la carte vidéo (en mode hardware) ou tracés par le processeur (en mode software).

- les personnages sont rendus plus simplement, directement en z-buffer (en software comme en hardware)

Brush CollisionMap[modifier | modifier le code]

Un assemblage de solides convexes ( "brushes" ) est stocké dans le bsp ainsi que dans les models dynamiques, et permet de calculer les collisions entre les personnages et l'architecture.

Rendu par GEL[modifier | modifier le code]

Cette technique finalise le calcul de l'occlusion au pixel près pour le mode rendu software.

Pour ne pas afficher les parties de murs cachées par un mur plus proche, une Globel Edge List est utilisée : elle stocke la liste des bords de tous les triangles déjà affichés, et chaque nouveau triangle est "clippé" (découpé) par ces segments : seuls les parties visibles de ces triangles sont ensuite affichées. Ce clipping est optimisé à l'aide d'un arbre bsp en 2d.

Cette méthode de clipping sera déclinée en rendu d'ombres pour l'id tech 4.

Textures, Surface Cache[modifier | modifier le code]

Les murs sont affichés avec une texture de base et une lightmap. Pour ne pas tout afficher deux fois, une Surface est générée en mélangeant la texture et la lightmap utilisées par un mur.

Les Surfaces sont stockées dans un cache, afin de réutiliser celles précédemment calculées, et de les libérer si elles ne sont plus utilisées.

Des Surfaces plus petites sont générées pour les murs plus lointains en utilisant les mipmaps des textures (les lightmaps étant déjà en basse résolution), afin d'économiser de la mémoire et d'éviter un phénomène de crénelage/pixelisation des textures vues de trop loin.

ZBuffer et personnage[modifier | modifier le code]

Pendant l'affichage des décors, un Z-buffer est également rempli. Il ne sert pas pendant le rendu du décor, mais pendant le rendu des personnages et autres objets 3D dynamiques, afin de les masquer par le décor quand nécessaire.

Vus de loin, les personnages ne sont pas affichés en 3D mais par un système de voxels : gros point dont la couleur, uniforme, vient de la texture du personnage.

Éclairage dynamique[modifier | modifier le code]

Les personnages sont éclairés uniformément, par une couleur qui dépend de leur position ; cette couleur provient d'une structure stockant l'éclairage ambiant en 3D. (="lightvol")

Affichage des triangles en mode processeur[modifier | modifier le code]

Le rendu bas niveau des triangles est écrit en assembleur. Il utilise la FPU pour tous les calculs de correction de perspective et d'interpolation des coordonnées de texture, à cause de la quantité limitée de registres entiers.

Jeux notables[modifier | modifier le code]

Origines et jeux issus de Quake

Liste de jeux notables utilisant le moteur, ou une version retouchée, du jeu Quake[4] ou Quake II[5]. Ne sont pas listé ici les mods, les versions du moteur ont suscité l'apparition de centaines de mods.

  • Quake (1996, Quake engine)
  • QuakeWorld (1996)
  • Malice (Quake engine)
  • Shrak (Quake engine)
  • Quake Mission Pack 1: Scourge Of Armageddon (Quake engine)
  • Quake Mission Pack 2: Disolution Of Eternity (Quake engine)
  • X-Men: The Ravages of Apocalypse (Quake engine)
  • Abyss of Pandemonium (Quake engine)
  • Q!Zone for Quake (Quake engine)
  • AfterShock for Quake (Quake engine)
  • Dark Hour (Quake engine)
  • Eternal War (Quake engine)
  • Half-Life (1998, GoldSrc)
  • Sin (1998, Quake II engine)
  • Hexen II (1997, Quake II engine)
  • Quake II (1997, Quake II engine)
  • Daïkatana (2000, Quake II engine)
  • Anachronox (2001, Quake II engine)
  • Soldier of Fortune (2000, Quake II engine)
  • Nexuiz (2005-, DarkPlaces)
  • UFO: Alien Invasion (2006-, Quake II engine)
  • Sin: Wages of Sin (Quake II engine)
  • Kingpin (Quake II engine)

Moteurs libres dérivés[modifier | modifier le code]

Arboresence des moteurs dérivés de l'idTech 2 et de quelques jeux l'utilisant.
En gris, ceux sous licence propriétaire et en vert, ceux sous licence libre.

Le 21 décembre 1999, John Carmack de id Software libère le code source du moteur Quake sur Internet sous les termes de la licence publique générale GNU, permettant aux programmeurs de modifier le moteur et d'y ajouter de nouvelles fonctionnalités. Rapidement les premières versions modifiées du moteur ont commencé à circuler sur Internet.

Certaines de ces modifications sont disponibles sur des Live CD. Ces derniers rassemblent un système d'exploitation libre ainsi que le client QuakeWorld. Il faut cependant recopier certains fichiers originaux du CD de Quake (pak0.pak et pak1.pak) sur ces Live CD pour que ces derniers soient totalement opérationnels. En effet, le moteur QuakeEngine est passé dans le domaine public alors que les éléments graphiques (textures, graphismes...) sont restés la propriété d'ID Software.

DarkPlaces[modifier | modifier le code]

DarkPlaces (en)[6] est une modification du moteur qui améliore le code réseau (netcode), ajoute un support des cartes de Quake III, a un moteur de rendu complètement refait (éclairage et ombres calculées en temps réel, bump mapping, gestion des shaders OpenGL, etc.), un navigateur de serveur intégré et ajoute le support de l'Ogg Vorbis.

Il se base sur la version d'Id Tech 2 qui a été libéré par Id Software et est compatible Linux, Mac OS X et Windows. Il est notamment utilisé par Nexuiz, puis Xonotic.

Il est développé par Forest Hale, dit "LordHavoc", ainsi qu'une communauté de développeurs.

ezQuake[modifier | modifier le code]

ezQuake (en)[7] est une version modifiée du moteur FuhQuake. Compatible MacOs et FreeBSD, il supporte le QuakeTV et le multiview, amène des options supplémentaires pour les serveurs, de nouveaux menus et intègre un lecteur mp3, un navigateur de serveurs et de parties enregistrées.

ProQuake[modifier | modifier le code]

ProQuake (en)[8] est basé sur le code libéré par Id. Ce mod, sous licence GPL, se focalise sur l'amélioration du mode multijoueur (précision des tirs, etc.) et de la protection anti-cheat mais il permet aussi:

  • de se connecter à travers un réseau NATé et donc que plusieurs personnes puissent se connecter avec la même adresse IP (64 maximum[9]).
  • d'être protégé contre les attaques DoS.
  • d'enregistrer des démos.
  • de jouer sous Linux, Windows (98, Xp et Vista).

Il est développé par J.P. Grossman (dit "Mephistopheles"). La dernière version (3.50 du 21 septembre 2002[8]) est compatible avec Quake et NetQuake, mais pas avec QuakeWorld.

Telejano[modifier | modifier le code]

Telejano[10] est une modification dérivée du TomazQuake engine qui ajoute beaucoup de nouveaux éléments comme un moteur de particules, des effets de lumières, des étincelles à l'impact des balles, des explosions ; pour l'eau : des effets de vagues et de caustique ; des trainées de fumée derrière les boules de magma et les roquettes ; mais aussi du sang plus réaliste, du brouillard. Tout cela sans aucune modification des cartes originales.

La dernière version (annoncée comme la version finale du projet) est la 8.01 du 7 janvier 2005.

Autres moteurs connus[modifier | modifier le code]

  • Tenebrae[11] - un dérivé, le premier à ajouter un éclairage et des ombres calculées en temps réel sur le Quake engine.
  • Tomaz Quake[12] - l'une des premières modification du moteur à se retrouver sur le net.
  • Twilight Engine - le plus rapide des moteurs basé sur Quake engine, cette modification privilégie la performance sur les ajouts fonctionnels.

D'autres moteurs[modifier | modifier le code]

Il existe bien sûr bien d'autres modifications du moteur:

  • ezQuake[13]: Ajoute des effets de particules, d'eau, de brouillard, le support de la QuakeTV, un player MP3 intégré...
  • FitzQuake[14]: Principalement de la correction de bugs et de l'ajout d'effets (skyboxes, brouillard, lumières colorées)
  • FuhQuake (en): basé sur ZQuake auquel il a ajouté le support des textures 24 bits, des lumières statiques, ainsi qu'un début de système anti-cheat.
  • JoeQuake[15]: basé sur ZQuake et FuhQuake, il se focalise principalement sur la lecture de demo. Il supporte les textures 32 bits, les animations douces et les lumières colorées.
  • MacGLQuake[16]: cherche à porter GLQuake et GLHexen 2 sur MacOS.
  • Pocket Quake[17]: est un portage de Quake sur Pocket PC.
  • QuakeForge[18]: Cherche à améliorer le jeu (par une protection anti-cheat) et à le rendre à accessible à un maximum de personnes.
  • ZQuake[19]: Se focalise sur l'amélioration des performances, de la stabilité et de la compatibilité et de rendre le gameplay plus fluide. Il est compatible avec NetQuake et QuakeWorld.

Notes et références[modifier | modifier le code]

  1. (en) « id Software's Technology Licensing Program », sur http://www.idsoftware.com/ (consulté le 12 septembre 2008) : « Many people are aware that the original QUAKE source code was publicly released by id in 1999 under the GNU General Public. »
  2. (en) Slashdot, 22 décembre 2001, Quake 2 source code released under the GPL
  3. (en) « id Software's Technology Licensing Program », sur http://www.idsoftware.com/ (consulté le 12 septembre 2008) : « [..] as of December, 2001 this critically acclaimed engine is also available under the GNU General Public License. »
  4. (en) « 3D Engine: Quake », sur http://www.mobygames.com/home (consulté le 5 septembre 2008)
  5. (en) « 3D Engine: id Tech 2 », sur http://www.mobygames.com/home (consulté le 5 septembre 2008)
  6. (en) « LordHavoc's DarkPlaces Quake » (consulté le 6 septembre 2008)
  7. (en) « ezQuake »,‎ 26 mais 2007 (consulté le 22 octobre 2009)
  8. a et b (en) « ProQuake » (consulté le 6 septembre 2008)
  9. (en) J.P. Grossman, « Readme de la version 3.50 »,‎ 21 septembre 2002 (consulté le 6 septembre 2008)
  10. (en) Telejano, « Telejano » (consulté le 5 septembre 2008)
  11. (en) C. Hollemeersch, « Tenebrae » (consulté le 5 septembre 2008)
  12. (en) Tomaz, « Tomaz' Corner » (consulté le 5 septembre 2008)
  13. (en) « ezQuake »,‎ 26 mai 2007 (consulté le 5 septembre 2008)
  14. (en) John Fitzgibbons, « FitzQuake » (consulté le 5 septembre 2008)
  15. (en) Jozsef, « JoeQuake » (consulté le 5 septembre 2008)
  16. (en) « MacGLQuake » (consulté le 5 septembre 2008)
  17. (en) « Pocket Quake » (consulté le 5 septembre 2008)
  18. (en) « QuakeForge » (consulté le 5 septembre 2008)
  19. (en) « ZQuake » (consulté le 5 septembre 2008)

Liens externes[modifier | modifier le code]