ATTENZIONE. Post ad alto contenuto infiammabile. Maneggiare con estrema cura.
Direct3D ha vinto per lo sviluppo dei videogame. La metto subito lì, così passato lo shock iniziale se ne può parlare spero pacatamente.
Di recente sono state presentate, con un paio di anni di ritardo, le specifiche di OpenGL 3.0 che, sostanzialmente, allineano questa API alle caratteristiche di Direct3D 10. Il primo vantaggio di OpenGL 3.0 e’ presto detto e colpisce Microsoft come un cazzotto in piena faccia: OpenGL 3.0 espone per intero le caratteristiche delle GPU di classe 10 anche in WindowsXP, dove Direct3D 10 non arriva per scelte tecnologico-commerciali. E’ il colpo del KO?
No, perché è arrivato troppo tardi, implementato con un modello ad oggetti non troppo chiaro, manca di supporto, documentazione, tool di sviluppo.
Perché l’API non é tutto nello sviluppo di videogiochi. Quando sto scrivendo un gioco da rilasciare entro una certa scadenza ed ho un problema con l’API a chi mi rivolgo? Se uso OpenGL, alla comunità di sviluppatori nella speranza che qualcuno di buon cuore sia gentile e mi aiuti prima o poi.
Se uso Direct3D mi rivolgo al supporto tecnico, che, alla peggio, mi spedisce un ingegnere in ufficio. Il supporto tecnico è, inoltre, responsabile dello sviluppo e del rilascio a precise scadenze di tool di supporto e bug fix. OpenGL, al contrario, è un consorzio dove le specifiche sono aggiornate dopo estenuanti “trattative”.
Durante lo sviluppo di un gioco io devo sapere che ogni due mesi avrò un aggiornamento, non posso aspettare il dipanarsi delle trattative in un consorzio, perché il mercato (e il publisher) non aspettano me che aspetto loro. Al di là delle considerazioni tecniche, semplici considerazioni di opportunità durante lo sviluppo fanno preferire Direct3D alla stragrande maggioranza dei team oggigiorno. Sviluppare in OpenGL costa semplicemente più tempo e denaro.
Sarà comunque interessante vedere se OpenGL 3.0 invertirà la tendenza degli ultimi dieci anni che vedono una progressiva scomparsa di questa API dalla scena videoludica: le carte in mano dal punto di vista tecnologico sono buone, si tratterà in futuro di dare ottimi motivi agli sviluppatori per giocarle.
Posso essere d’accordo sul fatto che le DirectX siano la scelta “migliore” per chi sviluppa videogiochi, perché logicamente se una compagnia vuole vendere alla svelta il suo prodotto non può aspettare che, un giorno o l’altro, esca il tool che sta chiedendo da mesi e mesi.
Ma allora perché tutto il resto del mondo (Sony, Nintendo, e tutte le software house che ruotano attorno a loro) continua ad usare OpenGL?
Scegliendo DirectX, oltre a dover pagare royalty di vario tipo a Redmond, si va a perdere una cosa che, secondo me, è fondamentale: la portabilità dei videogiochi, che sarebbero “costretti” a girare unicamente in ambienti Windows/XBox, a meno di una rivisitazione cross-platform (o, più semplicemente, di un porting in OpenGL) del loro motore grafico. Che in ogni caso porterebbe a una spesa di tempo e di denaro ulteriori nello sviluppo.
Io sono convinto che il futuro della programmazione (non solo videoludica) stia nella cross-compatibilità, e voi?
Io penso che sarebbe più saggio per la comunità open source impiegare meglio le proprie risorse sviluppando un porting delle DirectX, piuttosto che progetti come WinE, Cedega, ecc.
In questo modo si faciliterebbe lo sviluppo di applicazioni NATIVE per la propria piattaforma.
Perché non si può biasimare uno sviluppatore che decide di adottare le DX perché sono economicamente più vantaggiose: le risorse non sono illimitate e sulla propria testa pende sempre la spada di Damocle della scadenza da rispettare.
Poi non c’è scritto da nessuna parte che le OpenGL debbano essere l’UNICA soluzione multipiattaforma. ;)
l’ultimo gioco openGL che ho usato credo fosse Doom ..
se le OpenGL sono morte è perchè non si sono mai sviluppate.. sono come tante buone idee.. il betamax etc.. morte perchè portate avanti male..
se resuscita non mi da fastidio.. sia ben chiaro.. basta che sia ben implementato con il sistema operativo.. a me personalmente della portability non interessa.. ho 5 computer e sono tutti con windows .. quindi.. ma se funziona e lo fa meglio delle DX ben venga..
Spesso e volentieri, l’evoluzione arriva prima sui prodotti closed per ovvi motivi … ma i risultati migliori, arriveranno poi sulle controparti aperte.
Non credo che questo sarà diverso in questo caso.
Le opengl sono appena uscite, e perforza di cose non possono reggere il confronto.
L’apertura di wiki e comunità porterà quello che ora è assente.
E’ lo stesso per quanto riguarda l’audio, avete notato che sempre più spesso nei videogiochi si iniziano ad usare formati aperti anzichè gli mp3? Quanto tempo c’è voluto seppur il formato era già disponibile?
Penso che sarà lo stesso anche nel campo grafico :)
Che i risultati migliori arriveranno sulle controparti aperte è del tutto opinabile.
Inoltre OGG sarà migliore di MP3 (non che ci voglia molto, visto che l’MP3 è stato il PRIMO formato audio che permettava elevati livelli di compressione), ma ce ne sono altri chiusi e blindati da brevetti e licenze che sono anche meglio.
E’ precisamente il problema che si ha quando si scrivono librerie di API molto vaste: c’è bisogno di un leader _riconosciuto_ che indirizzi lo sviluppo, altrimenti si finisce come per la stragrande maggioranza dei progetti linux: fork su fork.
Microsoft ha dalla sua questa vantaggio: ogni dipendente ha un capo che gli dice cosa fare ma soprattutto cosa NON fare. In questo modo lo sviluppo ha coordinamento e direzione. Dopotutto se esiste la figura professionale del project manager, perché non si trova un project manager per nessun progetto OSS?
Un programmatore bravo può benissimo scrivere un progetto organico e coerente da solo. Dieci bravi programmatori hanno invece bisogno di un coordinatore (risottolineo) _accettato_. Altrimenti dopo sei mesi di sviluppo nasce un contrasto e… fork.
Vista questa problematica, la cosa migliore è lasciare l’onere del design a chi ha un design in mente e dedicarsi all’implementazione cross platform, che è una cosa che può essere lasciata alla folla di sviluppatori. Guardate il progetto Mono: specifiche pubbliche e standard progettate e scritte da privati, implementazione open source cross platform. Già adesso (Mono 2.0 rilasciato pochi giorni fa) molti software gestionali in .net puro possono essere eseguiti su linux. Così si rende competitiva una piattaforma, non creando l’ennesimo livello di librerie (vedi il caos delle librerie audio per *nix).
Detto ciò, OpenGL è ancora ampiamente usato nelle applicazioni CAD. Quanto ci metterà MS a rimediare scrivendo helpers anche per questa nicchia? :)
Si si.. le DX sono proprio il massimo della coerenza e dello sviluppo guidato.. :D
Andiamo, nessun prodotto è perfetto e DirectX ha dalla sua parte almeno 5 revisioni (DX5 è stata la prima ad avere un po’ di diffusione).
Guarda cosa è riuscito a combinare lo Steering Board di OpenGL: http://www.gamedev.net/community/forums/topic.asp?topic_id=504547&PageSize=25&WhichPage=
Ottimi commenti con ottimi spunti.
Qualche precisazione:
– l’uso di D3D e’ gratuito e non richiede il pagamento di royalty
– e’ pero’ (piu’ o meno) illegale portare D3D su un’altra piattaforma, e questo rappresenta un problema
– non credo il futuro dello sviluppo dei VG sia multipiattaforma, perche’ va contro il primo problemo dell’Industry oggi: sviluppare costa troppo
In effetti l’idea del porting di DX mi pare del tutto inapplicabile. Microsoft vede in DX uno strumento per l’affermazione di Windows. Basta pensare alla limitazione della versione 10 al solo Vista, per promuoverlo come gaming OS laddove le pure prestazioni vedono favorito XP in ragione di una maggior leggerezza.
@Alberto. Parli per esperienza diretta o per sentito dire?
Perché chi ha scritto quest’articolo è stato anche coinvolto nella definizione delle DX, e non parla tanto per esercitare i polpastrelli, al contrario di tanta gente che passa il tempo a riportare le solite leggende metropolitante…
@Francesco. Però WINE e Cedega di fatto ne sono una reimplementazione. Quindi sarebbero illegali?
@Cesare. Hmmm credo siano li’ li’ sul limite, ma non sono un avvocato.
@Tudhalyas
semplice perkè sony e nintendo forniscono loro stesse i tools di sviluppo dei giochi per le proprie console
Perchè microsoft no ? Il vantaggio di sviluppare per la 360 è per l’utilizzo degli stessi strumenti per sviluppare giochi per windows, ovvero DirectX e affini.
sulle altre console invece usano altri strumenti. Comunque molti optano per Open GL o una versione Modificata da loro.
Che significa che opengl è implementato con un modello ad oggetti poco chiaro? L’ultima volta che l’ho guardata, l’api opengl era procedurale e quindi non ha affatto un modello ad oggetti.
Cosa importa a chi sviluppa un’applicazione del fatto che escano periodicamente nuove release dell’api 3d che sta utilizzando? Una volta che lo sviluppo dell’applicazione è iniziato, agli sviluppatori importa solamente della versione con cui hanno iniziato a lavorare, anzi, il fatto che l’api gli si sposti sotto i piedi può essere solamente causa di disagio.
Per finire, l’articolo fa confusione fra i concetti di API e di implementazione della stessa. Perché sostanzialmente di Direct3D esiste una sola implementazione, quella per Windows. OpenGL al contrario è una specifica astratta della quale esistono svariate implementazioni per diversi sistemi operativi; è l’api che si mantiene relativamente stabile, mentre le implementazioni vengono continuamente aggiornate. Tanto per fare un esempio, si confronti la cadenza delle release su http://www.mesa3d.org .
@peppe
L’aggiornamento continuo dei tool di sviluppo e’ la cosa fondamentale perche’ lo sviluppo di un gioco dura mediamente un paio d’anni. Sia durante lo sviluppo di Black&White 2 sia di Fable 2, aggiornavamo l’SDK in uso a cadenza bimestrale per usufruire dei bug fix, delle ottimizzazioni e dei fix all’API stessa, che rimanda al secondo punto.
Non c’e’ confusione fra API e implementazione della stessa: uno dei problemi di OpenGL e’ proprio il fatto che le specifiche sono immutabili per molti anni, quindi eventuali cambiamenti assolutamente necessari devono aspettare oppure essere esposti mediante estensioni all’API stessa. Un vantaggio di DirectX e’, per l’appunto, la possibilita’ di vedere correzioni alle specifiche di rilascio in rilascio (a scadenza bimesterale).
@peppe
Non avevo visto il tuo dubbio sul modello ad oggetti, scusami. Il modello ad oggetti di un sistema software e il paradigma con il quale questo modello e’ implementato sono concetti ortogonali. E’ perfettamente lecito e possibile implementare un modello ad oggetti in C o in assembly, quindi con un paradigma procedurale: un esempio e’ l’API Win32, totalmente ad oggetti ed esposta in C. OpenGL e’ un altro esempio. Lo e’ anche D3D: l’API e’ esposta sia in C sia in C++ direttamente dagli header file.
Qui si’ c’e’ un attimo di confusione fra i due concetti.
Volete che si rimanga nell’ambito dei videogiochi o accettate considerazioni anche in ambiti differenti circa l’immutabilità delle specifiche delle specifiche OpenGL? :P
Perchè se rimaniamo nell’ambito videoludico, quoto al 100% l’articolo di Francesco, altrimenti anche io avrei da contribuire 2 centesimi a riguardo… :D
In ambito videogiochi. Nell’ambito professionale OpenGL rappresenta uno standard ed e’ giusto che sia multipiattaforma e relativamente stabile. Come dico sempre si usano gli strumenti giusti per il proprio problema.
Premesso che non ho mai lavorato né con OpenGL né con DirectX, e quindi i miei commenti possono lasciare il tempo che trovano,
se non mi sbaglio non è che Microsoft cambi l’API di DirectX ogni 2 mesi; le release bimestrali dell’SDK di DirectX aggiornano gli strumenti di sviluppo, la documentazione e le librerie “managed”…
L’API Direct3D (la sola parte che possiamo confrontare ad OpenGL) non è cambiata da DirectX 9.0c, uscito nel 2004, a DirectX 10, uscito nel 2006, no? Quindi il suo modello di sviluppo non è poi così più veloce di quello di OpenGL, che nello stesso periodo ha visto anch’essa 2 versioni della sua API (se non vogliamo prendere in considerazione le estensioni, che di solito arrivano molto prima).
Non voglio negare le carenze e i ritardi del mondo che ruota intorno all’OpenGL – mannaggia, danneggiano in primo luogo me come utente – però dipingere DirectX come il luogo del progresso, in opposizione ad OpenGL quale simbolo dell’incompetenza (API mal disegnate) e della burocrazia (incapacità di seguire le innovazioni dell’hardware), mi sembra eccessivamente semplificativo.
Tanto per restare in topic, forse si tratta un po’ di definire che cosa intendiamo per “ha vinto”. Se l’API “vincente” è quella in cui allo stato attuale conviene dedicarsi per vendere più copie possibili di un gioco al mercato degli “entusiasti”, allora certo che è Direct3D, non c’è neanche da pensarci su – ma se è così allora questo thread che l’abbiamo aperto a fare ;) ?
P.S.: win32 un’API interamente orientata agli oggetti o_O ? Non riuscirai mai a convincermene :) .
@peppe.
Si’, mi e’ successo abbastanza spesso di presentare richieste di “aggiornamento” dell’API di D3D durante lo sviluppo di BW2 e vederle esaudite in due o quattro mesi. Non sono mai cambiamenti enormi, di solito piccoli “aggiustamenti” per rendere l’API piu’ chiara dove era equivoca.
Ovviamente il titolo e’ volutamente “catchy”, l’idea del post e’ spiegare perche’ D3D e’ piu’ usato di OGL in ambito videoludico.
Win32 e’ un API totalmente ad oggetti.
@Cesare
Intanto mi riferivo al post di luca. E poi che fai il difensore d’ufficio? Suppongo che fek non abbia bisogni di difensori di ufficio. Le DX ai tempi le ricordo come api decisamente poco belle ed eleganti. Le Glide ad esempio erano molto piu’ concise e con molto meno codice permettevano di ottenere le stesse cose. Ogl stava nel mezzo. Che poi con il tempo le DX si siano evolute ed arrivate ad un ottimo livello, non lo metto in dubbio ma il fatto stesso che le api vengano modificate su richieste da parte degli sviluppatori (per quanto importanti e/o appartententi alla stessa casa) non ritengo siano uno sviluppo controllato e coordinato delle api.
Lasciamo invece perdere il consorzio OGL che purtroppo cercando di mettere daccordo diverse entita’ ha i suoi problemi.
Vabbé, ma tu ti riferisci proprio alla preistoria, visto che tiri in ballo le Glide.
Quanto allo sviluppo sulla base delle indicazioni degli sviluppatori è, al contrario, il valore aggiunto delle DX che gli hanno permesso di diventare quello che sono. D’altra parte le API chi le deve usare, MS o gli sviluppatori? Sapranno bene loro quali sono gli strumenti che gli servono, no?
Siamo passati dai produttori di schede video che aggiungevano funzionalità a destra e a manca, utilizzando le famigerate estensioni OGL e costringendo i programmatori a sviluppare n-mila code-path diversi per supportarle, a un’API unica che ha messo sul piatto ciò che gli stessi sviluppatori hanno chiesto.
La differenza è abissale. E, al contrario di ciò che dici, è proprio frutto di coordinazione e controllo.
P.S. Io non faccio il difensore di nessuno. Se ho qualcosa da dire lo faccio, come lo fai anche tu, visto che questo è uno spazio “libero”. E sono d’accordo anche con quanto ha scritto Luca.
Cesare,
a proposito di n-mila code path differenti: mi risulta che anche in Direct3D devi controllare che una determinata caratteristica sia supportata dal dispositivo prima di usarla, no? Dov’è la differenza “abissale” tra controllare la presenza di una specifica estensione e controllare fra le decine (centinaia?) di “caps” presenti in D3DCAPS9?
La soluzione, sia per Direct3D che per OpenGL, è la stessa – chiedere agli utenti finali di aggiornare la propria implementazione di Direct3D (se possono) alla versione 10 (che stabilisce un set di “caps” base) o di OpenGL alla prossima versione (che consolida, come è prassi, un certo numero di estensioni nell’API base).
Naturalmente l’hardware andrà sempre avanti – tant’è vero che anche in Direct3D 10.1 fa capolino D3D10CreateDevice1 che consente di richiedere una specifica versione di Direct3D (set di “caps”) all’hardware sottostante, ed ecco riapparire i code path differenti.
E’ vero, per i videogame le D3D hanno stravinto, e lo dico da persona che utilizza 100% di software open-source anche in ufficio, dove la mia licenza di Windows sarebbe pagata e legale.
Le OpenGL sono fondamentali per chi sviluppa multi-piattaforma, ma se dovessi scrivere e produrre un videogame avrei l’interesse di venderlo il prima possibile, e il modo migliore per farlo è sacrificare la portabilità e sfruttare il predominio di Windows nel mercato dei PC, oltre al supporto dei suoi ingegneri, per quanto personalmente resteri convinto che solo l’open-source potrà rivoluzionare l’informatica.
Ampiamente opinabile, visto che l’open source è un modello di distribuzione del software.
Poi in questo caso sarebbe più corretto parlare di open specs: specifiche libere (che personalmente apprezzo; poi le implementazioni potrebbero essere open o closed, sarebbe indifferente).
@peppe. La differenza è sostanziale, visto che le DX espongono delle caps standard, che puoi implementare o meno (con le DX 10+, comunque, devi supportare TUTTE le caps previste per poter affermare che la GPU sia di classe 10.0, 10.1, ecc.).
Nelle OGL invece ti ritrovi con le STESSE caratteristiche che hanno… nomi diversi per le estensioni.
La cosa peggiore ovviamente è quando ti trovi caratteristiche similari ma implementate in maniera diversa e che, quindi, devi gestire in modo diverso.
Mi sembra che la situazione sia LEGGERMENTE diversa, non credi? ;)
Qualcuno sa come si può vedere se un applicazione utilizzi DirectX o OpenGL durante l’esecuzione sotto winxp?
Ho trovato questo articolo in cui Autodesk spiega perche si trovano meglio con DirectX anche in un ambito che è diverso da quello dei videogiochi.
Inotre se non sbaglio le ultime versioi di AutoCAD supportano solo DX o sbaglio? E possibile che in futuro DX scalzi OpenGL anche da altri settori oltr quello dei videogiochi?
Comunque l’articolo è questo:
Autodesk Inventor OpenGL to DirectX Evolution
in particolare:
Quali sono i motivi per cui in ambiti diversi dai videogiochi OpenGL invece è piu usato di DirectX?
Principalmente per motivi di compatibilita’ con piattaforme diverse (Linux, Mac).
ah ok, come immaginavo allora!
Sono uno sviluppatore si software di automazione industriale, per il quale uso OpenGL.
Non conosco il settore dei videogiochi neanche come utente, ma mi pare che tra i computer più usati per i videogiochi c’è la Playstation.
Dalla discussione risulta che tutti i videogiochi adesso usano DirectX e che DirectX esiste solo per il sistema operativo Windows. Ne deduco che sulle Playstation viene caricato Windows. Strano!
Per quanto riguarda le API di Windows e OpenGL, conosco bene la programmazione ad oggetti e posso dire che l’API di OpenGL non e per niente orientata ad oggetti, mentgre l’API di Windows lo e’ solo parzialmente.
Per esempio, nella chiamata openGL “glEnable(GL_BLEND)” e nella chiamata Windows “GetCurrentDirectory(nBufferLength, lpBuffer)” non c’e’ in ballo nessun oggetto.
Infine, mi interesserebbe avere informazioni sulla diffusione di DirectX e di OpenGL in ambito industriale (CAD/CAM).
Dal contesto mi sembra evidente che l’argomento sia lo sviluppo di videogiochi su Windows.
Inoltre prendendo anche le console come riferimento, c’è da dire che la PlayStation 3 espone le OpenGL ES, e inoltre ha una quota di mercato inferiore a quella della XBox360, che espone invece delle particolari versioni di DirectX (un misto fra le 9 e le 10; la PS3 è, invece, ferma alle equivalenti delle 9).
@Carlo Milanesi
come ha detto Cesare anche per Xbox 360 si usano delle API assimiliabili alle Direct3D, quindi Direct3D per Windows e Xbox 360 contro PS3 e Wii che usano altro, lui ha ridotto al gioco su Windows ma credo che anche in generale vincano le Direct3D
@Cesare di Mauro
è vero che PS3 espone OpenGL ES però non so quanto siano usate in pratica
http://arsludica.org/2008/08/04/voglio-fare-il-programmatore/comment-page-1/#comment-12182
Per la Wii invece non so neanche se supporta OpenGL