Einführung
- Fidget ist eine Bibliothek zur Darstellung, Kompilierung und Auswertung von großskaligen mathematischen Ausdrücken und wurde hauptsächlich als Backend für implizite Oberflächen entwickelt.
- Es ist eine flexible Bibliothek, die für verschiedene Zwecke eingesetzt werden kann.
Was sind implizite Oberflächen?
- Eine implizite Oberfläche ist ein Ausdruck der Form f(x,y,z)→d, wobei d außerhalb des Modells positiv und innerhalb des Modells negativ ist.
- Beispielsweise kann eine Kugel mit Radius 1 durch f(x,y,z)=x²+y²+z²−1 dargestellt werden.
- Fidget konzentriert sich auf geschlossene implizite Oberflächen, die aus grundlegenden arithmetischen Operationen aufgebaut sind.
Vorteile impliziter Oberflächen
- Implizite Oberflächen sind kompakt und eignen sich gut für parallele Auswertung in großem Maßstab.
- CSG-Operationen (Vereinigung, Schnittmenge usw.) lassen sich einfach behandeln.
- Die geschlossene Form der Gleichungen ist für Optimierungen vorteilhaft und ermöglicht es, nachzuverfolgen, welcher Zweig bei der Auswertung ausgewählt wird.
Ursprung
- Seit den letzten zehn Jahren wurde intensiv an der Darstellung und Auswertung impliziter Oberflächen geforscht.
- Fidget ist ein persönliches Forschungsprojekt und wurde in Rust geschrieben, sodass es leichter nutzbar ist als bestehende Kerne wie libfive.
Bibliotheksstruktur
- Fidget besteht aus drei primär getrennten Ebenen und Demo-Anwendungen.
Frontend: Aufbau mathematischer Ausdrücke
- Fidget nutzt die Rhai-Skriptsprache, um mathematische Ausdrücke aufzubauen.
- Der mathematische Baum ist ein gerichteter, azyklischer Graph mit Eliminierung von Redundanz.
- Das SSA-Tape linearisiert den Graphen zu sequenziellem Code.
Backend: Schnelle und flexible Auswertung
- Das Fidget-Backend ist vom Frontend getrennt und unterstützt verschiedene Auswertungsmodi.
- Der JIT-Compiler konvertiert Bytecode in Maschinenbefehle, um die Leistung zu maximieren.
Algorithmus
- Fidget implementiert auf Basis schneller Auswertung verschiedene Render- und Meshing-Algorithmen.
- Für das Meshing wird Manifold Dual Contouring verwendet, um Wasserdichtheit, Mannigfaltigkeit und Erhalt scharfer Merkmale zu gewährleisten.
Demo
- Fidget enthält mehrere Demos, wobei das Web-GUI der spannendste Bestandteil ist.
- Es dient als Chance, die neuesten Webentwicklungstechnologien zu erkunden.
Zukunftsausblick
- Die Erweiterung um ein GPU-Backend, Verbesserungen beim Meshing, der Aufbau einer Standardbibliothek und Bindings für höhere Sprachen sind in Betracht gezogen.
Fazit
- Fidget ist nun öffentlich verfügbar und kann einfach zu einem Rust-Projekt hinzugefügt werden.
- Es wird mit einer für Open Source und kommerzielle Nutzung freundlichen Lizenz bereitgestellt.
1 Kommentare
Hacker News Kommentare