# Source (moteur de jeu)

Source est un moteur de jeu 3D de la société Valve Software et utilisé depuis 2004 pour les besoins de ses jeux. C'est un moteur complet qui prend en charge graphisme, son, réseau et physiques. Cette technologie est également proposée à d'autres sociétés, ou aux développeurs amateurs par la mise à disposition d'un kit de développement.

## Historique et évolutions

Le moteur Source est issu du moteur de jeu GoldSource (Half-Life), lui-même étant une refonte du moteur id Tech 2 (Quake et Quake 2) développé par John Carmack. Ce dernier annonçait en 2004 sur son blog que le code d'Half-Life 2 contenait toujours des éléments provenant de Quake. Erik Johnson, employé chez Valve, a détaillé la nomenclature du moteur au sein de la Valve Developer Community :
   Alors que nous étions proche de sortir Half-Life (plus ou moins une semaine), nous avions déjà d'autres projets sur lesquels nous avions besoin de commencer à travailler, mais nous ne pouvions risquer d'archiver ce nouveau code sur la version finale du jeu. À partir de ce moment, nous avons créé un fork dans VSS pour obtenir les branches /$Goldsrc et /$Src. Durant les années suivantes, nous avons utilisé en interne les termes "Goldsource" et "Source" pour qualifier ces deux branches. Au départ, la branche Goldsrc du code se référait à la base qui avait déjà été publiée, et Src aux prochaines technologies risquées sur lesquelles nous étions en train de travailler. Quand nous en sommes venu à présenter Half-Life 2 pour la première fois à l'E3, cela faisait partie de notre communication interne de se référer à au moteur "Source" à la place du moteur "Goldsource", et le nom est resté.
Source a été développé pièce par pièce depuis ce fork, et a peu à peu remplacé GoldSrc pour les projets internes de Valve, ce qui explique en partie les raisons pour lesquelles le moteur est particulièrement modulaire. Le développement du moteur résulte d'un mélange entre l'intégration de middleware sous licence et de code maison. Source utilise par exemple Bink Video pour la lecture de vidéos.

### Modularité et mises à jour notables

Source a été pensé, à l'opposé des moteurs concurrents, pour évoluer de façon incrémentale avec de nouvelles technologies. Les différents composants du moteur peuvent être mis à jour indépendamment sans réellement affecter les autres modules et distribués automatiquement à tous les utilisateurs via Steam. Dans la plupart des cas, il n'est pas nécessaire de retravailler son projet fonctionnant sur Source pour appliquer ces mises à jour, cependant la pratique a montré que certaines mises à jour majeures ont cassé cette chaine de compatibilité. La sortie de Half-Life 2: Episode One et The Orange Box ont chacun amené une nouvelle version du moteur qui ne pouvait être utilisé sur les anciens jeux ou mods que si les développeurs avaient effectué au préalable un travail de portage du code et contenu. Bien que ce travail de conversion est bien plus léger que les changements de version des moteurs concurrents, cela représentait tout de même une charge de travail non négligeable pour les développeurs ou moddeurs.
Depuis la sortie de la première version de Source en 2004, les mises à jour majeures suivantes ont été réalisées :

#### Source 2006

La branche Source 2006 regroupe les techniques de pointe utilisées par Valve dans Half-Life 2: Episode One. Le rendu HDR et la correction des couleurs furent implémentés pour la première fois sur Day of Defeat: Source, ce qui a nécessité la réécriture du module de shaders du moteur. Ces innovations ont été présenté avec les commentaires des développeurs dans Half-Life 2: Lost Coast. Episode One a de son côté introduit le Phong shading et d'autres petites fonctionnalités. Depuis la transition à Steam Pipe, cette branche est maintenant dépréciée et est utilisée pour sa rétrocompatibilité avec les mods les plus anciens.

#### Source 2007

La branche Source 2007 est une mise à niveau complète du moteur réalisé pour la sortie de l'Orange Box. Un système de particule complet a remplacé les effets qui étaient précédemment directement intégrés au code pour les jeux utilisant une version antérieure du moteur. Un framework et des outils ont été créés pour supporter ce système ainsi que les premières versions du Source Filmmaker. De plus, le système d'animations faciales a été amélioré pour supporter l'accélération matérielle des cartes graphiques modernes et permettre une qualité supérieure. La sortie de l'Orange Box sur de multiples supports a été l'occasion de refondre le code de façon importante afin d'y intégrer la prise en charge des microprocesseurs multi-cœurs.
Cependant, la version PC était expérimentale et instable jusqu'à la sortie de Left 4 Dead. Le support des CPU multi-cœurs a par la suite été porté sur Team Fortress 2 et Counter-Strike: Source et Day of Defeat: Source.
Valve s'est chargé de créer la version pour la Xbox 360 de l'Orange Box. Le support de la console est totalement intégré au code du moteur. Cela inclus les convertisseurs de contenus, le cross-platform et l'intégration Xbox Live. Le code d'un jeu peut être porté de PC à Xbox 360 simplement en le recompilant.
Le portage de la version PlayStation 3 a été sous-traitée à Electronic Arts et a été miné par de nombreux problèmes lors de l'opération.

#### Branche Left 4 Dead et Portal 2

