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?
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
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.
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.
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,
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
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.