ich habe nach langer Zeit ein neues Projekt für euch. Nämlich eine PhysX Fluid Simulation die über OpenGL dargestellt wird
PhysX ist eine Physik Engine von NVIDIA und unterstützt Rigid Body Dynamics, Fluid Simulation und etliches mehr. Das SDK ist komplett in C++ geschrieben und kommt ursprünglich von der NVIDIA übernommenen Firma Ageia, bei der PhysX das als reine Hardwarelösung (PPU) gedacht war.
Die Anwendung umfasst Rigid Body Dynamics mit statischen sowie dynamischen Objekten (Cube, Sphere, Capsule) mit aufwendiger Fluid Particles integration, die zur Laufzeit erzeugt werden können. Sie umfalls außerdem mehrere Flüssigkeitsszenarien die über XML Dateien definiert sind und sehr einfach um weitere Erweitert werden können.
Es gibt neben 4 Flüssigkeitstypen (Drop, Wall, Cube, Sphere) noch Flüssigkeitserzeuger (Emitter) und Flüssigkeitsabflüssen (Drain) die ebenfalls in den Szenarien definiert werden.
Die Flüssigkeiten sollen Wasser simulieren, daher sind auch alle Eigenschaften wie z.b. Viskosität und Steifheit sehr niedrig eingestellt. Womöglich ist das noch nicht so optimal, daher sind diese Werte auch in einer XML Scene Datei definiert und können beliebig geändert werden. Allerdings muss man hier aufpassen, denn falsche Werte können zum Absturz der Anwendung führen.
Damit das ganze auch nach was aussieht, werden die Flüssigkeiten über die Technik: Screen Space Fluid Rendering dargestellt und können zur Laufzeit angepasst und gewechselt werden.
Aber am einfachsten ist es wenn ihr die demo einfach ausprobiert und feedback gibt. Über feedback würde ich mich freuen, vor allem interessiert es mich auf welchen Systemen und welchen GPU´s die Anwendung läuft.
Steuerung: - Linke Maustaste gedrückt, Kamera drehen - Rechte Maustaste gedrückt, Kamera Zoom - L, Szenario wechseln - R, Scene zurücksetzten - Space, Actor fallen lassen - 1-7 Actor auswählen (4-7 = Fluid types) - H, GPU Beschleunigung an/aus - W, Wireframe toggling - B, Bounding boxen zeichnen - D, Rigid bodies zeichnen - S, Fluid Rendermodis durchschalten - P, Fluid detaillevel ändern von 100% - 25% (Verringert einfach die FBO Größe) - C, Fluid farbe ändern - O, Pause - K, Emitter ein/ausschalten - T, OSD ein/ausschalten - Q, Simulation Timing beeinflussen - V, Fluid Eigenschaften durchschalten die mit + und - geändert werden können - M, Fluid partikel blur an/aus - Pfeiltasten, Kurzzeitige Beschleunigung für Fluid in die jeweilige Richtung
Download (Win32, benötigt womöglich Shader Model 3.0, Ich empfehle eine NVIDIA Karte der Generation 8 oder höher) Fluid Sandbox 1.7.7
Es gibt eine neue Version, die einen Performanceschub von mind. 50% bringen sollte. Das Rendern der Fluidpartikel wurde umgestellt auf "Spherical Point Sprites", welches übrigens auch der erste Schritt ist SPH Wasser Rendering zu implementieren.
Schaffe damit knapp 60 fps in den ersten 2 Szenarien
Downloadlink von ersten post ist aktuallisiert.
Nebenbei, ich habe das SDK 3.1 getestet und bisher scheint es schlechter zu laufen als 3.0.2. Fast Halbe Performance weniger in dieser Fluid demo trotz GPU Beschleunigung und komischerweise hat sich das Wasser anderst verhalten mit den gleichen einstellungen Und es gibt noch etliche Probleme beim Kompilieren.... Fazit: Ich bleib erstmal bei 3.0.2.
Was ich noch in den griff muss ist die Physik Performance Schwankungen die wohl durch gScene->simulate(1.0f / 60.0f); gScene->fetchResults(true); ausgelöst werden.
Es gibt gute Neuigkeiten, zumindest aus meiner sicht.
Ich habe es geschafft, Screen Space Fluid Rendering zu implementieren und schreib nun einige codeteile um damit es einheitlicher und einfacher ist Post Processing Effekte zu realisieren. Vor allem möchte ich das ganze mehr OpenGL 3.x Konform haben indem ich sämtliche Matrix Befehle ersetzte.
Sobald ich damit fertig bin, gibts ne neue Version die dann auch besser läuft.
Screen Space Fluid Rendering ist implementiert. Jetzt sieht es mehr nach "Flüssigkeit" aus. Zwar noch nicht nach Wasser, da fehlt noch die Transparenz aber schon wesentlich besser.
Da das ganze recht GPU lastig ist, habe ich Detailstufen eingebaut, bei dem das FBO in der Größe zur laufzeit verkleinert kann.
Es gibt auch neue zusätzliche Shortcuts, sind im ersten Post beschrieben.
Bitte probiert die Demo mal aus und postet feedback. Würde gerne wissen wie das bei euch läuft.
Bei mir wenn ich die Anwendung starte dann läufts mit knapp 30 fps, pack ich nochmal ein block partikel dazu, dann sinds weniger als 20 fps. (GTX 580M)
Es gibt eine neue Version der PhysX Fluid Simulation demo - unbennant in Fluid Sandbox. Habe einiges an Zeit investiert um das Wasser schöner zu machen =)
Es sieht nun richtig gut, durchsichtig mit Farbe oder einfach nur Klar.
Habe ebenfalls alle Shader überarbeitet und optimiert wo es nur geht. (Doppelte Performance)
Das ist noch nicht alles, man kann nun ziemlich viel über XML Dateien konfigurieren. Man kann auch eigene Szenarien bauen die im XML Format abgelegt werden und diese dann ausprobieren.
In den Szenarien XMLs kann man unlimitiert - Statische oder Dynamische Aktoren (Würfel, Kugel) mit entsprechenden Eigenschaften einbauen - Fluid partikel (Blob, Wall, Drop) mit entsprechenden Eigenschaften einbauen
In der Szene XML kann man die Fluid farben verändern und neue hinzufügen, sowie SPH Eigenschaften verändern.
und vieles weitere konfigurieren.
Im "docs" ordner liegen liegen die XML Schemas wie die XML Dateien aufgebaut ist (Alles relativ simpel). Ich freue mich über jedes selbstgebaute Szenario das ihr mir zur verfügung stellt. Falls ihr fragen dazu habt, einfach feedback posten.
Ich habe ein Video erstellt für alle bei denen es nicht läuft.
Werde doch nochmal versuchen die Demo auf non NVidia Rechner zum laufen zu bringen. Hab hier noch nen I5 2500K mit Intel HD3000... das läuft da bestimmt...mit 0,1 fps.
Habe mal auf die schnelle das ganze auf meinem i5 2500k laufen lassen mit der integrierten Intel HD 3000 und es lief nachdem ich ein paar fixes in den Shadern gemacht habe
Lief erstaunlich gut für ne Intel GPU, gestartet und satte 7 FPS =) Natürlich kein vergleich zu meiner GTX 580M, aber immerhin.
Daher habe ich auch gleich ne Version 1.3.1 hochgeladen, das diese fixes enthält das auch die "Weiß" Fehler beheben sollte. Link ist der gleiche.
Habe eine neue Version hochgeladen. Nutzt nun PhysX SDK 3.1.2 anstatt 3.0.1 und hat ein paar weitere szenarien bekommen. Es gibt nun auch die möglichkeit, Aktoren zu drehen (Rotate), dadurch sind interessante sachen möglich.
Dazu habe ich noch ein paar optimierungen an den Shadern vorgenommen.
Nun kann man auch den Particle Render Factor einstellen und zur laufzeit ändern. Dadurch kann man mit weniger Partikel auch gut aussehendes Wasser machen, was der Performance zu gute kommt. Allerdings sind dann auch die Partikel "Fetter"
Es gibt eine neue version der Fluid Sandbox. Diesmal mit Skybox Rendering und überarbeiteten Wasser. Ebenso hab ich nochmal die Shader überarbeitet und konnte die Performance steigern
Downloadlink, siehe ersten post.
Gruß, Final
Zuletzt geändert von Finalspace am Do Mär 22, 2012 08:06, insgesamt 3-mal geändert.
hier eine neue Version, mit nun hoffentlich funktionierendem Wasser für alle mächtigen GPU´s ^^. Dazu gibt es wieder ein neues Szenario mit netten Fluid Emittern. Habe auch noch an den Fluid Properties geschraubt... ob das jetzt besser ist, sei mal dahin gestellt...
ich bin wieder zurück vom Urlaub und habe ein wenig an der Sandbox gefeilt.
Das Flüssigkeit verhält sich nun endlich wie wasser und sieht nun auch besser aus. Ein paar bugfixes an den Shadern habe ich gemacht und man kann nun auch den Farbabfall der Wasserfarbe zur laufzeit ändern. Habe die Anwendung auch nun auf das PhysX SDK 3.2 aktuallisiert.
Ich hoffe das ganze läuft nun überall, auf meinem Alienware Notebook läuft das auf jedenfall nun auch mit der Intel HD 3000
Der nächste große schritt der Anwendung wird sein, das die Szenarios Polygon basierende Geometry nutzt anstatt Definition von Primitiven. Wann ich das mache, weiß ich allerdings noch nicht da meine Zeit sehr sehr begrenzt ist. Ich hab ja noch nichtmal Diabo 3 durch Was auch sehr wichtig ist, den Hauptperformance-Killer zu beseiten (glutBitmapCharacter durch Texture Fonts zu ersetzten).
Link ist wie immer der gleiche.
Ja und Danke für den DGL Award, das hat mich gefreut
Hab ne neue Version hochgeladen die einige Verbesserungen und ein neues Szenario enthält. Der Partikelradius ist nun abhängig der Partikeldichte, sprich einzeln herumfliegende Partikel sind kleiner. Das wirkt deutlich besser, grad beim Screen Space Fluid Rendering.
es gibt nun heute wieder eine neue version, bei der ich einiges an Feintuning gemacht habe, bzw. mich an dem PhysX Particle Sample orientiert habe was die Fluid Properties angehen. Wenn ihr Performance-Probleme habt und das werden ihr sowieso haben , dann schaltet das OSD ab, das bringt einen guten schub
Die nächste Version wird dann hoffentlich Triangle Mesh Actors enthalten, sowie Heightmaps
Eine Frage hätte ich aber noch an euch:
Was kann ich denn machen, damit die Geometrie, die aktuell noch keine Texturen hat (bis auf die Skybox) nicht mehr so billig aussieht? Es gibt bisher auch nur normales Direktes Licht mit einem fest definiertem Vector. Toll wäre es wenn es ähnlich aussehen könnte wie: http://www.youtube.com/watch?v=-IiRzmfs5aw&feature=related
Mitglieder in diesem Forum: 0 Mitglieder und 11 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.