id Tech
une reproduction libre de Doom
utilisant le moteur de jeu en environnement 3D id Tech 1.
Chronologie des versions
Id Tech désigne une série de moteurs de jeu développés par la firme id Software.
Id Tech 1
[modifier | modifier le code]L'id Tech 1 (ou Doom engine) est un moteur de jeu qui permit de faire fonctionner les jeux Doom et Doom II de id Software. Il a aussi été utilisé sous licence par les jeux Hexen, Heretic, Strife et HacX, et d'autres jeux. Il a été créé par John Carmack, et certaines fonctions auxiliaires ont été écrites par Mike Abrash, John Romero, Dave Taylor et Paul Radek. Initialement développé sur les systèmes NeXT, il a été porté sous DOS pour la première version de Doom et a été porté ensuite sur un grand nombre de consoles et de systèmes d'exploitation.
Le code source de la version Linux de Doom a été libéré en 1997 sous une licence permettant la libre utilisation non commerciale, puis a été de nouveau libéré en 1999 sous la licence publique générale GNU (GNU GPL). Les nombreux ports non officiels des sources qui ont été créés depuis, ont permis de faire fonctionner le jeu sur des systèmes d'exploitation jusqu'alors incompatibles avec le jeu, et dans certains cas ont permis d'étendre les capacités du moteur en ajoutant de nouvelles fonctions.
Ce n'est pas un vrai moteur 3D, car il n'est pas possible d'incliner le champ de vision en haut ou en bas, et deux pièces ne peuvent pas se trouver l'une en dessous de l'autre, mais c'est une architecture logicielle assez élégante qui permet de faire du pseudo rendu 3D. Lors de son développement, Doom était révolutionnaire pour sa capacité à faire rapidement des projections de textures dans un environnement 3D.
Structure des niveaux
[modifier | modifier le code]En y regardant de plus près, tous les niveaux de Doom sont en 2 dimensions, démontrant l'une des principales limitations du Doom engine : il n'est pas possible de créer des salles les unes au-dessus des autres. Cette limitation permet toutefois de faciliter l'affichage de niveau sous forme de carte, représentant les murs par des lignes et le personnage de dessus.
Éléments de base
[modifier | modifier le code]L'élément de base est le sommet (vertex), qui représente un point en deux dimensions. Les sommets sont reliés pour former des lignes (linedefs). Chaque ligne peut avoir un ou deux côtés (connu sous le nom de sidedefs). Les sidedefs sont enfin groupés pour former des polygones (appelé sector ; secteur). Un secteur est une zone particulière d'un niveau.
Secteurs
[modifier | modifier le code]Chaque secteur contient un ensemble de propriétés, comme une hauteur de plancher et de plafond ainsi qu'une texture pour le plancher et pour le plafond. Chaque secteur définit également un certain niveau de luminosité. Ainsi, pour créer une zone d'ombre ou de lumière, il faut créer un nouveau secteur. Il ne peut donc pas vraiment y avoir d'ombres portées, ni même de lumière dynamique. Il s'agit d'une autre limitation du Doom engine.
Sidedefs
[modifier | modifier le code]Les sidedefs ont moins de propriétés que les secteurs ; Néanmoins, ils peuvent être orientés, et possèdent une ou deux textures (une par face).
Things
[modifier | modifier le code]Les « Things », littéralement « Choses » en Anglais, représentent tous les objets dynamiques du jeu. Entre autres, les things peuvent représenter des ennemis, des objets à ramasser, ou même des objets de « décoration », telles les torches. Les Things peuvent être orientées dans huit directions au départ, et, outre leur nature, elles n'ont pas de propriété modifiable.
Subdivision binaire de l'espace
[modifier | modifier le code]Doom utilise une technique connue sous le nom de partition binaire de l'espace (binary space partitioning ou BSP). Un outil est utilisé pour convertir un niveau en arbre BSP, les niveaux bruts ne sont pas intégrés dans le jeu. Selon la taille du niveau, le processus peut prendre un temps important. C'est pour cette raison qu'il n’est pas possible de déplacer des murs dans Doom ; alors que des portes ou des ascenseurs se déplacent de haut en bas jamais aucun ne se déplace sur le côté.
Un niveau est divisé en arbre binaire : chaque position de l'arbre est un nœud qui représente une zone particulière du niveau (la racine représente par exemple l'ensemble du niveau). À chaque branche de l'arbre représente une ligne de division séparent l'espace en deux. En même temps, cette ligne de division peut couper les murs (linedefs) en sous-segments (segs).
Les feuilles de l'arbre représentent des polygones convexes, et il n'est pas utile de diviser plus encore la zone. Ces polygones convexes sont référés sous le nom de sous-secteur (ou SSECTORS), et sont liés à un secteur particulier. Chaque sous-secteur possède une liste de segs qui lui est associé.
Le système BSP est une manière ingénieuse de structurer les sous-secteurs pour qu'ils soient bien ordonnés pour le rendu graphique. L'algorithme devient assez simple :
- Commencer au nœud racine.
- Traiter les nœuds fils de ce nœud de manière récursive. Les nœuds les plus proches de l'observateur étant traités en premier. Cette information peut être trouvée en regardant de quel côté de la ligne de division l'observateur se trouve.
- Lorsqu'un sous-secteur est atteint, le dessiner.
Le processus est terminé lorsque la colonne entière des pixels est remplie (c'est-à-dire lorsqu'il n'y plus de trou). Cet ordre de traitement assure qu'aucun temps n'est gaspillé pour dessiner des objets qui ne sont pas visibles et en conséquence les niveaux peuvent devenir très grands sans qu'il n'y ait vraiment de pénalité de vitesse.
Rendu
[modifier | modifier le code]À l'époque les ordinateurs n'étaient pas assez performants pour rendre de la vraie 3d. Doom utilisait un moteur de fausse 3d: la camera ne peut jamais tourner vers le haut ou vers le bas, et le terrain est codé et analysé en 2d, ce qui réduit considérablement les calculs.
Dessin des murs
[modifier | modifier le code]Les murs sont rendus avec la technique du raycasting, utilisée aussi pour Wolfenstein 3D. Elle consiste à tracer des tranches verticales de texture à hauteur variable pour donner l'illusion des murs.
Plancher et plafond
[modifier | modifier le code]Les planchers et plafonds sont rendus avec une méthode similaire: le Z-Mapping, également utilisé dans des jeux comme Mario Kart, et qui fonctionne avec des tranches de texture horizontales.
Objet (sprites)
[modifier | modifier le code]Chaque secteur du niveau possède une liste chaînée représentant les objets (things) s'y trouvant. Pendant la phase de rendu des secteurs, les objets sont placés dans la file d'attente pour être affichés. Ceux qui ne sont pas dans le champ de vision sont ignorés.
Les bords des sprites sont coupés en vérifiant la liste des segments déjà dessinés. Les sprites dans Doom sont stockés avec le même format que celui utilisé pour les murs, de telle sorte qu'il est très facile pour le moteur de rendu de les afficher : les mêmes fonctions qui sont utilisés pour afficher des murs sont employées pour dessiner des sprites.
Alors que les sous secteurs garantissent d’être déjà triés, les sprites ne le sont pas. Doom stocke une liste de sprites à afficher (vissprites) et trie cette liste juste avant le rendu. Ainsi les sprites les plus en retrait sont affichés avant ceux qui se trouvent plus proche du champ de vision. Ceci génère des recouvrements — que l'on peut considérer comme un traitement non optimal — mais qui sont habituellement négligeables sur le temps de traitement.
Enfin, les textures utilisées sur les deux côtés d'un mur et recourant à la transparence sont affichées en même temps que les sprites à la fin du processus de rendu plutôt qu'avec les autres murs.
Éditeur de niveaux
[modifier | modifier le code]Dès la création de Doom, et encouragés par les auteurs du jeu, des amateurs travaillèrent à construire de nouvelles cartes pour le jeu, et développer des outils dédiés : DEU (Doom Editing Utility), DETH (DOOM Editor for Total Headcases), le logiciel commercial DCK (Doom Construction Kit), etc. Les logiciels actuellement fonctionnels et régulièrement mis à jour sur des systèmes modernes comprennent Doom Builder[1] et Eureka[2] (héritier multiplateforme de l'outil Yadex sur Linux). Il existe même des générateurs aléatoires de cartes, tel que OBLIGE[3] (héritier de SLIGE).
Doom et Duke Nukem 3D utilisent le même type de cartes, mais le moteur de Duke Nukem a moins de limitations (possibilité de superposer des étages par exemple). Les niveaux de Doom peuvent donc être édités avec l'éditeur de niveau de Duke Nukem 3D.
Id Tech 3
[modifier | modifier le code]L'id Tech 3, plus connu sous le nom de Quake III engine, est une évolution directe des versions précédentes incluses dans Quake et Quake II.
À la QuakeCon 2005, John Carmack a annoncé que le code source du moteur Quake III serait libéré sous GPL. Le , id Software a libéré les sources du moteur sous GPL, par contre les ressources du jeu vidéo Quake III Arena restent la propriété de id Software. Le code peut ainsi être téléchargé par qui le veut.
Infinity Ward, les créateurs de la série Call of Duty utilisent depuis Call of Duty 2 un moteur maison à base du code source d'id Tech 3 (la société avait déjà utilisé le moteur id Tech 3 en lui-même pour le premier titre). Depuis, le moteur a évolué pour les jeux successeurs de la série mais toujours sur le code source d'id Tech.
Évolutions par rapport à l'id Tech 2
[modifier | modifier le code]Contrairement à l'id tech 2 qui avait concentré sa pipeline sur les problèmes relatifs au rendu logiciel, L'id Tech 3 a été spécialement optimisé pour openGL, ce qui a permis une importante simplification du moteur graphique.
La simplicité de l'id tech 3 en a fait le moteur de jeu le plus populaire et le plus utilisé, il est notamment à la base des séries Jedi Knight et Call of Duty.
Son format de map (q3.bsp) très rapide à lire car directement encodé en vertex buffers est devenu une référence dans la 3d rich internet application, il existe des bibliothèques pour le lire avec Webgl et Flash Player, et il est à la base du plugin quakelive.
Bones
[modifier | modifier le code]L'animation des personnages est fluide, calculée en temps réel avec les bones (squelettes articulés).
Shaders
[modifier | modifier le code]L'id Tech 3 introduit les fichiers shaders qui permettent un contrôle précis du rendu des textures. Ils permettent divers effets tels que la transparence, la réflexion, l'additive blending, le texture splatting, etc.
Collisionmap en brushes
[modifier | modifier le code]L'id Tech 2 utilisait deux arbres bsp, un simplifié utilisé pour la détection de collisions, et un plus complexe qui stockait les faces afin d'assurer leur z-ordering. Le z-ordering étant inutile en full hardware, l'id tech 3 n'utilise plus qu'un seul arbre, qui gère à la fois les collisions et le culling (suppression sélective).
La collisionmap d'id tech 3 n'est plus gérée par un second bsp mais par une liste de volumes convexes (brushes). Cette collisionmap indépendante de l'arbre bsp permet de tester les collisions sur les brushes de détail.
Stockage balancé et encapsulé de la géométrie
[modifier | modifier le code]La géométrie n'est plus compressée sous forme de n-gons (polygones) convexes, elle est directement encodée en vertex buffers (tampons de points). Les triangles sont encapsulés dans des formes plus complexes (n-gons (polygones) concaves, curves, trimeshes) qui sont stockées dans le bsp.
Cela permet d'alléger les calculs processeur, qui ne se préoccupent plus du détail des triangles.
La nouvelle pipeline de rendu fonctionne désormais comme suit:
- frustum culling de l'arbre bsp, avec élimination des feuilles occluses grâce à l'occlusion précalculée avec un rapport cluster-to-cluster ;
- repérage de toutes les formes contenues dans ces feuilles visibles ;
- la carte vidéo rend tous les triangles contenus dans ces formes.
QuadPatch Curves
[modifier | modifier le code]Le rendu hardware permettant d'augmenter considérablement la quantité de polygones, l'id tech 3 introduit des formes courbes codées en quads qui permettent de se dégager de l'esthétique low-poly (basse polygonisation) très anguleuse de l'id tech 2.
Permet de modéliser des terrains extérieurs, des grottes, des coupoles, des colonnes, etc. Le joueur peut modifier la résolution polygonale des courbes dans le menu d'options en fonction des capacités mémoire de sa machine.
Ces courbes remplacent partiellement, voir totalement, la géométrie bsp générée par les brushes. Une map peut être entièrement modélisée en courbes, stockées dans un bsp généré à partir de brushes invisibles.
Détails
[modifier | modifier le code]L'ajout de détails (petits brushes sans incidence sur la complexité de l'arbre afin d'éviter les parcours trop coûteux en calcul ainsi que les risques de holes) posait un problème d'optimisation dans l'id tech 2, il fallait passer par des models indépendants dont l'intégration à la pipeline de rendu coûtait plus de calculs processeur que pour le model statique.
L'id tech 3 permet de modéliser des détails sans passer par les models. Les détails brushes sont intégrés au model statique, ce qui accélère leur rendu.
Ombres dynamiques
[modifier | modifier le code]L'id tech 3 propose un rendu d'ombres dynamiques simplifiées sous forme d'une petite tache sombre projetée sur quelques polygones. Projetées uniquement, à l'origine, sur les n-gons (polygones) concaves, certains dérivés de l'id tech 3 ont rajouté la projection d'ombre sur les courbes.
Jeux utilisant le moteur de Quake 3
[modifier | modifier le code]- Return to Castle Wolfenstein
- American McGee's Alice
- Call of Duty
- Star Trek Voyager : Elite Force
- Heavy Metal : F.A.K.K. 2
- Jedi Knight II: Jedi Outcast
- Soldier of Fortune II: Double Helix
- Medal of Honor : Débarquement allié
- Star Trek Elite Force 2
- Jedi Knight: Jedi Academy
- Wolfenstein: Enemy Territory
- Tremulous
- OpenArena
- Urban Terror
- Quake Live
- 007 : Quitte ou double
Id Tech 4
[modifier | modifier le code]L'id Tech 4, plus connu sous le nom de Doom 3 engine, est utilisé pour la première fois dans le jeu Doom 3.
Conçu principalement par John Carmack, celui-ci a aussi créé d'autres moteurs par le passé comme le Doom engine et le Quake engine, qui ont été généralement reconnus comme de grandes avancées technologiques dans le domaine.
Historique
[modifier | modifier le code]L'id Tech 4 a d'abord été conçu comme une amélioration du Quake engine. À l'origine, il était prévu de complètement réécrire le moteur de rendu du Quake Engine, tout en gardant certains sous-systèmes comme l'accès aux fichiers et la gestion de la mémoire. Après que le nouveau moteur de rendu fut fonctionnel, il fut décidé de passer du langage C au C++, ce qui nécessita une réécriture et une restructuration complète du reste du moteur. Le moteur actuel ne contient donc que très peu de code issu du moteur Quake engine, ce qui en fait le premier vrai nouveau moteur d’id Software depuis 1996.
Ajouts par rapport à l'id tech 3
[modifier | modifier le code]L'id Tech 4 est sorti avec de nombreuses nouvelles technologies par rapport au Quake 3 engine (id tech 3) qui l'a précédé. Cela inclut le bump mapping, le normal mapping et la lumière spéculaire. D'autres fonctionnalités ont été ajoutées par la suite au moteur, comme la technologie MegaTexture (notamment utilisée dans le jeu Enemy Territory: Quake Wars).
IA et scripting
[modifier | modifier le code]Les personnages non joueurs ont une intelligence artificielle (IA) rudimentaire (de type pathfinder) et le jeu est enrichi d'un langage de script appelé DoomScript.
Pixel shaders
[modifier | modifier le code]L'id tech 4 permet divers effets propres à la génération d'effets vidéo en pixel shader : déformation, flou, bump mapping, etc.
Réécriture complète en objet
[modifier | modifier le code]Le moteur a été entièrement réécrit en C++.
Réécriture des formats de fichier
[modifier | modifier le code]Les fichiers du jeu sont désormais entièrement encodés avec le format ASCII qui était déjà utilisé pour coder les entités dans l'Id Tech 3. Ce format est plus lent à charger mais plus souple, plus adapté à l'objet et plus facile à déboguer.
Les cartes du jeu (maps) ne sont plus codées sur un simple fichier .bsp, mais encodées sous la forme de 4 fichiers différents afin de mieux isoler les différentes partie du programme :
- le fichier « .map », lu par l'éditeur de niveaux du jeu et par le jeu lui-même, qui contient les entités et autres informations. Il sert à générer 3 autres fichiers :
- le fichier « .cm », qui définit une collisionmap pour le moteur physique ;
- le fichier « .proc », qui contient toute la géométrie pré calculée par le compilateur : triangles, portails, volumes de lumière des lampes statiques ;
- le fichier « .aas », qui contient des structures pour guider l'IA.
L'occlusion n'est plus approximativement pré-calculée dans des tables, elle est calculée en temps réel à l'aide de portails stockés dans le bsp.
Éclairage et ombres dynamiques en temps réel
[modifier | modifier le code]La principale innovation de l'id Tech 4 est l'utilisation totale de l'éclairage dynamique. Les volumes d'ombres sont rendus en polygones avec un algorithme appelé Carmack's Reverse. Les volumes d'ombre des lampes statiques sont pré-calculés à la compilation de la map, les volumes d'ombre de lampes mobiles sont calculés en temps réel.
Alors qu’auparavant les moteurs 3D combinaient grossièrement les lumières pré-calculées ou les lightmaps avec des lumières dynamiques dont l'effet changeait la luminosité d'un objet entier, l'approche utilisée par l'id Tech 4 a permis un éclairage et un ombrage plus réaliste qu'auparavant.
Synchronisation des lèvres
[modifier | modifier le code]Quake 4 offre une technologie de synchronisation des lèvres en temps réel. Un système qui est similaire à celui du Source Engine, avec onze émotions faciales génériques et le support des langues anglaise, française, italienne et espagnole (le Source Engine est indépendant de la langue).
Technologie de rendu MegaTexture
[modifier | modifier le code]MegaTexture est une technologie apparue avec Enemy Territory: Quake Wars. Elle est conçue pour éliminer les textures répétitives dans un environnement.
La version originale de l'id Tech 4 a été critiquée pour son inaptitude à gérer les paysages et les décors extérieurs. La technologie MegaTexture corrige ce problème en permettant l'utilisation d'une seule texture massive recouvrant tout le niveau.
Il est actuellement nettement plus simple de charger une seule texture de 32000x32000 pixels que seize textures de 4000x4000 pixels. Le résultat est considérablement plus détaillé qu'avec des textures répétitives. De plus, la sous-couche MegaTexture permet aussi d'appliquer une grande variété de paramètres à certaines zones, comme la tenue de route des véhicules, les bruits de pas ou les particules à utiliser pour les explosions. Ce qui limite l'utilisation de polygones supplémentaires.
Futures améliorations prévues
[modifier | modifier le code]Les ombres gérées par l'id Tech 4 original ont un gros défaut : leurs contours sont tous parfaitement nets. Les jeux suivants basés sur ce moteur permettront l'utilisation de véritables ombres douces par une véritable gestion de la pénombre, calculée par rapport à la distance entre la lumière et le cache[réf. nécessaire].
Liste de jeux utilisant l'id Tech 4
[modifier | modifier le code]- Doom 3
- Doom 3: Resurrection of Evil
- Doom 3: The Lost Mission
- Quake 4
- Prey
- Enemy Territory: Quake Wars
- Wolfenstein
- Brink
- Quadrilateral Cowboy
Id Tech 5
[modifier | modifier le code]![](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/fr/thumb/4/4e/Id_Tech_5_Logo.svg/110px-Id_Tech_5_Logo.svg.png)
id Tech 5 est dévoilé pour la première fois lors de la WWDC 2007 par John Carmack.
Pour cette version, id a changé le schéma habituel de nommage. Le précédent moteur était nommé « Doom 3 engine », du nom du jeu pour lequel il a été créé; celui-ci est désormais appelé id Tech 4. Le nom laisse maintenant transparaître plus facilement la parenté entre les différents moteurs.
Le moteur de jeu a notamment été utilisé pour les jeux Rage, Wolfenstein: The New Order, le standalone Wolfenstein: The Old Blood ainsi que The Evil Within.
Démonstrations
[modifier | modifier le code]Le moteur Id Tech 5 a été dévoilé pour la première fois lors de la WWDC 2007 par John Carmack, démonstration utilisant un ordinateur Apple Macintosh à 8 cœurs. Cependant, la démo n'utilisa qu'un seul cœur et un seul processus OpenGL fonctionnant sur une carte vidéo de Nvidia, la Quadro 7000 dotée de 512 Mio[4].
La première démonstration publique réelle prit place à la QuakeCon 2007. Une partie de la démonstration présente l'aspect multiplate-forme, où quatre machines (Windows, Mac OS, PlayStation 3, Xbox 360) ont fait fonctionner une séquence de présentation de Rage. Une longue partie présentait les outils d'éditions.
Ajouts par rapport à l'id tech 4
[modifier | modifier le code]L'innovation principale d'id Tech 5 par rapport à l'id Tech 4 est de pouvoir afficher des cartes très grandes ou très détaillées. Le moteur peut désormais gérer de très grands extérieurs ou des intérieurs high-poly.
Optimisation sur PlayStation 3
[modifier | modifier le code]Jon Olick, ancien programmeur principal de Naughty Dog et ayant travaillé pour Sony sur l'ensemble de la bibliothèques EDGE, qui permet une meilleure utilisation du processeur Cell, a eu pour rôle chez id Software d'optimiser l'Id tech 5 pour obtenir les meilleures performances possibles sur la PlayStation 3, du fait de sa connaissance très avancée du Cell[5].
Streaming mémoire vidéo
[modifier | modifier le code]Les maps contiennent plus de données (textures, etc.) que la mémoire des machines ne peut en contenir. Celles-ci sont mises à jour avec du streaming.
MegaTexture avancé
[modifier | modifier le code]La démonstration faite à la WWDC 2007 utilisait 20 Go de textures (la technologie MegaTexture avancée, celle mise au point depuis Enemy Territory: Quake Wars avec l'id Tech 4, et des textures pouvant aller jusqu'à une résolution de 128 000 par 128 000 pixels) et un monde entièrement dynamique et modifiable.
Ombres mappées temps réel
[modifier | modifier le code]Le moteur graphique permet de gérer l'affichage de pénombre par le biais du Shadow mapping (en). Elle est différente de celle utilisée par le moteur id Tech 4, qui générait des ombres polygonales affichées en Stencil buffer.
Compatibilité directX et multi-plateformes
[modifier | modifier le code]Le moteur est multiplate-forme (Windows, Mac OS, Playstation 4, Xbox One, PlayStation 3, Xbox 360), et id annonce qu'il permet de rendre le même contenu sur différentes plates-formes, l'adaptant automatiquement aux capacités de la machine cible. Ceci réduirait la complexité d'un déploiement de jeu sur plusieurs systèmes[6]. Il viendrait également avec une suite complète d'outils d'édition nommée Id Studio.
Autres fonctions
[modifier | modifier le code]Le moteur génèrerait également d'autres effets graphiques, comme le High dynamic range rendering (prise en compte de l'intensité de la lumière) et le Motion blur.[réf. souhaitée]
Il serait également multitâche et génèrerait en parallèle le rendu vidéo et sonore, la logique propre au jeu, l'intelligence artificielle et la physique.[réf. souhaitée]
Licences
[modifier | modifier le code]Contrairement aux versions précédentes de l'id Tech, à la suite du rachat d'id software par Bethesda, la licence du moteur ne sera plus vendue aux autres sociétés.
Notes et références
[modifier | modifier le code]- Cet article est partiellement ou en totalité issu de l'article intitulé « Id Tech 3 » (voir la liste des auteurs).
- Cet article est partiellement ou en totalité issu de l'article intitulé « Id Tech 4 » (voir la liste des auteurs).
- Cet article est partiellement ou en totalité issu de l'article intitulé « Id Tech 5 » (voir la liste des auteurs).
- Site officiel de Doom Builder
- Site officiel d'Eureka
- Site officiel d'OGLIGE
- (en) « Cain's Carmack Quickie », gaminggroove.com « Copie archivée » (version du sur Internet Archive)
- « id Software prépare l'avenir (ID Tech 6) », Fedy Abi-Chahla, Tom's Hardware.fr, 24 juillet 2008.
- (en) James Yu, « E3 Q&A: id's Nix on Tech 5 Engine licensing », sur GameSpot.com,