FastLED FlowFields Animationen

Hi zusammen,

ich habe eine alte Idee ausgegraben und neu umgesetzt.

Das ist jetzt auch direkt als Example in FastLED enthalten.

Es gibt neben der Float-Implementierung (für Teensy 4 oder ESM32S3) auch eine Fixed Point Integer Version für die kleineren Controller die keine FPU haben, also die Arduinos beispielsweise.

Die Animation ist eine Neuauflage von diesem Konzept, welches ich vor 11 Jahren mal gezeigt habe:

Damit kann man u.a. sowas machen

Oder so:

Ich experimentiere auch mit anderen FlowField Methoden, aber es ist noch nicht klar, was davon wirklich Teil von FastLED wird. Sind erstmal nur Experimente zum schauen, ob ich das auch auf kleineren Mikrocontrollern performant hinbekomme.

Beste Grüße in die Runde!

P.S. Ich war lange nicht hier. Ist momentan jemand mit LED Projekten beschäftigt?

Kann man so sagen, also willkommen zurück! Was macht das Drechseln?

ESM32S3 kenne ich nicht. Meinst Du ESP32-S3? Aber hat der eine Fließkommaeinheit? Bin gerade irritiert :thinking:

Ja... ich bastel mir gerade eine "LED Lib".
Allerdings nicht auf deinem Weg, sondern in einer ganz anderen Welt.

Z.B. die Verwendung von LED als Sensoren.
Teils, um die langsamen LDR zu ersetzen.
2 Wege bieten sich da an!

  1. Photospannung, wie Solarzelle
  2. Kapazitätsänderung bei unterschiedlicher Beleuchtung.

Hi agmue, schön dich wiederzusehen!

Meine Holzwerkstatt ist gerade noch in einem Schiffscontainer eingelagert, also immer noch Drechselpause.

Ja, sorry für den Typo, ich meine den ESP32 S3, der hat eine (rudimentäre) Hardware Fließkomma Unit, und die Teensy 4.x haben eine ordentliche.

Aber da viele Leute ja auch die kleineren Controller verwenden, haben wir noch eine Fixed Point Version gebaut, das müsste theoretisch auch auf auf den 8 und 16 Bit Controllern gut laufen. Jedenfalls ist das dort ca. 3x schneller als float.

Schön! Das mit LEDs als Sensoren hatte Udo Klein auch mal demonstriert.

Was ist dein Anwendungsfall - was möchtest du damit machen?

Der Startpunkt war die Hintergrundbeleuchtung von Zusatzinstrumenten im KFZ zu steuern.
Ziel, gerade noch ablesbar, nicht störend.

Auch meine selbst gebaute Uhr kann sowas gebrauchen. Die ist nachts viel zu hell.

Bin neu hier,
nicht direkt mit LEDs sondern ich baue gerade ein Projekt mit Fluorescent Indicator Panel Display auf, die schlachte ich aus alten CD Playern aus bevorzugt die farbigen.

Hier ein aktuelle Video von 32x48 LEDs (keine Simulation), welches FlowFields in Aktion zeigt.

Das kann man im Prinzip anstelle von CLS verwenden, also den Screenbuffer zwischen den Frames nicht löschen, sondern direkt damit weiterarbeiten.

Hier der dazugehörige Reddit Post.

Ich habe zum ersten Mal eine "richtige" Fluid Simulation basierend auf den Navier Stokes Equations geschrieben. Das sieht echt vielversprechend aus und ich liebe die Detailtiefe die das produziert. Mal schauen, ob wir es irgendwie hinbekommen, dass ein ESP32 das stemmen kann. Beim Teensy bin ich optimistisch, beim ESP werden wir wahrscheinlich ein paar Berechnungen durch Approximationen ersetzen müssen.

Hier der erste Versuch:

Und hier die mathematisch etwas stabilere 2. Version:

Es läuft jetzt auf einem ESP32! 48x32 WS2812 @ 30 fps.

Code hier.

Demo hier:

und hier:

Ich habe so leider gar keine Ahnung von der Materie, aber es sieht TOLL aus.
Diese psychedelischen Farbspiele ... faszinierend :heart_eyes:

Hallo Klaus, Dankeschön! Ich finde das selbst auch faszinierend, was man aus einem Set von Differentialgleichungen rausholen kann.
V.a. bin ich fasziniert, dass wir das soweit auf die Essenz reduzieren konnten, dass es überhaupt auf einem Microcontroller läuft.

Hier ist noch ein aktuelles Demo von heute, diesesmal mit einem Linienemitter anstelle eines Jets.

Hier wird das darunterliegende mathematische Modell beschrieben.

Wenn jemand Fragen dazu hat, beantworte ich sie gern, soweit ich dazu in der Lage bin.

Hier mal ein schnöder stationärer Color & Velocity Emitter...

Mir ist gerade aufgefallen, dass das ja eine richtige Fluid Simulation ist - also kann ich die Buchstaben auch einfach als Hindernisse definieren und damit den Rauch zwingen wirklich um den Text herumzufließen!

Na das wird doch langsam besser...

