di  -  lunedì 8 dicembre 2008

CrysisLo 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.

7 Commenti »

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.

  • # 1
    Agramante
     scrive: 

    C’è una cosa davvero triste: che tu abbia scritto obiettivo con due b. Posso capire nei commenti, ma pure nei post…

  • # 2
    Francesco Carucci (Autore del post)
     scrive: 

    ‘obbiettivo’ e ‘obiettivo’ sono entrambi corretti. Uso solitamente la seconda forma, ma e’ indifferente. A scanso di equivoci ho controllato sul Garzanti.

  • # 3
    rub
     scrive: 

    Davvero interessante.
    La Crytek ha fatto un bel lavoro con Crysis però come dicevi tu francesco:”sacrificando la fascia di mercato più consumer con hardware più datato”.Diciamo che sono andato a buttare un po’ di soldini comprandolo.Ho una ATI HD 3470 e il gioco scatticchia devo abbassare qualcosa per giocare bene.Giochi come Fallout,Far Cry2 e Call of Duty non scattano.

    Voglio Fable 2 per PC. :D

  • # 4
    Wolf01
     scrive: 

    Chissà come facevano una volta, quando i giochi bootavano direttamente senza sistema operativo e si gestivano da soli i loro driver delle 1000 e una schede audio, video e processori tutti diversi.
    Quelli erano tempi duri, quelli di adesso sono solo caccia all’effetto grafico, altro che schede video modellate sulle funzioni da implementare.
    Sinceramente non so cosa sia cambiato, adesso mi sembra un po’ più facile di una volta lo sviluppo dei giochi, eppure i giochi sono poco ottimizzati rispetto a quelli vecchi.

  • # 5
    Cesare
     scrive: 

    All’epoca non c’erano 1000 schede video e/o audio, ecc., ma ben poche. Era tutto molto più facile, infatti. ;)

  • # 6
    ufo.rob
     scrive: 

    Io non l’ho vissuto ma immagino che gli sviluppatori rimpiangano i tempi degli home computer (un po’ PC, un po’ console). Confermo poi che si può scrivere “obbiettivo”, anche se fosse stato sbagliato definirlo “davvero triste” mi sembra esagerato e mostra una certa arroganza.
    Infine, nel linguaggio comune spesso infinito viene usato a sproposito, qui sarebbe stato più corretto un “numero illimitato” di configurazioni infatti è un numero finito che può però essere grande a piacere, però è una cosa matematica che ci tenevo a segnalare ai lettori cogliendo l’occasione, non si può neanche considerare un errore infatti sul dizionario “infinito” ha anche il significato di “grandissimo” e in quelche modo quel “praticamente” mette a posto tutto :-)

  • # 7
    ufo.rob
     scrive: 

    Non mi è chiaro l’esempio dell’HDR, usando le DirectX non dovrebbe prescindere dall’architettura? È perché non si può fare in DirectX o perché anche usando solo DirectX bisogna tener conto dell’architettura?

Scrivi un commento!

Aggiungi il commento, oppure trackback dal tuo sito.

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.