2012-08-07 12 views
11

Sto provando a eseguire 100000 e più particelle. Ho seguito molti tutorial e altri esempi che dimostrano il potere degli shader e OpenCL.(rendering di particelle) Devo imparare lo shader o OpenCL?

In un esempio che ho visto, la posizione delle particelle è stata calcolata in base alla posizione del puntatore del mouse (dispositivo fisico che si tiene con una mano e cursore sullo schermo). La posizione di ogni particella è stata memorizzata come RGB. R essendo x, G y e B, z. E passato a pixel shader. E poi ogni pixel di colore è stato disegnato come posizione della particella in seguito.

Tuttavia mi sono sentito assurdo verso questo approccio.

  • Non è questo approccio o stile di codifica piuttosto da evitare?
  • Non so come utilizzare OpenCL e utilizzare la potenza del multithreading della GPU per indicare direttamente e trasmettere il codice previsto?
+19

+1 per spiegarmi cos'è un mouse per computer. –

+0

@ChristianRau oh dio, all'inizio ti ho pensato a dove scherzare, ma poi l'ho letto. Epic – thecoshman

risposta

13

Non è questo approccio o stile di codifica piuttosto da evitare?

Perché?

L'intero punto di shader è che tu possa essere in grado di fare ciò che vuoi, esprimere in modo più efficace ciò che vuoi fare e consentire a te stesso un maggiore controllo sull'hardware.

Non si dovrebbe mai, sempre aver paura di ri-proporre qualcosa per una funzionalità diversa. Le trame non memorizzano i colori; memorizzano dati, che può essere essere colore, ma può anche essere altre cose. Prima smetterai di pensare a trame come immagini, meglio sarai come programmatore grafico.

La GPU e l'API sono disponibili. Usalo come tu vedi in forma; non permettere come pensi che l'API dovrebbe essere usata per limitarti.

Non so come utilizzare OpenCL e utilizzare la potenza del multithreading della GPU per indicare direttamente e trasmettere il codice previsto?

Ieri, avrei detto "sì". Tuttavia, oggi è stato rilasciato: OpenGL compute shaders.

Il fatto che OpenGL ARB e Khronos abbiano creato questo tipo di shader e così via è un'ammissione tacita che l'interoperabilità OpenCL/OpenGL non è il modo più efficiente di generare dati per scopi di rendering. Dopotutto, se lo fosse, non ci sarebbe bisogno che OpenGL avesse funzionalità di calcolo generalizzate. C'erano 3 versioni di GL 4.x che non fornivano questo. Il fatto che sia qui ora è fondamentalmente l'ARB che dice "Sì, OK, abbiamo bisogno di questo".

Se l'ARB, composto da molte persone che fabbricano l'hardware, pensa che l'interoperabilità CL/GL non sia la strada più veloce da percorrere, allora è abbastanza chiaro che è necessario utilizzare shader di calcolo.

Ovviamente, se stai cercando di fare qualcosa al momento, questo non ti aiuterà; solo NVIDIA ha il supporto shader di calcolo. E anche questo è solo nei driver beta.Ci vorranno molti mesi prima che AMD ottenga il supporto per loro e molti altri prima che il supporto diventi solido e stabile da usare.

Anche così, non sono necessari shader di calcolo per generare dati. Le persone hanno usato transform feedback and geometry shaders to do LOD and frustum culling for instanced rendering. Non aver paura di pensare al di fuori della casella "OpenGL draws stuff".

+1

Grazie mille e non mi aspettavo una spiegazione così dettagliata. <3 <3 <3 Cercherò di concentrarmi sull'apprendimento di più su OpenGL e shader. Ero troppo arrabbiato per pensare fuori dagli schemi. La maggior parte delle volte che ho provato qualcosa che pensavo fosse un approccio intelligente era inadeguato piuttosto contro intuitivo, in altre parole, un cattivo esempio di codice. Quindi penso che da allora ho provato a utilizzare il codice e altre utilità che posso incorporare come previsto. Cercherò di costruire uno shader per il mio progetto di particelle, eppure ho ancora paura per la possibilità di un codice brutto e controintuitivo. È una risposta che ti apre l'occhio dal tuo – BlueBug

+0

che hai detto "Non aver paura di pensare al di fuori della scatola" OpenGL disegna roba "." Mi fa letteralmente friggere per pensare o fare cose da solo. Voglio dire, io tendo a confrontarmi con gli altri, perché so che ci sono persone al di fuori molto meglio e sanno molto nei dettagli. in più ci sono così tanti buoni tutorial e video sulla programmazione grafica che non riesco nemmeno a capire. Di solito mi sento molto piccolo quando si tratta di programmazione. Tutto quello che faccio è per lo più seguire un tutorial o imitare qualcosa che qualcuno ha già creato (illuminazione e altre cose). – BlueBug

+2

è così che abbiamo iniziato tutti, @ user1217203. Vai là fuori e crea qualcosa! –

1

Per simulare le particelle in OpenCL, dovresti provare "Ancora un altro editor di shader"/http://yase.chnk.us/ - elimina tutte le parti più complicate e ti consente di ottenere la codifica degli algoritmi di controllo delle particelle. NEL TUO BROWSER. Niente da scaricare, niente account da creare, basta modificare qualsiasi esempio che trovi. È un esplosione.

https://lotsacode.wordpress.com/2013/04/16/fun-with-particles-yet-another-shader-editor/

Io non sono affiliati con Yase in alcun modo.

Problemi correlati