Ich bin neu hier und dachte mir mal mein Projekt zu teilen, an dem ich seit ein paar Monaten arbeite.
Das Spiel Genre "Falling Sand" ist schon einige Jahrzehnte alt und es geht darum, Pixel mit verschiedenen Materialien "physikalisch" zu simulieren. Falling Sand befindet sich sehr nahe an den zellularen Automaten (z.B. Game of Life), da die Regeln, wie sich ein Pixel verhält, entsprechend der direkten Nachbaren gegeben ist.
Bekannte Titel aus dem Bereich Falling Sand und zellulare Automaten sind z.B. Noita, Powdertoy und sogar Minecraft.
Ziel des Projekts ist es, Spielern eine Möglichkeit zum Bauen von Voxel Welten zu geben. Jeder Voxel ist physikalisch simuliert und mit Ray tracing gerendert. Neben gängigen Materialien wie Sand und Wasser, gibt es auch die Möglichkeit, seine Welten mit Schaltungen zu automatisieren. Spieler sollen zudem optional ihre gebauten Welten über Kryptowährungen handeln können.
Was die Engine hauptsächlich kann:
- Bis zu 512x512x512 große Voxel Welten simulieren
- Physikalisch berechnete Lichtsimulation mit Ray tracing
- Eine Turing-vollständige Schaltungs-Simulation, mit Ähnlichkeit zu Minecraft Redstone (Batterie, Kupfer, Kraft Generator, LED, Morse Code Enkodierer/Dekodierer)
- Weitere simulierte Materialien sind Wasser, Sand, Feuer, Stein, Pflanze und Plastik
Zu der Technik meiner Engine:
- Die Simulation läuft auf der GPU über Compute shader und es gibt auch eine multi-threading basierte CPU Version, welche in C geschrieben und nach WebAssembly kompiliert ist (ohne Emscripten)
- Für die Lichtberechnung verwende ich Path Tracing und einen Spatio-Temporalen Denoiser, welcher auf Voxel Oberflächen spezialisiert ist
- Eine alternative Lichtberechnung, an der ich im Moment arbeite, verwendet Voxel Cone Tracing und ist deutlich schneller als das Path Tracing
- Die Render Engine ist in WebGL sowie in WebGPU implementiert
Links zu ein paar Videos:
- Lichtberechnung mit Cone Tracing
- Lichtberechnung mit Path Tracing
- Gallerie zu zellularen Schaltungen
- Prozedurale Terrain Generierung mit einer 3D Variante des Diamond-Square Algorithmus
- Falling Sand Simulation in einem Compute Shader
Ein paar Screenshots der Licht Engine (In Echtzeit dargestellt auf einer GTX 1070):