Bin weiterhin begeistert und mit der dahinterliegenden Mathematik heillos überfordert :roll_eyes:

Aber ich schau mir Deine Lichtspiele gerne an, also bitte nicht aufhören damit :+1:

Das sieht auf der ersten Blick überwältigend aus, aber wenn man sich erstmal eingelesen und reingedacht hat, wird es überschaubar. Ich erkläre es mal kurz ohne Formeln:

Der Solver ist ein gitterbasierter Stable Fluids-Ansatz auf einem festen 64x64-Raster. Pro Zelle speichert er:

  • vertikale und horizontale Geschwindigkeit

  • Farbdichte in R, G, B

Pro Simulationsschritt passiert grob diese Reihenfolge:

  1. Emission
    Neue Farbe und neuer Impuls werden an den Quellzellen eingespeist. Das ist die "Energiezufuhr" ins System. In diesem Fall die Buchstaben selbst. Ein Bitmap.

  2. Externe Kräfte
    Zum Beispiel Gravity. Damit bekommt das ganze Geschwindigkeitsfeld einen zusätzlichen Bias nach oben oder unten. Außerdem Wind zur Seite.

  3. Velocity diffundieren
    Die Geschwindigkeit wird leicht geglättet. Das verhindert zu harte, rauschige Sprünge und macht die Strömung visuell flüssiger.

  4. Projektion
    Das Geschwindigkeitsfeld wird auf “annähernd inkompressibel” korrigiert. Ohne diesen Schritt würde das Fluid unnatürlich aufblasen oder kollabieren.

  5. Velocity advektieren
    Die Geschwindigkeit wird von sich selbst transportiert. Das heißt: die Strömung bewegt ihre eigene Strömung weiter. Dadurch entstehen die typischen gebogenen, mitgerissenen Flow-Strukturen.

  6. Projektion nochmal
    Nach dem Transport ist das Feld wieder etwas inkonsistent, also wird nochmal auf inkompressibles Verhalten zurückprojiziert.

  7. Vorticity confinement
    Hier werden kleine Wirbel künstlich wieder verstärkt. Der Stable-Fluids-Ansatz ist robust, dämpft aber oft zu stark. Dieser Schritt bringt wieder Details und “Leben” rein.

  8. Dye diffundieren
    Die Farbe wird leicht in Nachbarzellen verteilt. Das steuert, wie weich oder scharf der Rauch aussieht.

  9. Dye advektieren
    Jetzt wird die Farbe durch das aktuelle Geschwindigkeitsfeld transportiert. Das ist der eigentliche sichtbare Rauchfluss.

  10. Dissipation
    Geschwindigkeit und Farbe werden etwas abgeschwächt, damit das System nicht immer weiter Energie aufsummiert.

  11. Obstacles erzwingen
    Im konkreten Beispiel werden die Buchstaben als Hindernisse behandelt:

    • Geschwindigkeit in den Buchstaben wird gelöscht

    • Bewegung durch ihre hindurch Kanten wird unterdrückt

    • dadurch fließt der Rauch um die Formen herum

  12. Bitmap neu stempeln
    Zum Schluss wird das sichtbare Logo wieder in die Farbfelder geschrieben, damit die Buchstaben lesbar bleiben und nicht komplett verwischen.

So erklärt ist es eigentlich ganz einfach, oder?! :slightly_smiling_face:

Ich habe heute stundenlang Simulation Papers gelesen und plötlich hatte ich eine wilde Idee:

Was passiert eigentlich, wenn ich nicht nur die Geschwindigkeit der Fluidbewegung simuliere, sondern zusätlich auch noch Temperaturverteilung UND Rauchbewegung - alles vom selben System und das alles ineinander rückkoppeln lasse...

Das Ergebnis ist: FEUER!

Ich habe jetzt echt zu lange nicht mehr geschlafen und mein Urteilsvermögen ist gerade stark eingeschränkt. Aber ich bin geflashed wie geil das aussieht. Vor allem der Feuerpilz beim Anzünden.

Hier erkläre ich das Model im Detail im FastLED Subreddit.

Oh, ich habe zufällig einen großen emergenten Wirbel gefunden...

Ich hatte nur wenig Zeit heute. Da ist noch viel zu tun, aber ich denke, ich habe schonmal einen vielversprechenden Ansatz, wie man die Lava Lampen Mechanik vielleicht mit den begrenzten Ressourcen eines Microcontrollers modellieren könnte.

Die konkreten Parameterwerte sind alle noch falsch, aber das könnte möglicherweise trotzdem funktionieren - ein System aus Oberflächenspannung, Viskosität, Temperatur, Auftrieb, Interner Strömung, Trägheit usw.

Nur die Blasenablösung klappt bisher noch gar nicht.

Mal schauen, ob ich damit weiterkomme.

Numeric Solver sind jedenfalls ein absolut faszinierendes Thema und ganz ehrlich - wenn man die Basics einmal kapiert hat, ist das ein potentiell sehr mächtiges Werkzeug für die Simulation von physikalischen Systemen aller Art....

To be continued.