Quali vantaggi offre OpenGL nudo rispetto a framework / motori a piccoli sviluppatori? [chiuso]


16

Ho notato una tendenza degli sviluppatori indipendenti allontanarsi da framework e motori e passare all'utilizzo di OpenGL nudo o all'uso combinato con SDL / SFML2. Come sviluppatore indipendente, non riesco a vedere cosa OpenGL di basso livello può offrire su motori o framework separati.

La maggior parte dei motori e dei framework decenti offrono le funzionalità di cui hai bisogno e non ti ostacolano mai. Potrebbero anche aprire l'opzione per gestire direttamente OpenGL. Alcuni offrono persino la funzionalità per compilare multipiattaforma!

Comprendo l'aspirazione di imparare cosa sta succedendo sotto il cofano, ma non riesco a vedere alcun vantaggio che OpenGL potrebbe offrire agli sviluppatori indipendenti su motori o framework.

Potresti spiegare il ragionamento alla base della costruzione di giochi da zero usando OpenGL?


Come studente laureato in programmazione di giochi e grafica, posso attestare le complessità dell'apprendimento di OpenGL da zero. Se oggi facessi un gioco indy, userei assolutamente SDL o qualche altra libreria. Ma capisco anche molto di più sulla grafica oggi rispetto a quando ho iniziato i miei studi, l'apprendimento di un'API mi ha aiutato molto a capire come funzionano le GPU in generale e come interagiscono hardware e software. Ma per realizzare un prodotto commerciale, a questo punto vorrei assolutamente utilizzare una libreria di terze parti.
Filippo,

Risposte:


23

Questa è in gran parte una domanda / risposta basata sull'opinione, quindi in realtà non è necessariamente ideale per questa piattaforma, ma comunque:

