Lo sviluppo su PC ha il vantaggio di essere accessibile ad un più vasto numero di sviluppatori, non solo professionisti.
Tutto ciò che occorre è un compilatore Java/C#/C++, l’ultimo SDK di DirectX o di OpenGL, un PC con una scheda grafica qualunque e si può iniziare a scrivere le prime righe di codice. La stragrande maggioranza di chi si avvicina al mondo dello sviluppo di videogiochi oggi inizia così.
Ma programmare giochi su PC a livello professionale è un altro lavoro estremamente più complesso e irto di ostacoli, perché se da una parte CPU e GPU di alto livello (e costi) garantiscono un bacino di prestazioni che sembra quasi illimitato, dall’altra parte la flessibilità dell’architettura crea enormi problemi.
I PC non sono progettati per eseguire applicazioni multimediali, quindi sia i sistemi operativi sia le periferiche non sono ottimizzati con questo scopo. Ulteriori problemi derivano dal numero praticamente infinito di configurazioni hardware e software, che rendono spesso e volentieri necessario scrivere codice specifico per il supporto di pezzi di hardware differenti che, in teoria, dovrebbero fare la stessa cosa.
Ecco che, ad esempio, un effetto grafico come, magari, il rendering di una scena in high dynamic range, richiede codice differente se implementato su una GPU marchiata ATI piuttosto che marchiata NVIDIA. Anche all’interno dello stesso marchio, GPU di classe e architettura differente richiedono codice differente.
E anche all’interno della stessa architettura può capitare che driver diversi richiedano codice differente. La scrittura di un semplice effetto, si trasforma presto in un problema enorme di gestione della complessità. DirectX 10, nel campo della grafica, ha cercato di arginare il problema costringendo i produttori di hardware ad uniformarsi ad un insieme di caratteristiche standard, affinché una GPU possa fregiarsi della compatibilità con queste librerie. L’obbiettivo è diminuire i costi di sviluppo e manutenzione del codice.
Abbiamo visto come su console l’ottimizzazione ha come obiettivo il miglioramento del caso peggiore: su PC, come visto, il caso peggiore è pressoché impossibile da prefigurare per via del numero di configurazioni differenti. L’obbiettivo dell’ottimizzazione su PC si sposta, quindi, al miglioramento del caso medio su una configurazione media, cercando comunque soluzioni che possano facilmente scalare in prestazioni e funzionalità a seconda dell’hardware a disposizione del cliente.
Ecco come in fase di sviluppo si cercano le configurazioni medie che possano coprire la maggior parte del mercato di riferimento, si ottimizzano i livelli del gioco affinché siano mediamente eseguiti in maniera soddisfacente su queste configurazioni. Un esempio: un RPG online come World Of Warcraft cercherà di essere ottimale sul più ampio spettro di configurazioni possibili sacrificando se necessario la qualità del rendering finale.
Un gioco, al contrario, che punta molto sull’impatto grafico come Crysis di Crytek, cercherà di sfruttare al meglio configurazioni più avanzate sacrificando la fascia di mercato più consumer con hardware più datato. Come spesso accade nello sviluppo di videogiochi (ma non solo), è una questione di scelte e compromessi.
Un mito da sfatare: su PC si spende molto più tempo ad ottimizzare e testare un titolo rispetto al tempo spesso su console dove queste due fasi sono enormemente semplificate dalle scelte architetturali.
La settimana prossima è il turno di XNA: sviluppare su PC e Xbox 360 usando un solo strumento di sviluppo.