3 Punkte von GN⁺ 2025-01-09 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2025-01-09
Hacker News Kommentare
  • Dieses Projekt deckt viele Gebiete der Informatik ab, darunter Datenstrukturen, Algorithmen, Low-Level-Performance-Optimierung, Compiler, Rendering/Computergrafik, UI/UX-Design-Tools, GPGPU-Programmierung und mehr.
    • Zusätzliche Updates können über Social-Media- oder Blog-RSS-Feeds bezogen werden.
  • Der Autor war dabei, andere großartige Beiträge zu lesen.
  • Ich denke, dieses Projekt wäre beim Schreiben meines impliziten Surface-Drawings sehr nützlich gewesen.
    • Mein eigener Ansatz ist teilweise ähnlich, jedoch weniger optimiert und generiert GLSL direkt.
    • Ich bin versucht, meinen Ansatz durch dieses Projekt zu ersetzen.
  • libfive ist zu etwa 40.000 Zeilen C++ geschrieben und schwer zu hacken, selbst für den ursprünglichen Autor.
    • Wenn man mehrere Monate nicht kompiliert, geht der Build oft kaputt und CMake muss angepasst werden.
    • Ich bin erstaunt, dass Build-Probleme nicht schon ein größeres Problem sind.
  • Ich suche nach der besten CAD-Software auf Code-Basis; ich habe CadQuery ausprobiert, aber es gab ein paar Probleme.
    • Ich suche empfohlene Software für den 3D-Druck.
  • In meiner Studienzeit habe ich in einem Reaktorphysik-Simulator mit impliziten Oberflächen gearbeitet.
    • R-Funktionen sind überall differenzierbar.
    • Ich vermute, dass dort immer noch viel Legacy-Fortran-Code verwendet wird.
  • Ich würde gerne mit SDFs abstrakte Bäume für die Oberflächenerzeugung erstellen.
    • Die Idee, anhand einer Ziel-Mesh/Point-Cloud einen Baum zu finden, der die gewünschte Form trifft.
  • Ich habe Arbeiten und Demos zu impliziten Oberflächen gesehen; dadurch kann man seine Fantasie einsetzen, um Modelle zu bauen.
    • Ich frage mich, ob man dasselbe mit einem b-rep-Kernel schaffen kann.
    • Ich würde gerne einen Kern sehen, der schnell, Open Source und parallelisierbar ist.
  • Das Projekt erinnert mich an Ian Henry.
  • Als jemand ohne Erfahrung in Grafikprogrammierung finde ich dieses Projekt besonders spannend.
    • Ich wäre froh über mehr Demos.
    • Ich schlage ein Dropdown-Menü im Web-Editor vor, um verschiedene Programme ausprobieren zu können.