Per i giochi 2D, c'è qualche motivo per NON utilizzare un'API 3D come Direct3D o OpenGL?


20

Sono fuori dallo sviluppo di giochi per hobby da un po 'di tempo ormai. Quando l'ho fatto, la maggior parte delle persone utilizzava Direct Draw per creare giochi 2D. Quando ho smesso, la gente diceva che OpenGL o Direct3D con una proiezione ortogonale erano la strada da percorrere.

Sto pensando di tornare alla creazione di giochi 2D, in particolare sul cellulare ma forse anche sulla piattaforma XNA. Per realizzare qualcosa usando OpenGL avrei una piccola curva di apprendimento (si spera) per acclimatarmi allo sviluppo 3D.

C'è qualche motivo per ignorarlo e invece lavorare con un framework 2D in cui ho solo un buffer frame Larghezza x Altezza che devo riempire di pixel?


Questa domanda è in realtà sbagliata ... Voglio dire: Direct3D e OpenGL non sono davvero API 3D, vero? Stanno offrendo l'accelerazione hardware, ma sia in 2D che in 3D. C'è una leggera differenza lì.
jacmoe,

Risposte:


20

Dovresti assolutamente usare qualcosa che utilizza un renderer 3D sul backend. Ma nel tuo codice di livello superiore, non dovresti nemmeno vedere l'asse Z. Tutto ciò dovrebbe essere sottratto ai livelli inferiori. Se stai manipolando direttamente i pixel, probabilmente stai facendo qualcosa di sbagliato.

Per i miei giochi, ho creato una serie di classi per gestire oggetti 2D. La mia logica di gioco riguardava solo le coordinate xey. Le mie lezioni hanno anche gestito cose come rotazione, ridimensionamento, metodi di fusione, ecc. Ecc.

Naturalmente, ci sono anche librerie 2D esistenti che puoi usare anche: Cocos2D è popolare su iPhone. La maggior parte, se non tutte, di queste librerie sarà costruita sulle API 3D di livello inferiore in modo che traggano vantaggio dall'accelerazione disponibile.


Sarei interessato a sapere come xna gestisce la 2d api dietro le quinte
Iain,

5
Alla fine è tutto in 3D. Spritebatch, il cavallo di lavoro per il rendering 2D, è un effetto shader.
drxzcl,

+1 per il disaccoppiamento dell'interfaccia dall'implementazione.
Steve S

@Iain Ecco un'implementazione XNA in DirectX11 scritta dagli autori di XNA xnatoolkit.codeplex.com .
ClassicThunder,

8

C'è un motivo per non usare l'API 3D.

Solo i computer in NA, nell'UE nord-occidentale e in Giappone li supportano ...

Vivo in Brasile, ad esempio, il mio computer gemello è nuovo, ha un processore multi-core, diversi GB di RAM, eppure non esegue giochi OpenGL.

Ad esempio, posso solo giocare a Dwarf Fortress (uso OpenGL per il rendering di grafica ASCII) sul mio computer, su qualsiasi altro computer trovo che scorra lentamente.

E questo non è un problema solo con il Brasile, ho chiesto alle persone in giro, ed è comune in diversi luoghi del mondo ... La popolazione che possiede effettivamente schede compatibili OpenGL o Direct3D è una minoranza ...

Solo che questa minoranza ottiene più attenzione dalle aziende ...

Ma se stai prendendo di mira solo questi mercati "tradizionali" (NA, Northwest EU, JP), allora provaci!

EDIT per questi downvoting: ovviamente non sei d'accordo, quindi, hai PROVA che NOONE spedisce più computer con chip VIA o SIS scadenti (o anche altri produttori sconosciuti o peggiori) con nessuno o solo supporto OpenGL 1.0?

Ho DUE macchine del genere a casa mia e sono nuove (entrambe hanno più di un core, entrambe hanno una RAM da 2 GB, entrambe hanno una frequenza di clock superiore a 2 GHz ...)

La mia università ha 200 macchine del genere, anche alcune costruite da Dell.

È chiaramente semplice, le GPU sono costose (anche quelle scadenti di Intel), e nei mercati poveri, è un lusso, le persone che acquistano macchine per eseguire MS Word e leggono le e-mail non compreranno una macchina con un chip grafico decente quando possono comprarne uno che costa 50 USD in meno, specialmente quando 50 USD è ciò che la maggior parte delle persone deve comprare cibo per un mese intero.

