Il motore grafico è il nucleo software di un videogioco o di
qualsiasi altra applicazione con grafica in tempo reale. Esso
fornisce le tecnologie di base, semplifica lo sviluppo, e spesso
permette al gioco di funzionare su piattaforme differenti come le
console o sistemi operativi per personal computer. La funzionalità
di base fornita tipicamente da un motore grafico include un motore
di rendering ("renderer") per grafica 2D e 3D, un motore fisico o
rilevatore di collisioni, suono, scripting, animazioni, intelligenza
artificiale, networking, e scene-graph.
Motori grafici avanzati come l'Unreal Engine 3, il Source Engine,l'
id Tech 5, il RenderWare e il Gamebryo forniscono una suite di
strumenti di sviluppo visuali in aggiunta alla componente software
riutilizzabile. Questi strumenti vengono forniti generalmente
all'interno di un ambiente di sviluppo integrato (dall'inglese
integrated development environment o più comunemente IDE) affinché
permettano lo sviluppo semplificato e rapido (RAD) dei giochi
secondo un metodo di progettazione data-driven. Questi motori
grafici vengono chiamati spesso "game middleware" perché, in accordo
con il significato commerciale del termine, forniscono una
piattaforma flessibile e riutilizzabile che fornisce tutte le
funzionalità chiave necessarie esternamente per sviluppare
un'applicazione ludica riducendo i costi, la complessità e il tempo
impiegato; tutti fattori critici e altamente competitivi
nell'industria di videogiochi e computer.
Come altre applicazioni di transizione, i motori grafici sono spesso
indipendenti dalla piattaforma, permettendo allo stesso gioco di
girare su più piattaforme incluse le console quali PlayStation,
Xbox, e Nintendo, e sistemi operativi come Microsoft Windows e Mac
OS con nessuno o qualche piccolo cambiamento al codice sorgente del
gioco.
Spesso i middleware sono progettati con un'architettura modulare che
permette di sostituire o estendere parti del motore con soluzioni
più specializzate (e magari costose), come il software Havok per la
fisica, FMOD per il suono, o SpeedTree per il rendering. Alcuni
motori grafici come il RenderWare sono addirittura concepiti come
una serie di middleware indipendenti che possono essere combinati a
piacere per creare un motore personalizzato, piuttosto che
modificare un motore già esistente. In qualunque modo si ottenga la
flessibilità, questa rimane comunque una forte priorità, a causa
della grande varietà d'applicazioni cui i motori grafici devono
rispondere. Nonostante l'idea di motore grafico rimandi
immediatamente al concetto di videogioco, in verità essi sono usati
in molti altri tipi d'applicazioni interattive che richiedono
grafica in tempo reale, come dimostrazioni commerciali,
progettazioni architetturali, simulazioni, e ambienti di
modellazione.
Alcuni motori forniscono solo capacità grafiche, invece della vasta
gamma di funzionalità richieste da un videogioco. Questi motori
affidano agli sviluppatori il compito di inserirle, anche tramite
altri middleware, magari da altri giochi. A motori come questi calza
veramente la definizione di "motore grafico" in senso stretto. Non
c'è comunque una convenzione condivisa sul termine: per il senso
generale si può usare il termine "motore 3D". Esempi di motore
grafico in senso stretto sono: Irrlicht, Axiom, OGRE, Power Render,
Crystal Space e Genesis 3D. Molti motori moderni forniscono lo
scene-graph, una rappresentazione del mondo 3D orientata agli
oggetti che spesso semplifica lo sviluppo del gioco e che può essere
usata per un rendering più efficiente di mondi virtuali molto vasti.
Astrazione dell'hardware
I motori grafici sono costruiti nella maggior parte dei casi su
delle API grafiche, come Direct3D o OpenGL, che offrono
un'astrazione software della GPU o della scheda video. Sono spesso
usate anche librerie di basso livello, come DirectX, SDL e OpenAL,
le quali offrono un accesso diretto ad altro hardware (ad esempio
mouse, tastiera, joystick, scheda di rete, e scheda audio). Prima
dell'avvento della grafica 3D accelerata, si usavano render software
come le API Glide. Soluzioni software come questa sono ancora
utilizzate in alcuni strumenti di modellazione o di rendering
statico, in cui la precisione è più importante della velocità, o
quando l'hardware del computer non soddisfa i requisiti (come il
supporto degli shader o delle Direct3D 10, come nel caso di Windows
Vista).
Storia
Il termine "motore grafico" è nato alla metà degli anni novanta, con
uno stretto legame ai videogiochi 3D, in particolare agli sparatutto
in prima persona. La popolarità di Doom e di Quake (entrambi
prodotti da id Software) era tale che gli altri sviluppatori,
piuttosto che creare giochi da zero, prendevano in licenza le
componenti principali del codice e si limitavano a creare il "game
content" (o "game assets"): ambientazione, armi e livelli. Alcuni
giochi successivi, come "Quake III Arena" e "Unreal" di Epic Games
(1998) furono sviluppati seguendo questo metodo. La concessione di
licenze di queste tecnologie si è dimostrata una valida voce in
entrata per i bilanci di alcuni team di programmatori, visto che una
singola licenza per un motore commerciale di fascia alta può variare
da 8.000 fino a 3.000.000 (come nel caso di Warcraft III), e si
possono avere decine di compagnie licenziatarie (per l'Unreal
Engine). Sicuramente motori riutilizzabili permettono di creare
seguiti di giochi in modo molto più facile e veloce, e questo è un
importante vantaggio nella moderna industria videoludica.
Il continuo avanzamento della tecnologia dei motori grafici ha
permesso una netta separazione tra rendering, scripting, artwork e
level design. Al giorno d'oggi è comune negli sviluppatori un
rapporto tra artisti e programmatori di 4:1.
Gli sparatutto in prima persona sono ancora la principale utenza dei
motori grafici di terze parti, ma il loro uso si sta diffondendo in
altri generi. Alcuni esempi sono il gioco di ruolo The Elder Scrolls
III: Morrowind, i MMORPG Dark Age of Camelot (basati su NetImmerse)
e Lineage II (basato sull'Unreal engine). I motori grafici sono
egualmente usati in ambito console, come il Renderware, usato in
Rayman 2 Revolution, Grand Theft Auto III e Burnout 2 e 3.
I motori moderni rientrano di diritto tra i software più complessi
in assoluto, e possiedono frequentemente decine di sistemi
accuratamente sincronizzati per garantire un buon controllo
dell'esperienza offerta all'utente finale.
Nonostante che il termine fu coniato negli anni novanta, anche nel
decennio precedente videro la luce software le cui caratteristiche
ne fanno "motori grafici". Ad esempio l'Adventure Game Interpreter e
il Sierra's Creative Interpreter di Sierra, lo SCUMM di LucasArts e
il Freescape engine di Incentive Software. Ad ogni modo, questi
sistemi non furono mai impiegati in titoli di terze parti.
Middleware
Alcune compagnie si sono specializzate nello sviluppo di
"middleware". Questi programmatori cercano di "preinventare la
ruota", creando grandi "ambienti" software che riescano ad includere
qualsiasi caratteristica di cui un programmatore di giochi possa
necessitare. La maggior parte dei middleware include strumenti che
facilitano la creazione e lo sviluppo, legati a grafica, sonoro,
fisica e funzioni d'intelligenza artificiale. Gamebryo e RenderWare
sono due soluzioni di successo che rientrano in questa casistica.
Alcuni di questi software sono in grado di svolgere solo una
specifica funzione, ma con risultati molto superiori a motori
generici (un esempio è SpeedTree, renderer specifico per piante ed
alberi, impiegato nell'RPG The Elder Scrolls IV: Oblivion).
Due famosi sistemi che forniscono utili tool sono Havok e buona
parte dei RAD Game Tools. Havok fornisce un robusto sistema di
simulazione fisica mentre RAD sviluppa sistemi per il video
rendering, audio e grafica 3D.
Alcuni middleware contengono il codice sorgente completo, altri
rilasciano una semplice interfaccia API per una libreria binaria
precompilata. Alcuni di questi possono essere licenziati in maniera
differente, solitamente per garantirsi un incasso maggiore nella
vendita del relativo codice.
Lo sviluppo di motori grafici è un progetto comune tra gli studenti
di informatica, appassionati, e sviluppatori di videogiochi. Può
richiedere grandi conoscenze interdisciplinari che spaziano dalla
geometria alla teoria del colore. Dal momento che il settore ha
grande visibilità, comunque, questi sviluppatori lo trovano
divertente e remunerativo. Crystal Space, ad esempio, è un popolare
motore grafico multipiattaforma (gratuito).
Un famoso ed economico sistema venne creato a partire dal 1999 da
Mark Overmars. Il suo interprete Object Oriented Game Maker permette
di sviluppare giochi in grafica bidimensionale con estrema facilità.
Il sistema può supportare molti formati ludici incluso l'RPG. Le
ultime versioni di Game Maker permettono ai programmatori più
esperti anche la progettazione di videogiochi con grafica poligonale
ed effetti di luci.
Motori 3D
Un Motore 3D è un software progettato con lo scopo di rappresentare
su una superficie 2D (come lo schermo) una scena 3D composta da
elementi sintetici. Esistono diverse categorie di motori 3D, ma
essenzialmente si possono distinguere in due tipi, a seconda dello
scopo per il quale sono preposti: motori 3D in tempo reale e motori
3D per la produzione di immagini fotorealistiche.
Motori 3D in tempo reale
I motori 3D in tempo reale (in inglese "real time 3D engine") sono
impiegati laddove sia necessario produrre immagini tridimensionali
"al volo". Con questa espressione si indica la capacità di
calcolare, e quindi di mostrare a schermo (oppure tramite altri
dispositivi ottici, ad esempio occhiali per la realtà virtuale) le
immagini in brevissimo tempo, tale da ottenere un certo numero di
immagini al secondo, tipicamente 30-60 immagini al secondo
(abbreviato spesso come fps, dall'inglese "Frames Per Second").
Questi requisiti di velocità possono essere raggiunti con varie
tecniche, evolutesi nel tempo grazie soprattutto all'invenzione di
dispositivi hardware dedicati allo scopo: gli acceleratori grafici
3D. Questi dispositivi, costituiti in sostanza da un coprocessore
matematico e da una certa quantità di memoria RAM, svolgono certe
funzioni matematiche estremamente ottimizzate e consentono allo
sviluppatore di sgravare la CPU da un'enorme quantità di calcoli,
permettendo quindi di realizzare motori grafici più raffinati e più
veloci. L'introduzione degli acceleratori grafici ha decretato la
formazione di due sottocategorie di motori in tempo reale: i motori
grafici software e i motori accelerati in hardware. Nonostante il
nome possa trarre in inganno, si parla in entrambi i casi di
software. La differenza consiste nel fatto che i primi sfruttano
esclusivamente la CPU (ed eventualmente la FPU e le istruzioni SIMD
come MMX, SSE, 3DNow!, ecc.) per effettuare i calcoli geometrici
necessari, mentre i secondi relegano molte delle funzioni primarie
(come la trasformazione, l'illuminazione, l'applicazione delle
texture, ecc.) all'acceleratore hardware. Ovviamente entrambi gli
approcci portano dei vantaggi e degli svantaggi: i motori software
renderizzano le immagini esattamente nel modo previsto dal
programmatore ma risultano lenti, quindi non possono produrre
immagini di elevata qualità per l'eccessiva quantità di calcoli
necessari; i motori accelerati, invece, sono estremamente veloci e
producono immagini di elevata qualità, ma richiedono la presenza di
hardware dedicato e l'accuratezza delle immagini è soggetta al
particolare acceleratore utilizzato. I motori 3D in tempo reale
trovano largo impiego nella realizzazione di videogames, simulatori,
interfacce grafiche, realtà virtuale.
Motori 3D fotorealistici
Si definiscono così quei motori grafici 3D che producono immagini di
qualità prossima o addirittura paragonabile a immagini di scene
reali. I motori grafici di questa categoria sono esclusivamente di
tipo software, cioè non si appoggiano su hardware di accelerazione
3D. Nelle applicazioni in cui vengono sfruttati i motori 3D
fotorealistici, la precisione e la qualità delle immagini
renderizzate è prioritaria rispetto alla velocità di calcolo. I
motori grafici di questa categoria sfruttano algoritmi molto
sofisticati per simulare fedelmente gli effetti ottici di
diffusione, rifrazione, riflessione, pulviscolo, proiezione di
ombre, aberrazioni cromatiche e altri effetti che contribuiscono a
rendere la scena estremamente realistica. Molti di questi algoritmi
non possono essere implementati nei motori in tempo reale per la
loro estrema complessità, oppure vengono implementati in forma
semplificata e approssimativa. Alcuni di questi algoritmi sono il
Ray Tracing, il Photon Mapping, e altri. Data la mole di calcoli
necessaria, generalmente i motori 3D fotorealistici sono progettati
per essere eseguiti su macchine multiprocessore e su cluster. Questi
motori grafici sono usati per la realizzazione di opere artistiche,
progettazione architettonica e meccanica, design, produzioni
cinematografiche (per effetti speciali o per interi film
d'animazione).
Matematica dei motori 3D
La maggior parte della matematica implicata nella realizzazione di
un engine è quella dei vettori e delle matrici.
Motori per sparatutto in prima persona
Per approfondire, vedi la voce motore grafico per sparatutto in
prima persona.
Una nota sottoclasse di motori grafici 3D è quella che comprende gli
sparatutto in prima persona (FPS, First Person Shooter). Lo sviluppo
in termini di qualità è fatto utilizzando la scala umana. Mentre i
simulatori di volo, quelli di guida ed in giochi di strategia in
tempo reale forniscono realismo su larga scala, i FPS sono la punta
della computer grafica su scala umana.
Lo sviluppo di nuovi motori può essere caratterizzato da un aumento
della tecnologia disponibile.
I tentativi di classificarli in generazioni portano ad una
definizione arbitraria della linea di separazione tra i "vecchi
motori" e quelli nuovi.
La classificazione è complicata dal momento che attingono sia a
nuove che a vecchie tecnologie. Quelli considerati avanzati un anno,
diventano lo standard della stagione successiva. I giochi composti
da un misto di vecchie e nuove caratteristiche sono la norma. Ad
esempio, Jurassic Park: Trespasser (1998) introdusse la fisica negli
FPS, ma il suo uso non divenne comune sino al 2002 circa. Red
Faction (2001) usò muri e pavimenti distruttibili, cosa di uso
limitato fino al 2004. Codename Eagle (2000) aggiunse i veicoli da
combattimento ai giochi FPS. Tribes 2 e Battlefield 1942
potenziarono l'integrazione di mezzi-veicolari e sparatutto, seguiti
a breve termine da Halo ed Unreal Tournament 2004.
Ecco
i principali motori grafici conosciuti:
Frostbite 2.0
FoxEngine
CryEngine
Unreal Engine
Madness Engine
AnvilNext Engine