Shader a funzione fissa vs: quale per principianti?


16

Attualmente sto andando al college per l'informatica. Anche se ho intenzione di utilizzare un motore esistente ad un certo punto per creare un piccolo gioco, il mio obiettivo in questo momento è quello di imparare i fondamenti: vale a dire la programmazione 3D. Ho già fatto alcune ricerche sulla scelta tra DirectX e OpenGL, e il sentimento generale che ne è derivato è stato che, sia che tu scelga OpenGL o DirectX come piattaforma per le ruote di allenamento, molte delle conoscenze sono trasferibili sull'altra piattaforma . Pertanto, poiché OpenGL è supportato da più sistemi (probabilmente una ragione sciocca per scegliere cosa imparare), ho deciso che imparerò prima OpenGL.

Dopo aver preso la decisione di imparare OpenGL, ho fatto ulteriori ricerche e ho scoperto una dicotomia che in qualche modo non ero a conoscenza di tutto questo tempo: OpenGL a funzione fissa contro OpenGL moderno programmabile basato su shader. All'inizio, ho pensato che fosse una scelta ovvia che avrei dovuto scegliere di imparare OpenGL basato su shader poiché è quello che è più comunemente usato oggi nel settore. Tuttavia, mi sono imbattuto nella famosissima programmazione di Learning Modern 3D Graphics di Jason L. McKesson, che si trova qui: http://www.arcsynthesis.org/gltut/

Ho letto i bit introduttivi e nella sezione "Informazioni su questo libro", l'autore afferma:

"In primo luogo, gran parte di ciò che viene appreso con questo approccio deve essere inevitabilmente abbandonato quando l'utente incontra un problema di grafica che deve essere risolto con la programmabilità. La programmabilità cancella quasi tutta la pipeline di funzioni fisse, quindi la conoscenza non si trasferisce facilmente."

ma allo stesso tempo sostiene anche che la funzionalità fissa fornisce una curva di apprendimento più semplice e immediata per i principianti affermando:

"È generalmente considerato più semplice insegnare ai programmatori grafici neofiti utilizzando la pipeline a funzioni fisse".

Naturalmente, puoi capire perché potrei essere in conflitto su quale paradigma imparare: passo molto tempo a imparare (e poi a disimparare) i modi della funzionalità fissa o scelgo di iniziare con gli shader? La mia principale preoccupazione è che i moderni shader programmabili in qualche modo richiedano al programmatore di comprendere già la pipeline a funzione fissa, ma dubito che sia così.

TL; DR = In quanto aspirante programmatore di grafica di giochi, è nel mio interesse imparare la programmazione 3D attraverso la funzionalità fissa o la moderna programmazione basata su shader?


Ci sono anche domande simili a questa ...
notlesh,

"ma allo stesso tempo sostiene anche che la funzionalità fissa fornisce una curva di apprendimento più semplice e immediata per i principianti affermando:" Sono curioso. Come fa esattamente questo caso? Perché la citazione dice chiaramente "È generalmente considerata la più semplice ..." (enfasi aggiunta). Come in, può essere considerato vero, ma ciò non significa che sia vero.
Nicol Bolas,

Sì, quello era un modo imbarazzante di formularlo.
Rob Hays,

La pipeline a funzione fissa è stata deprecata in OpenGL e DirectX, quindi non perderei tempo con essa. Gli shader di base sono piuttosto semplici e certamente non più complicati della comprensione sufficiente per far funzionare un contesto di rendering.
3Daveva il

Risposte:


30

Non compro l'argomento secondo cui è più facile iniziare con le cose a funzione fissa. Potrebbe accadere che la funzione fissa ti permetta di fare determinate cose con meno codice - in OpenGL a funzione fissa, ad esempio, puoi ottenere un po 'di illuminazione / ombreggiatura di base facendo glEnable(GL_LIGHTING)alcune chiamate. Il problema è che non appena si desidera qualcosa di leggermente diverso, ad esempio l'illuminazione per pixel anziché l'illuminazione per vertice, è necessario abbandonare completamente le funzioni a funzione fissa e scrivere uno shader per implementare entrambe le funzionalità fisse che si stavano utilizzando prima, più tutto ciò che volevi cambiare.

Sembra che sarebbe più semplice e meno confuso usare gli shader per tutto il tempo. Gli shader hanno bisogno di un po 'più di lavoro di installazione in quanto hai un file sorgente separato che deve essere caricato e compilato, alcune chiamate C in più per cercare e impostare parametri, ecc. Ma una volta che hai uno shader in corso, è la cosa più semplice per codificare alcuni effetti diversi, provare idee diverse, ecc. E non è necessario preoccuparsi di dove sono i limiti del sistema a funzioni fisse e se può o non può fare quello che vuoi; gli shader possono fare tutto il possibile per scrivere codice, modulo i soliti limiti di prestazioni e memoria.


Bene, grazie per la risposta. Molto probabilmente finirò per andare bene per gli shader.
Rob Hays,

3
+1 - è anche un po 'come "Learning C ++" vs "Learning BASIC". Ci vorrà più tempo per imparare il C ++ ma nel lungo periodo avrai imparato di più.
Jonathan Dickinson,

3
Vorrei raccomandare opengl-tutorial.org . Il sito spiega le basi abbastanza bene e usa solo shader.
Exilyth,


2

In secondo luogo, vado dritto per gli shader. Non è davvero che molto più difficile da impostare, e quando si passa che primo ostacolo si hanno pieni poteri a portata di mano.

Più precisamente, scoprirai che la programmazione degli shader si avvicina di più alle equazioni matematiche che vedi nei libri e nelle lezioni di grafica al college.


0

Suggerirei di utilizzare la pipeline a funzione fissa come spina dorsale del tuo programma. Trovo che sia più facile far apparire qualcosa usando invece di puramente shader. Quindi, quando sai di non aver incasinato i vertici o le normali, puoi lentamente ma sicuramente avanzare nel mondo dell'ombreggiatura.

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.