PER FAVORE, non venire qui dicendo che sto dicendo BS, se non hai mai visitato un paese del terzo mondo, e inoltre, non dire che le persone del paese del terzo mondo non giocano, fanno molto, Osmos i post degli sviluppatori sul lancio della loro versione in Linux, indicavano che un sacco di traffico in entrata (in realtà, la maggior parte di esso) proveniva dalla Russia, chiaramente perché quelle persone di solito sono ignorate.

Qui in Brasile, il gioco più popolare è Counter-Strike, che funziona in modalità Software ... Alcune Lan-House hanno solo il 10% delle macchine con GPU, anche quelle grandi con 200 o addirittura 300 stazioni ...

Non avrei dovuto pubblicare post su questo, sapevo che avrebbe attirato voti negativi, ho ottenuto la perdita gratuita di punti per la pubblicazione di questo, ogni volta che spiego perché l'altro mio gioco utilizza Allegro 4.4 anziché 5.0 perché 5.0 non supporta Direct Draw o modalità software Ricevo molte critiche da molte persone che dicono che sono una specie di bugiardo o che sono stupido nel dire questa verità sull'effettiva disponibilità dell'accelerazione OpenGL.

EDIT 2: Per poter giocare e sviluppare giochi con OpenGL, ho dovuto chiedere ai miei genitori e ad altre persone di comprarmi una GeForce 8600 (quella era la carta più economica che ho trovato che poteva ancora eseguire Mass Effect 1 e altri UT3 -gine games), mi hanno comprato uno, ma ora sono diversi anni senza mai più ricevere altri regali, nemmeno regali di compleanno, a causa di quanto è costato, e spero che questa carta funzioni per più di 3 o 4 anni ...

EDIT 3:
Un esempio pratico: Eletronic Arts ha creato un nuovo client per Ultima Online che utilizza l'accelerazione 3D per la sua grafica 2D ... Risultato: molti giocatori si lamentano di framerati ridicolmente bassi, e EA si arrende nella sua decisione di imporre l'uso di il nuovo client (ora è permesso rimanere usando quello vecchio)

EDIT 4 nel 2015: questa risposta sarà lasciata qui principalmente come artefatto storico, attualmente la quantità di computer con chip estremamente scadenti è bassa anche nei paesi del terzo mondo, esistono ancora, specialmente nei computer per ufficio, ma non lo sono più comune, non credo che valga la pena lavorare con le API in modalità software, le API basate su OpenGL sono la strada da percorrere ora.


3
Non ci sono chip là fuori che non supportano il 3D oggi. Molto probabilmente devi solo aggiornare i driver, perché quelli forniti da Windows non hanno il supporto OpenGL. La GPU di merda più comune in circolazione è roba Intel GMA e anche quella ha un supporto OpenGl di base.
Axel Gneiting,

1
Ripetizione ancora: i chip qui sono PEGGIORI di quelli Intel GMA. E sì, alcuni driver modificati risolvono il problema, ma non puoi aspettarti che gli utenti lo sappiano.
speeder,

Un esempio pratico: Eletronic Arts ha creato un nuovo client per Ultima Online che utilizza l'accelerazione 3D per la sua grafica 2D ... Risultato: molti giocatori si lamentano di framerate ridicolmente bassi e EA si arrende nella sua decisione di imporre l'uso del nuovo client (ora è permesso rimanere usando quello vecchio)
speeder

1
Il nuovo client è del 2008, quello che dice la mia storia è: People nel 2008, non mi è piaciuto un client OpenGL e ha ripreso a utilizzare quello del 1997.
speeder,

1
Solo perché le persone non aggiornano i loro driver non significa che i loro computer non supportano OpenGL e Direct3D. L'OP dovrebbe semplicemente verificare la compatibilità OpenGL / Direct3D. Se non è lì, dovrebbe dire all'utente di aggiornare i suoi driver. Funzionerà nel 98,6% dei casi, probabilmente anche nel secondo e terzo mondo. Scherzi a parte, puoi collegarti a un computer che puoi acquistare privo del supporto OpenGL / Direct3D?
Avi,

3

