# Source Engine

Il Source Engine è un motore grafico sviluppato dalla Valve Corporation. Molto flessibile (caratteristica che lo rende uno dei preferiti fra i cosiddetti modder), fra le sue caratteristiche si possono citare il sistema di render basato sugli shader, l'accurata sincronizzazione labiale, un sistema avanzato per realistiche espressioni facciali e un modello fisico molto accurato.

## Sviluppo

Il Source nasce dal GoldSrc, che era una versione modificata del Quake engine creato da John Carmack. Infatti Carmack ha commentato sul suo blog nel 2004, che «ci sono ancora pezzi di codice del primissimo motore di Quake, in Half-Life 2».
La prima versione del Source è datata ottobre 2004 (apparsa in Half-Life 2), e nel corso degli anni sono state aggiunte diverse funzioni (fra le più notabili l'HDRI e l'effetto motion blur). Source è stato ed è tuttora disponibile per diverse piattaforme: Microsoft Windows, Linux, macOS, Xbox, Xbox 360 e PlayStation 3.

## Caratteristiche
### Luci e ombre

Il motore grafico Source utilizza sorgenti di luci statiche (le luci mobili sono molto poco usate) che emettono luce che va a colpire direttamente le superfici. Per simulare la luce che colpisce gli oggetti, Source utilizza parametri Radiosity; questo garantisce un ottimo effetto su qualsiasi tipo di materiale, tuttavia, il fatto che l'illuminazione di ogni oggetto debba essere ricalcolata ogni volta che la sorgente di luce o l'oggetto stesso si spostino, può diminuire la frequenza di fotogrammi per secondo, di conseguenza le luci (e le ombre) simulate dal motore non devono essere troppo complesse, anche se ciò diminuisce la qualità degli effetti di luce.
Per ovviare a questo problema, ogni superficie che riceve luce è impostata per avere una qualità delle ombre più alta o bassa, cosa che dipende dal tipo di ombre che la colpiscono (una superficie con l'ombra di un palazzo, per esempio, avrà ombre poco dettagliate, mentre una con diverse ombre di elementi complessi dovrà utilizzare ombre con alti livelli di dettaglio).
La tecnica di illuminazione HDRI ha inoltre permesso di simulare la luce in modo ancora più realistico, e di calcolare anche quanta luce deve essere mostrata dallo schermo ogni volta che vi è una transizione da un ambiente buio a uno illuminato o viceversa, indipendentemente dalla quantità effettiva di essa, in modo da simulare ciò che accade realmente all'iride dell'occhio quando vi giunge troppa o troppo poca luce.

### Modelli

L'innovazione nel Source Engine nell'animazione dei modelli è un sistema di movimenti non solo scheletrici, ma anche simulatore di muscoli facciali. Grazie a queste simulazioni, il motore grafico può riprodurre in modo molto realistico qualsiasi espressione nella faccia dei personaggi. Per quanto riguarda i modelli che non necessitano di questa tecnologia, le animazioni sono create con programmazioni (relativamente) semplici, che non infieriscono sulla scorrevolezza dei movimenti.
Infine, i modelli sono composti da un numero di poligoni molto alto, che li rende molto credibili, e, soprattutto, ogni animazione, pur non essendone direttamente collegata, rispetta la fisica del motore stesso.

### Fisica

La fisica usata da Source è molto avanzata, grazie ad una versione personalizzata del middleware Havok: ogni oggetto si attiene alle stessi leggi che regolano tutto il motore, senza eccezioni. Tutto ciò che viene lasciato cadere o lanciato lo fa in modo molto realistico, inoltre, se ciò accade mentre questi oggetti sono già in movimento, essi continueranno a mantenere una piccola proporzione di moto anche in caduta libera (la perderanno poi gradualmente come accade nella realtà).
La Gravity Gun, arma per lanciare o raccogliere oggetti vista in Half-Life 2 e nei due sequel, è il simbolo di questa fisica molto accurata.

## Source Engine 2

Le prime voci sullo sviluppo di una nuova versione del Source, iniziarono a trapelare nel mese di agosto 2012 dal fansite Valve Time. Poi nel novembre dello stesso anno Gabe Newell ha confermato che il Source Engine 2 è in fase di sviluppo, e che sarà totalmente ricreato da zero. Newell ha anche detto che il Source Engine 2 sarà pronto appena sarà completato un gioco in grado di sfruttarlo.
Tale motore grafico è stato annunciato il 3 marzo 2015, che verrà utilizzato a partire dai nuovi videogame prodotti, inoltre il motore è concedibile su licenza in modo gratuito, ma i giochi realizzati con il Source 2 dovranno essere disponibili anche sulla piattaforma Steam, anche se il motore Source 2 venne già adottato nel Dota 2 Workshop Tools.
Le caratteristiche di questo nuovo motore rispetto al precedente sono:
* Minor latenza e miglior responsività dei comandi.
* Miglioramento delle prestazioni per sfruttare meglio l'hardware.
* Migliore elaborazione audio e vocale.
* Fa uso di Vulkan 3D Graphics e Computing API.
* Supporto nativo OpenGL su tutte le piattaforme.
* Nuovo motore fisico interno, Rubikon (sostituisce l'Havok).
* Nuovi strumenti d'autore, ricostruiti da zero.
* Supporto per le ombre basate sulla fisica.
* Supporto per il sistema audio Steam Audio.
* GUI avanzata, progettata per essere più pratica.
Nel 2015 Dota 2, è diventato tramite un aggiornamento il primo titolo che sfrutta il Source Engine 2.

## Giochi che utilizzano il Source Engine di Valve
### Con Source Engine

* Prodotti dalla Valve:
** Alien Swarm
** Counter-Strike: Global Offensive
** Counter-Strike: Source
** Day of Defeat: Source
** Day of Infamy
** Half-Life: Source
** Half-Life 2
** Half-Life 2: Lost Coast
** Half-Life 2: Episode One
** Half-Life 2: Episode Two
** Left 4 Dead
** Left 4 Dead 2
** Portal
** Portal 2
** Team Fortress 2
* Prodotti (o in produzione) da altri sviluppatori:
** Age of Chivalry
** Apex Legends (modificato)
** Black Mesa
** Dark Messiah of Might and Magic
** Garry's Mod
** Insurgency: Modern Infantry Combat
** Insurgency
** Postal 3
** SiN Episodes
** Vampire: The Masquerade - Bloodlines
** Zeno Clash
** Dear Esther
** Nuclear Dawn
** Titanfall (modificato)
** The Stanley Parable
** Tactical Intervention
** Fistful of Frags
** Titanfall 2 (modificato)
** Voices of the Void