Gerade eben wurde ein neues Ergebnis von Fei-Fei Li in Bezug auf Weltmodelle veröffentlicht.
Es ist weniger als eine Woche seit der Veröffentlichung des neuen Modells Marble 1.1 & 1.1-Plus, und es gibt erneut Neuigkeiten von Li Feifeis Space Intelligence Unicorn World Labs –
Die Open-Source-3D-Gaussian-Splatting-Rendering-Engine Spark 2.0.
Wir haben ein streamfähiges LoD-System für 3D-Gaussian-Splatting entwickelt und die Möglichkeiten des Web-3D-Renderings neu definiert.
Spark 2.0 basiert auf Three.js. Benutzer können über WebGL2 weltraumgroße 3D-Welten mit über 100 Millionen Splats (3D-Gausspunkten/Spritzpunkten) auf beliebigen Geräten streamen, einschließlich Desktop-PCs, iOS- und Android-Geräten sowie VR-Geräten.
Beispielsweise besteht die folgende Coit Tower-Szene aus über 40 Millionen Splats, kann aber vollständig interaktiv im Browser dargestellt werden:
Im offiziellen Blog gibt es noch mehr 3D-Szenen, die man ausprobieren kann:
Bei der traditionellen 3D-Modellierung werden die Oberflächen von Objekten Stück für Stück aus Textur-mappten Dreiecken zusammengesetzt.
Beim 3D-Gaussian-Splatting werden hingegen Millionen von halbtransparenten Ellipsoiden (d.h. Splats) verwendet, und durch die Farbfusion dieser Ellipsoide entstehen hyperrealistische Details:
Was ist ein Splat?
Jeder Splat wird durch fünf Attribute definiert: Position, Skalierung in XYZ-Richtung, Rotationswinkel, Farbe und Opazität.
Die gängigste Methode, Splats auf dem Bildschirm zu rendern, ist der Painter's-Algorithmus.
Ähnlich wie beim Malen, bei dem man zuerst die entfernten Objekte und dann die näheren malt, werden Millionen von kleinen Ellipsoiden in der Reihenfolge von fern nach nah angeordnet und Schicht für Schicht übereinander gelegt, um das endgültige Bild in Echtzeit zu berechnen.
Das ist wie ein digitales Punktbild, nur dass hier 3D-Gaussianschichten anstelle von Farbpunkten verwendet werden.
Li Feifei hat zu diesem Ergebnis umgehend kommentiert:
Mit Spark 2.0 können jetzt über 100 Millionen Splats auf beliebigen Geräten streamend gerendert werden! Ich bin stolz darauf, zur Open-Source-Ökosystem des Web-basierten 3D-Gaussian-Splatting-Renderings beitragen zu können!
Spark-Systemdesign
Spark war ursprünglich eine interne 3D-Gaussian-Splatting-Rendering-Engine, die von World Labs entwickelt wurde.
Zu dieser Zeit hatten alle Web-Rendering-Engines auf dem Markt deutliche Schwächen. Beispielsweise konnten einige Engines nur ein 3D-Gaussian-Splatting-Objekt korrekt rendern, einige Engines konnten Splats nicht dynamisch animieren, und andere Engines basierten auf weniger bekannten 3D-Frameworks oder nutzten die noch nicht verbreitete WebGPU-Technologie, was die Gerätekompatibilität einschränkte.
Diese interne Rendering-Engine war in der Studievoransicht des großen Weltmodells, die das Team 2024 veröffentlichte, sowie im frühen Szenendarstellungsprojekt Lofi Worlds zu sehen.
Um es mehr Entwicklern zu ermöglichen, interaktive 3D-Gaussian-Splatting-Web-Erlebnisse zu schaffen, hat das Team seine technischen Kenntnisse zusammengeführt und im vergangenen Jahr eine universelle 3D-Gaussian-Splatting-Rendering-Engine Open-Source gemacht.
Damals hieß sie noch Forge, was damals auch von QbitAI berichtet wurde, und wurde später in Spark umbenannt.
Spark basiert auf dem Mainstream-THREE.js-Framework. Gleichzeitig hat das Team WebGL2 als technische Grundlage festgelegt, das derzeit die einzige 3D-Web-API ist, die auf fast allen Geräten stabil funktioniert.
Das Team hat angegeben, dass die Entwicklung von Spark immer parallel zu Marble vorangeschritten ist.
Im offiziellen Blog werden die technischen Details von Spark ausführlich beschrieben.
Das neue Spark 2.0 ermöglicht die Vorverarbeitung, das streamende Laden und das geräteübergreifende Rendering von riesigen 3D-Gaussian-Splatting-Szenen auf der Webseite.
Der Schlüssel liegt in der Kombination von drei Technologien:
Level-of-Detail-Technologie (LoD): Es werden verschiedene Auflösungen von Splat-Daten vorab generiert, und basierend auf der Kameraperspektive wird intelligenterweise die zu rendernde Splat-Untermenge ausgewählt. Für Bereiche, die zu weit entfernt sind und deren Details das menschliche Auge nicht unterscheiden kann, wird die Anzahl der gerenderten Splats reduziert, wodurch die Renderleistung deutlich verbessert wird.
Progressives Streaming: Es wird eine "von grob nach fein" Lade-Strategie angewendet, bei der zuerst die Daten heruntergeladen werden, die die Details der aktuellen Perspektive am besten optimieren. Mit fortschreitendem Datenabruf wird die Szene immer detaillierter, was zu einer reibungslosen, progressiven Darstellung führt.
Virtueller Speicher: Es wird ein fester GPU-Speicherpool für die Splat-Seiten-Tabelle zugewiesen, und basierend auf der Position des Benutzers in der Szene werden die 3D-Gaussian-Splatting-Datenblöcke automatisch ausgetauscht. Mit dieser Technologie kann auch eine riesige Menge an übergeordneten Splat-Daten, die über das Netzwerk abgerufen werden, effizient zugegriffen werden.
Schauen wir uns das im Folgenden genauer an.
Level-of-Detail
In der Computergrafik ist Level-of-Detail ein klassisches Verfahren zur Verarbeitung großer 3D-Szenen. Es kann die Renderdetails automatisch anhand der Entfernung zwischen Objekt und Beobachter anpassen. Wenn die Bildrate erhöht werden soll, kann die Detailstufe verringert werden; wenn der Benutzer still steht und beobachtet, kann die Detailstufe erhöht werden, um ein feineres Bild zu präsentieren.
Ein typisches Beispiel für die Anwendung von Level-of-Detail ist die Mipmap-Texturzuordnung:
Eine Texturabbildung wird schrittweise heruntergesampelt, um eine Pyramide von Texturen mit sukzessive halbierter Auflösung zu erzeugen, wobei die oberste Ebene aus einem einzelnen Pixel besteht. Diese Technologie stellt sicher, dass bei jeder Entfernung schnell Texturdaten abgerufen werden können, die der Größe der Bildschirmpixel entsprechen.
Die Implementierungsmethoden von Level-of-Detail können in zwei Hauptkategorien unterteilt werden: diskret und kontinuierlich.
Bei der diskreten Methode müssen mehrere Modelle mit unterschiedlicher Splat-Anzahl vorab generiert werden, und dann wird basierend auf der Entfernung zwischen der Objektumhüllenden und der Kamera die zu rendernde Modellversion gewechselt. Diese Methode hat deutliche Nachteile:
Wenn der Benutzer in der Szene bewegt wird, kann es zu "Sprüngen" in den Modelldetails kommen; außerdem sind die Grenzen zwischen den Splat-Blöcken deutlich sichtbar, wenn die Splats in Blöcke aufgeteilt werden.
Spark verwendet die kontinuierliche Level-of-Detail-Methode, deren Kernpunkt die Schaffung einer hierarchischen Struktur für alle Splats ist – Level-of-Detail Gaussian Splat Tree.
Spark wählt entlang der Grenzen dieses Baumes präzise die Splat-Untermenge aus, die am besten für die aktuelle Ansicht ist, um eine reibungslose, stufenlose Detailübergang zu erreichen.
Spark 2.0 verfügt über zwei integrierte Algorithmen zur Generierung des Level-of-Detail Gaussian Splat Tree:
Tiny-LoD-Algorithmus: Ein schneller und leichter Algorithmus, der standardmäßig für die Echtzeitgenerierung von Szenen auf der Webseite verwendet wird.
Bhatt-LoD-Algorithmus: Ein hochpräziser Algorithmus, der standardmäßig für die Offline-Verarbeitung in der Befehlszeile verwendet wird.
Beide Algorithmen sind trainingsunabhängig und erfordern keine Referenzbilder oder andere zusätzliche Eingabedaten. Sie können direkt auf die 3D-Gaussian-Splatting-Daten angewendet werden. Darüber hinaus ist Spark auch mit anderen Drittanbieter-Generierungsalgorithmen wie NanoGS kompatibel.
Progressive Streaming
Spark 2.0 definiert ein neues Dateiformat – .RAD (Radiance Fields). Dieses Format kann nicht nur die 3D-Gaussian-Splatting-Daten effektiv komprimieren, sondern auch das randomisierte, streamende Laden unterstützen, um eine progressive, feinere Rendering der Szene zu ermöglichen, was perfekt für die Netzwerkübertragung geeignet ist.
Nach der Verwendung des RAD-Formats kann ein 3D-Gaussian-Splatting-Objekt sofort als eine grobe Version mit 64.000 Splats dargestellt werden. Anschließend wird das System basierend auf der Benutzerperspektive die Datenblöcke priorisieren, die zur Optimierung der Details im sichtbaren Bereich benötigt werden, um eine dynamische Prioritätsanpassung zu erreichen.
Der LoD Splat Tree ist im Wesentlichen eine vierdimensionale Struktur: er umfasst drei räumliche Dimensionen und eine Dimension der Detailstufe.
Um das progressive, feinere Rendering beim streamenden Laden zu ermöglichen, müssen die LoD-Splats auf eine sinnvolle Weise in die verschiedenen Datenblöcke der RAD-Datei aufgeteilt werden.
Es gibt viele Strategien, um dieses Ziel zu erreichen. Die von Spark verwendete Strategie basiert auf der Priorität der räumlichen Nähe:
Der dreidimensionale Raum wird rekursiv in kleinere Bereiche aufgeteilt, und jeder Datenblock wird in der Reihenfolge "von groß nach klein" mit den Splats des entsprechenden räumlichen Bereichs gefüllt, um sicherzustellen, dass jeder Datenblock die Details dieses Bereichs maximal darstellt.
Virtual Memory
Der virtuelle Speicher ist eine klassische Speicherverwaltungstechnologie, bei der feste Speicherseitengrößen definiert werden, um eine Seiten-Tabelle zu erstellen, und mit einem begrenzten physischen Speicher einen riesigen virtuellen Speicherraum zu simulieren.
Spark 2.0 wendet diese Technologie innovativ auf das 3D-Gaussian-Splatting-Rendering an:
Es wird im GPU ein fester Speicherpool (mit einer Kapazität von 16 Millionen Splats) vorab zugewiesen, und es wird ein Seiten-Tabellen-Mapping-Mechanismus erstellt