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

Aktuelle Zeit: Mi Jul 16, 2025 02:18

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jun 04, 2014 21:23 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moinsen,

ich habe da mal wieder ein recht exklusives Problem. Ich habe eine recht komplexe Partikelsimulation mit einer großen Anzahl an Emitter. Ich nutze hierzu Transformfeedback und Geometry-Shader für die Physik. Für eine Zusatzfunktion benötige ich jetzt eine Möglichkeit die aktuell durch partikel maximal erreichte Höhe für jeden Emitters herauszubekommen. Zum Aufbau:

Ich habe zwei Pos, Dir und Info Puffer dimensioniert auf max 2mio Partikel, welche in jedem Frame durch den Geometry-Shader gerechnet werden (einmal lesend und einmal schreibend). Dazu habe ich noch einen weiteren "EmitterInfo" Puffer dimensioniert auf Emitteranzahl, dieser wird lediglich für physikparamter genutzt und als TBO reingeladen. Jedes Partikel "weiß" anhand einer ID genau wo es im EmitterInfo Buffer nach seinen Werten suchen muss. Die ID steht dafür in der w-corrd des Pos-buffers.

Die Physik ist nun rel. komplex hier spielen viele faktoren und zufall eine Rolle, also keine Chance die max-höhe irgendwie anders zu berechnen...

Irgendwie müsste ich in parallel auch wieder in meinen EmutterInfo Buffer schreiben können, so könnte ich pro Partikel einfach einmal testen auf Max-Höhe und ggf. überschreiben falls aktueles Partikel höher ist.. Doch ich denke das ist von der Logik (Multi GPU, gleichzeitges schreiben, etc..) nicht möglich..

Aktuell ist mir hier noch keine Lösung eingefallen, ausser vielleicht alle Partikel nach dem Update zurück zur GPU zu hohlen und dort das höhste Partikel zu suchen.. doch ich denke ~500K Partikel und ~500 Emitter dürfte alles zum kentern bringen.. Ich hab dies aktuell schon probiert, doch mir war es bisher noch nichtmal möglich irgendwie wieder aus dem VBO zu lesen.. kommt nur müll bei raus..

Hat hier vielleicht jemand eine Idee?

Grüße
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jun 04, 2014 21:38 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Generell für Partikelsysteme würde ich vielleicht mal auf OpenCL oder auf der neusten Generation auf ComputeShader umsteigen. Damit bist du ein wenig flexibler.
Eine Möglichkeit ohne OpenCL wäre noch SSBOs einzusetzen. Da gibt es zb. auch atomische Min und Max Funktionen die das sehr einfach auf der GPU lösen sollten. Einfach die für jeden Emitter einen Float einrichten und dann für jeden Partikel dessen Y-Wert mit dem Maximieren. Wenn du nicht OpenGL 4.2/4.3 zur Verfügung hast, fürchte ich, dass du das nur OpenCL/CUDA effizient auf der GPU hinbekommst.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.007s | 16 Queries | GZIP : On ]