Überlagern von Grafiken zur Partikelsimulation


7

Wie kann ich Grafiken auf Partikelsimulationen überlagern? Wenn ich zum Beispiel eine Flüssigkeit oder ein Gas mit Tonnen von kleinen Punkten darstelle, wie kann ich diese Punkte wie eine Flüssigkeit oder ein Gas aussehen lassen? Nehmen wir zum Beispiel Nvidia Flex, sie simulieren Flüssigkeiten und Gase mit Tonnen kleiner Punkte, können sie jedoch als realistische Flüssigkeiten und Gase anstelle kleiner Kugeln darstellen.


1
Haben Sie eine geschlossene Oberfläche mit Kontrollpunkten ausprobiert, z. B. Nurbs oder Bspline? oder Freiformverformungsmaterial? Beide werden unter Verwendung eines Punkts beschrieben, aber wenn Sie einen Punkt verschieben, verformen Sie die beschriebene Oberfläche. (In der Zwischenzeit versuche ich mehr Informationen über das Problem zu sammeln). Ich habe sogar an eine konvexe Hülle gedacht, bin mir aber des Ergebnisses nicht sicher, da eine Flüssigkeitsverformung überhaupt nicht konvex sein kann.
user8469759

Antworten:


4

Ich denke, für das Rendern von Gasen besteht der übliche Ansatz darin, jedes Partikel einfach als winzige Scheibe zu rendern. Gase verschmelzen nicht wirklich zu Oberflächen wie Flüssigkeiten, daher sollte dies zu akzeptablen Ergebnissen führen. Sie könnten danach möglicherweise eine leichte Unschärfe auf die Gasschicht auftragen, um sie zu erweichen und die Tatsache zu verbergen, dass sie aus diskreten Elementen besteht.

Flüssigkeiten hingegen neigen dazu, sich zu Tröpfchen und glatten Oberflächen zusammenzuschließen, sodass Sie irgendwie eine Oberfläche aus den Partikeln ableiten müssen. Eine Möglichkeit hierfür ist die Verwendung von Metaballs , die ebenfalls dieses Verhalten aufweisen und an unterschiedliche Flüssigkeiten und Partikeldichten angepasst werden können. Wenn Sie jedes Partikel als Metaball interpretieren, erhalten Sie eine implizite Gleichung, die Ihre Flüssigkeitsoberfläche darstellt. Um diese implizite Oberfläche zu rendern, können Sie sie mit einem Algorithmus wie Marching Tetrahedra in Dreiecke konvertieren oder mit Ray Marching direkt rendern. (Ray-Marschieren kann heutzutage problemlos in Echtzeit in einem Fragment-Shader durchgeführt werden.) Sie können diesen Ansatz auch für Gase verwenden, wenn Sie ein etwas weicheres Aussehen wünschen.


-1

Eine gute Referenz für die Spielphysik ist, dass in diesem Kapitel 4 die grundlegenden frei verformbaren Oberflächen beschrieben werden (nurbs und bspline werden natürlich zitiert und ausreichend gut behandelt). Flüssigkeit und Gase werden stattdessen in Kapitel 5 behandelt (im Grunde genommen leitet der Autor das vereinfachte Modell der Navier-Stokes-Gleichungen ab). geeignet für Echtzeitanwendungen).

Ich denke also, was ich geschrieben habe, um Ihren Beitrag zu kommentieren, war korrekt, dh kombinieren Sie die physikalische Verformung des Punktes, der die Form der Oberfläche steuert, mit einer ffd-Berechnung.

Das Buch, das ich zitiert habe, sollte irgendwo / irgendwie im Web-Quellcode enthalten sein, und selbst zitiert es ein Beispiel für die von mir zitierte Technik. Wenn Sie dies benötigen, lassen Sie es mich für eine genauere Erklärung wissen.


1
Könnten Sie vielleicht Ihre Antwort erweitern, damit sie in sich geschlossen ist? Wenn man es ohne den Link und seinen Inhalt liest, ist die Antwort nicht ganz klar.
Bart

Eigentlich denke ich, dass die "Idee" (nicht die Implementierung) ziemlich klar ist. @Cristian sagte, er habe die Simulation für eine Reihe von Punkten implementiert. Grundsätzlich sollte er die Menge der Punkte berücksichtigen, da sie zu einer verformbaren Oberfläche gehören (dh eine kontinuierliche Oberfläche, die durch eine Reihe diskreter Punkte beschrieben wird). Wenn dann die Punktposition aktualisiert wird, wird die Auch die Oberflächenform wird aktualisiert. Die Effektivität hängt davon ab, was er speziell erreichen möchte, aber ich habe angenommen, dass er eine Art "kontinuierlich" anstelle einer diskreten Punktmenge verwenden möchte.
user8469759

Auch ... ich weiß nicht, warum ich hier keine Formeln verwenden kann ... aber natürlich wären sie für eine detailliertere Erklärung nützlich. Eine physikalisch gute Referenz ist jedoch jedes Buch der rechnergestützten Fluidodynamik. Für die Darstellung der Spielphysik könnten natürlich auch vereinfachte Methoden in der Literatur zu finden sein. Da "Code" selbst von der Umgebung abhängt, die er verwendet, kann er sogar eine vollständige Implementierung im CUDA-Toolkit finden. Ich bin mir bei openCL nicht sicher. Selbst das directX SDK bietet ein Beispiel für eine Flüssigkeitssimulation (insbesondere die letzte Version, aber wahrscheinlich auch diese simuliert auch mit Tonnen von Punkten).
user8469759

3
Mein Verständnis der Frage ist, dass der Autor den Simulationsteil behandelt hat, aber nur nach Visualisierung fragt. Ich denke, es wird sich als ziemlich schwierig erweisen, Sätze von Spline-Patches zu erstellen, die die "Form" des Wassers zufriedenstellend darstellen, und es gibt wenig Details zu dieser Antwort darüber, wie Sie das tun würden.
Yuriks

Viele von uns würden gerne die Möglichkeit sehen, MathJax für Formeln zu verwenden, und viele andere SE-Sites haben es bereits. Alles was wir tun müssen, ist die Notwendigkeit dafür zu demonstrieren. Bei Fragen, die von MathJax profitieren würden, fügen Sie einfach einen Link zu dieser Meta-Antwort hinzu .
Trichoplax
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.