Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 14, 2025 21:56

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Partikel Engine > CUDA / PhysicsX
BeitragVerfasst: Sa Dez 10, 2011 18:33 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moinsen,
ich arbeite grad an meiner Partikelengine für Wasserfontänen... Hier habe ich bis zu 1000 Emitter uns insgesamt schonmal mehr als 500.000 Partikel als Pointsprites zu rendern.. Aktuell habe ich die Berechnung der Physik auf mehrere Threads ausgelagert.. somit bekomm ich auf einem i7 3,2Ghz ca 250.000 Partikel mit ca 25fps gerendert.. Doch das Ziel sind mehr als 1mio partikel.. Daher mach ich mir grad n Konzept um eine GPU PartikelEngine dafür zu bauen.. Problem sind nur irgendwie die vielen Emitter.. Nun frag ich mich ob ich irgendwie CUDA oder PhysicsX verwenden kann, bzw was können die dinger?

Grüße
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Dez 10, 2011 20:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also du kannst natürlich CUDA benutzen, legst dich damit aber auf Nvidia-Grafikkarten fest. PhysX ist ebenfalls Nvidia. Vom Prinzip ist CUDA nur einene Möglichkeit bequemer die Fähigkeiten der Grafikkarte für beliebige Berechnungen zu benutzen. Ich habe mir sagen lassen, dass man das wohl in einem Arbeitstag lernen kann, selbst genutzt habe ich es noch nicht.

Alternative, da du GLSL ja schon kannst:
Im Wiki findet sich ein längerer Artikel zur Nutzung von Geometryshader und Transformfeedback um ein Partikelsystem zu bauen. Hier reichen normale GLSL-Shader, d.h. in der Theorie läuft das auch auf ATI.
http://wiki.delphigl.com/index.php/GLSL_Partikel_2

Es gibt auch noch einen älteren Artikel für ältere Hardware:
http://wiki.delphigl.com/index.php/GLSL_Partikel
Hier wird der Fragmentshader und ein FBO mit MRT genutzt.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Dez 11, 2011 19:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
alternativ gäbe es noch opencl, ist so ziehmlich das gleiche wie Cuda nur halt für eine breitere Palette an Hardware...

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Dez 12, 2011 11:03 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
OpenCL hört sich interessant an.. Aber soweit ich das verstanden hab läuft das auf einer ganz anderen Sprache oder? Gibts da irgendwo n Tutorial für Delphi?
Ja die Partikel Tuts hab ich mir angesehen und grübel aktuell noch drüber...

Bin mir noch nicht ganz sicher wie ich das machen soll...
Ich hab ja hunderte Emitter.. Da ist also die anzahl der Partikel dynamisch.. ich könnte auch ein riesen VBO bzw TBO erstellen aber dann hab ich einen riesen overhead obwohl vieleicht nur 1000 Partikel sichtbar sind.. Ich bräuchte ja einmal ein vec3 TBO für Partikelpositionen und einen für richtung inkl. Velocity.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Dez 12, 2011 22:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ich hab ja hunderte Emitter.. Da ist also die anzahl der Partikel dynamisch.. ich könnte auch ein riesen VBO bzw TBO erstellen aber dann hab ich einen riesen overhead obwohl vieleicht nur 1000 Partikel sichtbar sind..

Ob du einen oder hundert Emitter hast ist völlig egal...die Partikel spawnen einfach nur an einer anderen Position. Bei dem ersten Tutorial (dem mit dem FBO) ist es tatsächlich schwierig eine dynamische Anzahl von Partikeln zu haben. Bei dem Ansatz mit Transform-Feeback spielt dies aber keine Rolle. Unbenutzte Partikel benötigen nur Speicher, keine Rechenleistung. Das Transform-Feedback fasst die aktiven Partikel einfach immer am Anfang des Buffers zusammen und du kannst leicht auslesen wie viele Partikel tatsächlich aktiv sind und nur diesen Teil des Buffers verarbeiten.

Edit: Ja, OpenGL und CUDA sind jeweils eigene Sprachen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Dez 13, 2011 08:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Thmfrnk hat geschrieben:
OpenCL hört sich interessant an.. Aber soweit ich das verstanden hab läuft das auf einer ganz anderen Sprache oder? Gibts da irgendwo n Tutorial für Delphi?

Code in tutorials lässt sich eigentlich genauso schön übersetzen wie bei OpenGL ansonsten gibts im Netz (sogar hier im Forum->Projekte) einige Beispiele für Delphi,

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Dez 15, 2011 08:27 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
also ich hab jetzt mal versucht einen teil der Partikel auf der CPU mit der alten methode zu rechnen und dann im Geometryshader weitere Partikel hinzuzufügen.. Ich hab jetzt bei 50.000 partikel und jeweils 10 weitere im GeoShader.. also insgesamt 0,5mio. hab ich konstant 30fps. Und sogar insgesamt 2mio partikel lassen sich noch mit 25frames berechnen... Echt geile Sache mit dem Geometry Shader.. Ich werd mich dann mal an das Transformfeedback machen ;)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]