No, non c'è. Otterrai effetti migliori e rendering più veloce utilizzando un renderer 3d. Ad esempio, ecco un gioco 2d che ho realizzato poche settimane fa (in un fine settimana) - gli effetti orb si basano pesantemente sugli shader 3d, anche se per molti versi sono effetti 2d. Allo stesso modo, ho fatto ampio uso della tecnologia di rendering disponibile per questo gioco : ci sono tre o quattro diversi effetti di pixel shader in corso lì, che mi hanno permesso di sviluppare più velocemente e renderlo più carino.

Abbraccia il 3d e adoralo, ma adoralo con un asse in meno.


2

Le API 3D sono generalmente la strada da percorrere. Le GPU di oggi sono progettate per il rendering di grafica 3D, quindi ti garantiscono prestazioni abbastanza solide. E come ha detto ZorbaTHut, seguire il percorso 3D ti consente di sfruttare cose come i pixel shader.

In realtà non ci sono più molte API 2D là fuori. DirectDraw è stato deprecato e la maggior parte delle librerie basate su 2D / vettoriale là fuori utilizzano OpenGL o Direct3D per eseguire comunque il rendering. Anche i moderni toolkit dell'interfaccia utente stanno sfruttando le API 3D per eseguire il rendering e la composizione. Prendiamo ad esempio WPF (l'ultimo framework dell'interfaccia utente di Microsoft): utilizza Direct3D per il rendering.


2

C'è ancora un numero sorprendente di macchine davvero vecchie là fuori con accelerazione 3d scadente / inesistente e driver che non sono mai stati aggiornati, in modo tale che l'utilizzo di DirectDraw sarà ancora molto più veloce di OpenGL o D3D. L'ho sperimentato mentre lavoravo a un gioco multiplayer in 2D che ha circa 10 anni quando ho provato a scrivere un nuovo backend di rendering in OpenGL per supportare altre piattaforme. Molti giocatori hanno riferito che la modalità OpenGL non era giocabile a causa dei frame rate bassi. Concordo anche con il poster brasiliano che questo è più comune al di fuori degli Stati Uniti e dell'Europa, ma è ancora vero anche in quei luoghi.

Se stai prendendo di mira telefoni cellulari o XNA, usa sicuramente il 3D. Ma se vuoi creare un gioco che funziona su qualsiasi PC, ovunque, direi che segui DDraw.


1

L'unica cosa che mi viene in mente è che l'uso di un'API 3D su una 2D aggiunge una certa complessità di base. Almeno in OpenGL, devi caricare e gestire le trame e quando le disegni devi ottenere la geometria giusta. Un layer wrapper risolve questi problemi.

Detto questo, l'utilizzo di un back-end grafico 3D sembra avere più aspetti positivi che negativi, quindi se me lo chiedi, ne vale la pena.


1

Se il tuo gioco è abbastanza semplice e vuoi che funzioni bene su macchine di fascia bassa, in particolare netbook e laptop più vecchi (senza accelerazione 3D o molto minimale - grafica integrata Intel meno recente, ecc.), Vale comunque la pena considerare un puro Approccio framebuffer 2D

Se sei felice che il gioco richieda almeno una scheda / chip ATi / NVidia di fascia bassa, l'utilizzo di un'API 3D ti consentirà di fare molte cose interessanti (fusione alfa, ridimensionamento / rotazione, ecc.) Che sarebbe difficile fare bene / in modo efficiente in un semplice renderer software.

Inoltre, tieni presente che alcune cose che sono molto semplici in "puro 2D" diventano più interessanti quando è coinvolto l'hardware 3D (e il filtro bilaterale / alfa blending). Comprendi il concetto di alfa premoltiplicata. E pensa anche, ad esempio, a come gestiresti le giunture tra le tessere in una tessera 2D se desideri una vista zoomabile / ruotabile.

Ricorda inoltre che fillrate è limitato. Ed è sorprendentemente facile raggiungere questi limiti in 2D. Potresti non avere molti poligoni, ma se vuoi un sacco di strati di parallasse, particelle o effetti di post-miscelazione alfa, puoi facilmente finire col riempire tutti i pixel di un gioco 3D abbastanza di fascia alta.

Ma in generale, l'hardware 3D è fantastico e la fusione additiva è il tuo amico :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.