Seit langem wollte ich einen 2D-Blitzalgorithmus implementieren, der auf einer Idee basiert , die ich auf YouTube gesehen habe . Das Video ist in Echtzeit, läuft aber auf der CPU und die Auflösung ist ziemlich niedrig. Ich bin gespannt, ob jemand eine Idee hat, wie das auf der GPU geht.
Der Algorithmus funktioniert folgendermaßen:
- Wir haben Lichtdatenkarten, die die Farbe des Materials enthalten (z. B. ein rotes Glas hat 0xFF0000) und wie transparent dieses Pixel ist.
- Berechnen Sie die Lichtwerte jedes Pixels in wachsenden Kreisen von einer Lichtquelle. Mit anderen Worten, berechnen Sie zuerst Werte direkt neben dem Licht (8 Pixel), dann die Nachbarn dieser Pixel und so weiter. Die Farbe eines Pixels ist sein Wert aus der Blitzdatenkarte, sein Alpha ist gleich: (Alpha des Pixels daneben, das der Lichtquelle am nächsten liegt - eigenes Alpha). Es handelt sich also um eine Art Ray-Casting-Algorithmus, der den Wert für jedes Pixel berechnet und mit farbigem Glas und Nebel / Rauch umgehen kann.
Die CPU-Implementierung ist also ziemlich trivial. Mein Problem ist, dass ich dies in einem Handyspiel verwenden möchte, aber ich weiß nicht, wie dies als Shader funktionieren würde. Wie kann dies auf der GPU implementiert werden (die auf Mobilgeräten ausgeführt werden würde, also mit OpenGL ES 2.0 / 3.0, möglicherweise mit Metal - wenn dies nicht möglich ist, dann mit OpenCL / CUDA)?
Hinweis: Ich suche keine vollständigen Implementierungen, sondern nur Ideen / Shader-Pseudocode, wie dies möglich wäre.