La complessità dei giochi è cresciuta esponenzialmente negli ultimi anni, tanto più con l’avvento delle console di nuova generazione, dalle quali il mercato si aspetta ulteriore sviluppo delle meccaniche di gioco, ambienti più realistici e complessi, esperienze piu’ vaste. Queste aspettative si traducono durante lo sviluppo in termini di più asset, più linee di codice, tecniche più complesse; problematiche che vanno affrontate da team più numerosi. L’unica variabile che non è cambiata è il tempo di sviluppo per un titolo da vendere a prezzo pieno: circa due anni.
Vari team di sviluppo stanno affrontando il problema di gestire questa crescente complessità in diverse discipline: in questo post mi concentro sulla costruzione del software, quindi su quali linguaggi di programmazione sono usati oggi durante lo sviluppo di un videogioco.
La risposta è: non solo C++, ma diversi a seconda dello scopo.
C++/Assembly. I linguaggi a livello più basso sono usati dove è necessario il totale controllo sull’hardware, sul ciclo di vita degli oggetti e sulla loro collocazione in memoria. L’Engine Grafico, il Network Engine, oppure l’Engine Sonoro, ma anche alcune porzioni del Game Engine, sono scritti in in C++ con minuscole porzioni di assembly dove necessario. In questi sistemi non sono tanto importanti le prestazioni, ma è fondamentale capire quando nascono e soprattutto quando muoiono l’entità con le quali si lavora, oppure dove sono posizionate in memoria. Su console soprattutto la gestione della memoria è fondamentale perché la memoria è un bene scarso e prezioso.
LUA/Python. I linguaggi ad alto livello stanno quasi esclusivamente sostituendo i vecchi linguaggi di scripting proprietari (chi ricorda il Quake C?). LUA e Python in particolare sono semplicissimi da interfacciare a codice C++ nativo, offrendo però un ambiente ad alto livello più produttivo per sistemi dove concetti come la gestione della memoria non sono fondamentali. Le prestazioni offerte sono sufficienti ad eseguire codice che gestisce le meccaniche di gioco. Un ulteriore vantaggio è la semplicità di apprendimento, che permette ad uno scripter di diventare subito produttivo. Civlization 4di Sid Meier, ad esempio, è scritto per larga parte in Python. Fable 2 usa LUA per lo scripting.
C# e .NET. Il codice del gioco rappresenta una parte anche abbastanza piccola rispetto a tutto il codice che è necessario scrivere durante lo sviluppo di un titolo. C# e .NET, per via della loro produttività e standardizzazione, si stanno ritagliando grosse fette di interesse nello sviluppo di tutti i tool di supporto allo sviluppo: tool di conversione, costruzione e gestione degli asset di gioco, editor di livelli sono sempre più spesso scritti in uno dei linguaggi che supportano la piattaforma .NET.
Un programmatore che volesse entrare nel mondo dello sviluppo, quindi, non può più limitarsi a conoscere il C++, ma si vede costretto ad allargare il proprio bagaglio di strumenti con linguaggi e piattaforme a più alto livello.
Molto interessante.Ma non ho capito una cosa:
Python può essere utilizzato per il motore grafico??
no. in tutte le componenti dell’engine in cui le prestazioni sono una discriminante, i linguaggi ad alto livello o gli script non possono essere una soluzione adeguata. al contrario pero’ avere elementi come l’AI gestita da LUA permette di apportare sostanziali modifiche senza dover ogni volta ricompilare l’intero motore, micca male!
Beh dopo tutti i post sul linguaggio migliore per iniziare questo è un ottimo articolo su gli spazi che si sono ritagliati tutti i linguaggi.
A ognuno il suo campo.
Se non ricordo male anche le mod per World of warcraft sono fatte in lua, cosi come, ai tempi, anche alcune features di ultima online.
Il python invece non sapevo fosse usato nel mondo dei videogiochi.
e se uno avesse già basi di c/c++ più che solide, volesse iniziar a lavorare su un videogioco da cosa dovrebbe cominciare? ci son tutorial o basi?
Con XNA Microsoft credo si stia guadagnando un certo “rispetto” con C# sul campo, mostrando come tra i linguaggi ad alto livello si possa essere produttivi in poco tempo, rimanendo nell’egida .NET.
nodith ti consiglio di cominciare a studiare le collisioni, ovviamente non basta essere programmatori devi avere anche qualche base di informatica e geometria.
oppure utilizzi un motore già esistente come il 99,9% di chi lavora nell’ambiente o a livello amatatoriale ti limiti a moddare un gioco già esistente, ma imo quello che conta davvero nel realizzare un gioco 3D moderno è saper fare le mappe e i modelli ed avere inventiva con gli shader.
tu in che ambito ti vuoi collocare ?
il progetto che stiamo cercando di metter su al momento è quello di un mmorpg, ed effettivamente l’idea di utilizzar un sistema già collaudato la abbiamo anche considerata (premettendo che cmq siam tutti studenti di ingegneria a livello più o meno avanzato, quindi le basi di informatica e programmazione bene o male ci sono). Il problema è che non conoscendo bene il settore (siamo all’esordio diciamo) non abbiamo idea di cosa scegliere
Mount&Blade (gran bel gioco) è compilato in Phyton se non sbaglio.
STALKER Clear Sky ha scripting in LUA se non sbaglio.
EVE online e’ scritto quasi tutto in python, tranne la parte che gestice la grafica, che ovviamente e’ in c++.
Anche la parte server e’ scritta in Python.
Nodith: se siete alle prime armi EVITA un mmorpg. Evitalo anche se siete un team gia’ affermato: e’ la tipologia di gioco piu’ complessa che si’ puo’ sviluppare.
Io ti consiglio di dedicarti ad un MOD di un gioco che offra queste possibilita’. Mi viene in menta Half Life 2 soprattutto. Oppure provare a scrivere qualcosa di semplice con XNA.
Se si vuole scrivere un gioco quali sono le conoscenze di geometria richieste?
OT abbastanza CONSISTENTE:
Dateci Fable II per PC!!!! :P
Si dovrebbe riscrivere l’engine del gioco, visto che è stato pensato appositamente per la XBox360. La conversione non è affatto semplice.