Volumetrische Wolken in OpenGL



  • Hallo,
    ich suche nach einem effizienten Verfahren um mit OpenGL (und vielleicht auch OpenCL) volumetrische Wolken zu erzeugen.
    Meine Idee war, dass ich erstmal mit der 3D-Perlin-Noise einen Kasten voller Punkte erzeuge, wobei jeder Punkt einen Alphawert erhält.
    Erste Frage hier, macht das Sinn, das Ergebnis der Noisefunktion als Alphawert zu benutzen? Oder sollte man das Ergebnis irgendwie anders weiterbenutzen?
    Da ich schon beim Erzeugen der Punktwolke nicht ganz sicher bin, sind meine weiteren Idee auch eher wage:
    Um die Punktwolke zu rendern kann ich z.B. für jeden Punkt einen Billboard-Partikel erzeugen, und diesen dann zeichnen. Allerdings muss ich dann sehr viele Partikel zeichnen (wahrscheinlich nicht sehr effizient) und außerdem stelle ich mir hier die Frage mit der Beleuchtung. Bei dieser Methode habe ich keine Normalenvektoren, wie soll ich dann über die Farbe des Partikels entscheiden?
    Bei dem Versuch von dieser Idee wegzukommen habe ich von von iso-surfaces gelesen. Allerdings spuckt google hier nur wenige nützliche Informationen aus. Wie kann ich diese iso-surfaces berechenen und zeichnen (ich habe es so verstanden, dass aus einer Wolke die Oberfläche berechnet wird, ist das so richtig?)

    Oder sind meine Ideen alle Mumpitz und es gibt eine viel bessere Methode um volumetrische Wolken zu erzeugen? 🤡



  • Ich schätze das macht man wohl normalerweise mit Ray Marching.
    Google: ray marching clouds



  • Ray Marching sieht sehr interessant aus und liefert anscheindend gute Ergebnisse. Allerdings sieht es so aus, als wäre die Performance dieser Methode nicht die Beste. Alle Paper und Demos die ich gesehen habe, sprechen von ca. 30ms die es braucht um eine genügend hochaufgelöste Box zu rendern.
    Da ich aber neben den Wolken auch noch andere Sachen rendern will und das ganze idealerweise auch noch in 60 FPS, kommt diese Methode so nicht für mich in Frage.
    Gibt es da einige Tricks, welche ich übersehen habe, welche bei einem geringen Qualitätsverlust eine bessere Performance bieten?
    Alternativ sieht man ja in vielen Simulationen und Games auch immer volumetrische wirkende Wolken am Himmel. Welche Methoden werden denn da verwendet und wie "gefaked" sind diese Wolken dann? 🙂



  • Ich bin kein Spieleentwickler und hab da auch nicht genügend Einblick um dir deine Fragen zu beantworten.

    Meine "ray marching clouds" Suche hat allerdings z.B. dashier ausgespuckt, wo es genau darum geht halbwegs realistische Wolken ohne Raymarching zu rendern:
    https://software.intel.com/sites/default/files/managed/5d/d8/HighPerfClouds-HPG2014.pdf


Anmelden zum Antworten