Perché nessun framework / motore come indie? Ecco i miei due centesimi:

  • Mancanza di budget: questo è probabilmente il punto più grande per la maggior parte degli sviluppatori piccoli / indipendenti. Molti framework o motori non ti permetteranno di pubblicare il tuo prodotto senza acquistare una versione più costosa (supponendo che sia disponibile una versione economica o gratuita) e / o pagare royalties, cosa che dovrai sempre considerare per i piccoli progetti. A volte devi anche pagare una volta per piattaforma.
  • Complessità: la maggior parte dei motori o dei framework rientra in una delle due categorie:
    • Sono entrambi molto limitati per un genere speciale ( RPG Maker è un tipico esempio).
    • O forse semplicemente troppo generico con molte cose che molto probabilmente non userete comunque (come Unity ).
  • Codice proprietario: la maggior parte dei motori non è open source e per ottenere la fonte effettiva dovrai pagare ancora di più (se disponibile). Senza l'effettivo codice sorgente il porting su altre piattaforme può essere difficile o addirittura impossibile (di nuovo, RPG Maker sarebbe un esempio perfetto).
  • Clunkyness: questa è la mia opinione personale, ma almeno per me questa è spesso un'enorme delusione considerando i motori e le strutture premade, specialmente quando stai costruendo solo un piccolo gioco. Chi vuole giocare a un gioco di break-break di dimensioni pari a 200 KB ma con un tempo di esecuzione di 50 MB?
  • Scelta della lingua: alcuni motori e framework non forniscono librerie da utilizzare nel proprio codice. Forniscono invece un framework o un runtime che utilizzerà il proprio linguaggio di scripting o un linguaggio impostato (come Javascript o C #). Se stai scrivendo il tuo motore personalizzato, sei libero di usare qualsiasi lingua tu abbia scelto.
  • Protezione del tuo lavoro: se stai utilizzando un motore premade o un framwork, è molto probabile che altri abbiano un tempo molto più semplice per modificare o decompilare il tuo codice o risorse, cosa che potresti voler evitare (anche se è solo per mantenere il tuo punteggio più alto pulito). Il codice personalizzato e la gestione delle risorse aggiungono un ostacolo molto più grande da affrontare, specialmente se compilato in codice nativo.
  • Branding: questo potrebbe essere minore per molti, ma alcuni motori e framework ti costringono a mostrare il loro logo o forse persino gli annunci, essenzialmente prendendo le tue libertà per scegliere chi / cosa promuovere. Naturalmente, ciò dipende spesso dalla licenza effettiva, dalle tasse di licenza, ecc.
  • Incompatibilità con le licenze: questo è qualcosa che molti non considerano nemmeno quando si sceglie un motore, ma a seconda di ciò che si desidera fare, questo potrebbe essere un fattore importante. Anche se acquisti un motore, potresti non essere autorizzato a divulgare fonti o materiali correlati. Qualcosa del genere potrebbe rendere impossibile il modding, anche se desideri che gli utenti possano farlo. Prendi come esempio il motore Source di Valve ( Half-Life 2 , Team Fortress 2 , ecc.): Stanno permettendo ai modder di usare il loro motore per i loro progetti. Se questi giochi fossero basati su (ad esempio) Unreal Engine, ciò non sarebbe possibile, a causa delle limitazioni implicite nei termini della licenza.

11
più un'altra cosa: una volta che impari openGL, lo sai. Non è necessario riapprenderlo in ogni lingua o apprendere come un framework / motore specifico desidera implementarlo per ogni nuovo framework / motore. Questo porta anche a una maggiore portabilità
siamo il

Non è il problema più comune, è possibile che nel motore o nella struttura l'idea non fosse possibile o sarebbe troppo complicata per (es:
minecraft

@akaltar: Vero, ma allo stesso tempo mi aspetto che qualcuno scelga un motore adatto all'obiettivo previsto. Ad esempio, non utilizzare un motore 3D per un gioco 2D e viceversa.
Mario,

9

La maggior parte dei motori e dei framework decenti offrono le funzionalità di cui hai bisogno e non ti ostacolano mai.

Fanno? Dipende piuttosto da cosa stai facendo, graficamente parlando.

Per molti tipi di giochi, ci sono risposte standard per domande grafiche. Il gioco 2D medio, ad esempio, può essere gestito bene con l'abilità 2D, ad esempio XNA / MonoGame. Sono solo gli sprite, che possono venire in lotti per il terreno, possono essere ruotati e così via.

Ma cosa succede se il vostro gioco usato per essere il gioco medio 2D, poi si legge su qualche tecnica fresca, come l'utilizzo di una mappa di altezza per costruire un impostore che ha l'effetto di profondità rispetto allo schermo. E tu vuoi farlo.

Ora stai impiegando una mappatura normale e forse anche una mappatura di parallasse. Tutto nello stesso contesto di "rendering sprite", ma che richiede più di un sacco di motori 2D puri in grado di gestire. Nello specifico, richiede una "sprite blitting" multi-strutturata, che non è qualcosa che molti motori 2D possono fare.

Cosa fai se il tuo motore non riesce ad adattarsi a te? Ciò significa che devi fare più passaggi, uno per il colore e uno per l'illuminazione tramite una normale mappa. Ma ciò non funziona, perché è necessario il campo di altezza della mappa normale per utilizzare la mappatura di parallasse nella ricerca del colore. E ora? Hai bisogno dell'alfa per fare trasparenza, quindi non puoi rubare l'alfa. E il motore non supporta i multitexture.

Quindi devi scegliere una delle seguenti opzioni:

  1. Abbandona l'idea. Ciò significa che il tuo gioco è funzionalmente limitato dal tuo motore.
  2. Hack il motore per avere multitexture. Supponendo che tu abbia accesso al codice sorgente, ora lo stai prendendo in giro per cercare il codice di qualcun altro. Questo significa anche che è necessario mantenerlo e non romperlo con il tuo inciampare.
  3. Fai il meglio che puoi, entro i limiti del motore. Quindi puoi ottenere la parallasse sulle mappe normali, ma non sui colori. Potrebbe non essere esattamente quello che volevi, ma è meglio di niente.

Ad esempio, prendi Geometry Wars. La maggior parte dei motori 2D farebbe schifo a questo tipo di elementi visivi, dal momento che la maggior parte di essi è costruita attorno al disegno di sprite, non a linee. È un gioco che richiede un tipo di renderer molto specializzato.

Alla fine della giornata, devi assumerti la responsabilità degli elementi del tuo gioco che sono importanti per le esigenze del tuo gioco. Se l'aspetto visivo del tuo gioco è sviluppato principalmente dallo stile artistico delle immagini e dei modelli che usi, piuttosto che da effetti specifici, allora usare una soluzione preconfezionata va bene. Ma se lo stile di visualizzazione del tuo gioco è definito in modo significativo dal codice di rendering personalizzato, è probabile che un motore standard possa diventare un serio limite se decidi di fare cose fuori dagli schemi.

Inoltre, c'è un problema molto pratico: non tutti i motori di gioco sono ugualmente portatili.

Con il recente aumento delle piattaforme mobili, il mercato dei giochi si estende su numerosi sistemi operativi e dispositivi di interfaccia utente. Non tutti i motori funzionano su tutti i dispositivi. E se il tuo motore non funziona su una piattaforma, non avrai sicuramente il tempo di farlo funzionare su una piattaforma . Dopotutto, ecco perché hai usato un motore in primo luogo, giusto?

Se per te è importante che il tuo gioco funzioni su una particolare piattaforma, allora devi assumertene di nuovo la responsabilità. E il modo "più semplice" per garantire il successo è farlo da soli. Costruire un motore in grado di funzionare su più piattaforme, magari impiegando framework specifici per piattaforme più semplici dove necessario per gestire alcuni dettagli di basso livello. In questo modo, se si rompe, è il tuo codice; sei la persona migliore per poterlo riparare.


Mi piace la tua risposta, ma trovo molto strano che tu abbia scelto XNA come esempio. Non soffre di nessuno degli svantaggi che menzioni, tranne forse la portabilità.
Seth Battin,
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.