Cette branche fut le fruit d'une refonte complète du moteur à la suite du développement de la série des jeux Left 4 Dead. Le support des CPU multi-cœurs a été étendu permettant ainsi le développement de nouvelles fonctionnalités comme le multijoueur à écran partagé, l'ajout d'effets de post-traitement supplémentaires, l'utilisation de scripts codés en Squirrel et l'implémentation d'une intelligence artificielle dynamique avec l'AI Director. Cette branche a revu l'implémentation des menus de jeu et permet d'utiliser un format plus accessible aux consoles de jeu. Ces améliorations ont ensuite permis la réalisation d'Alien Swarm et Portal 2, jeu qui a le plus profité des évolutions de cette branche. Portal 2 a d'ailleurs été le résultat de la nouvelle politique de Valve de dorénavant traiter en interne la problématique du portage de jeux pour la Playstation 3, facilité grâce à cette nouvelle branche. Cette version bénéfice de l'intégration Steamworks et est, selon les dires de Valve, la meilleure version console du jeu.

#### Source 2013 - Support de MacOS et Linux

En avril 2010, Valve a republié tous ses titres majeurs fonctionnant sous Source sur OS X, coïncidant avec la sortie de Steam sur la même plateforme. L'éditeur a annoncé par la même occasion qu'à présent, tous ses futurs jeux seront disponibles simultanément sur Windows et Mac$^,$. Le premier jeu de Valve à supporter Linux fut Team Fortress 2 en parallèle à la publication de la première version bêta fermée de Steam pour Linux en octobre 2012. Les variantes Linux et OS X sont toutes deux basées sur les technologies OpenGL et SDL. Durant le portage, Valve a réorganisé la majorité de ses jeux en branches séparées mais parallèles : jeu solo et multijoueur. Le code de ces deux branches a été rendu accessible aux développeurs en 2013 et sont à l'heure actuelle les dernières versions stables publiques du moteur Source. Cette branche supporte le système de distribution Steam Pipe et l'Oculus Rift.

#### Source 2

À la suite de la GDC de 2015, Valve annonce le développement de Source 2, la suite de son premier moteur vieillissant. Source 2 sera gratuit pour les développeurs de contenu, à condition que leur jeu soit sur la plateforme de jeu Steam, produite par Valve.

## Fonctionnalités

* DirectX9 avec Shader model 3.0 et OpenGL pour les versions PlayStation 3 et macOS.
* Physique, intégrée en utilisant Havok, qui permet de gérer toutes les interactions physiques de la gravité à la poussée d'Archimède en passant par les déformations.
* LOD (modèles et environnement)
* Jusqu'à 32767 sommets (environ 10000 polygones) par modèle
* Jusqu'à 255 joueurs simultanés en multijoueur (requiert des connexions énormes, un ordinateur très puissant et un serveur très rapide)
* Bump mapping
* Cube mapping
* Environment mapping
* Parallax mapping (implanté mais désactivé)
* Système de particules (sprites ou modèles)
* Éclairage dynamique (possible, mais très coûteux en ressources)
* Éclairage par radiosité en temps réel
* Ombres projetées (pré-calculées pour les décors)
* Éclairage HDR
* Blur motion
* Reflet dans l'eau en temps réel
* Effets climatiques
* Génération de ciel volumétrique (skybox 3D)
* Terrain déformable (displacements)
* Gestion de la parallaxe
* Rendu dynamique des corps organiques
* Gestion réaliste des yeux (les personnages n'ont pas le regard vide)
* Expressions faciales très réalistes
* Synchronisation des lèvres quelle que soit la langue (synchronisation labiale)
* Moteur physique réaliste (Havok)
* IA avancée (capable de se cacher derrière des objets qui ont été déplacés par le joueur)
* Son surround 7.1
* Spatialisation 3D du son suivant l'environnement
* Ressources audio en WAVE, WAVE ADPCM et MP3
* Optimisation mise au point pour tirer avantage des architectures multicœurs (Intel et AMD, 32-bit et 64-bit, Xbox 360 et PlayStation 3), toutefois de forts ralentissements subsistent sur les cartes de taille conséquente.

## Jeux développés sur le moteur Source

* Alien Swarm
* Age of Chivalry
* Apex Legends
* Counter-Strike 2
* Counter-Strike: Global Offensive
* Counter-Strike: Source
* Black Mesa
* Blade Symphony
* Dark Messiah of Might and Magic
* Day of Defeat: Source
* Day of Infamy
* Dear Esther
* Dino D-Day
* Dota 2
* Double Action: Boogaloo
* E.Y.E.: Divine Cybermancy
* Fortress Forever
* Garry's Mod
* "GoldenEye: Source"
* Half-Life: Source
* Half-Life Deathmatch: Source
* Half-Life 2
* Half-Life 2: Deathmatch
* Half-Life 2: Episode One
* Half-Life 2: Episode Two
* Half-Life 2: Lost Coast
* Hunt Down The Freeman
* INFRA
* Insurgency
* Left 4 Dead
* Left 4 Dead 2
* Nightmare House 2
* No More Room In Hell
* Nuclear Dawn
* Portal
* Portal 2
* Postal III
* Sandbox (jeu vidéo)
* SiN Episodes: Emergence
* Team Fortress 2
* The Orange Box
* The Ship: Murder Party
* The Stanley Parable
* The Beginner's Guide
* Titanfall
* Titanfall 2
* Vampire: The Masquerade - Bloodlines
* "Vindictus"
* Zeno Clash