- Threlte ist ein Open-Source-Framework, das Sveltes reaktives Komponentenmodell auf Three.js aufsetzt, um schnell interaktive 3D-Apps im Web zu erstellen
- Mit deklarativen Komponenten wie
<T.Mesh>werden Three.js-Objekte aufgebaut; über den Svelte-Lifecycle werden Event-Subscriptions und Zustandsänderungen verarbeitet - Als Basisausstattung werden die Rapier-Physics-Engine, das Animationstool Theatre.js,
@threlte/gltfund@threlte/extrasmitgeliefert, was den initialen Aufbau von 3D-Apps reduziert - Verhalten, das mit den
<T>-Komponenten allein nicht ausreicht, lässt sich über typsichere Plugins um eigene Props und Events erweitern - Für Entwickler im Svelte-Ökosystem, die eine deklarative THREE-Library und Werkzeuge zum Erstellen von WebGL-Apps suchen, gelten Dokumentation und Nutzbarkeit als Stärken
Three.js-Szenen im Svelte-Stil aufbauen
- Threlte ist ein 3D-Framework für das Web, das auf Svelte und Three.js basiert
- Der Fokus liegt darauf, interaktive 3D-Apps schnell mit deklarativen, reaktiven Komponenten zu erstellen
- Über den Lifecycle von Svelte-Komponenten lassen sich folgende Aufgaben erledigen
- Event-Subscriptions
- Verarbeitung von Zustandsänderungen
- Verknüpfung komponentenbasierter Verhaltensweisen
- Der Beispielcode platziert Geometrie und Material innerhalb von
<T.Mesh>und setzt Props und Events wiescale,position.xundonclickdirekt - Wie man die erste Szene erstellt, ist unter Make Your First Scene zu sehen
Mitgelieferte Tools und Erweiterungsmodell
- Threlte positioniert sich als „batteries included“ und liefert Werkzeuge mit, die für die Erstellung von 3D-Apps benötigt werden
- Rapier: Physics-Engine
- Theatre.js: Animationsbibliothek mit professionellem Motion-Design-Toolset
@threlte/gltf: Tool zum Umwandeln von GLTF-Dateien in Threlte-Komponenten@threlte/extras: Sammlung von Komponenten und Utilities für den Einstieg
- Das Rapier-Beispiel kombiniert
RigidBody,AutoCollidersund<T.Mesh>, um einen kugelförmigen Collider und ein Mesh aufzubauen - Das Beispiel für
@threlte/extraslädt mit den KomponentenFloatundGLTFdas Modell/models/flower.glbund legt Schatten, Position und Skalierung fest - Die Nutzung von
@threlte/extrasist in der Documentation beschrieben - Plugins sind ein Erweiterungsmechanismus, um
<T>typsicher eigene Props und eigene Events hinzuzufügen- Das Beispiel-Plugin registriert mit
injectPlugindie ProplookAtund ruft innerhalb von$effectargs.ref.lookAt(args.props.lookAt)auf - Fortgeschrittene Nutzung ist in der Plugins-Dokumentation zusammengefasst
- Das Beispiel-Plugin registriert mit
- Außerdem werden Einstiegsdokumentation und Community-Links bereitgestellt
1 Kommentare
Hacker-News-Meinungen
Im Kern arbeite ich an zwei Dingen. Das eine ist Svelte-5-Support. Weil Threlte stark in die Interna von Komponenten eingegriffen hat, etwa um Event-Handling effizienter zu machen oder Svelte-Transitions nicht auf DOM-Elemente, sondern auf Komponenten anzuwenden, ist das etwas mehr Arbeit als bei einer normalen Svelte-Bibliothek. Vieles davon ist in Svelte 5 eingebaut worden, und anderes wie Transitions müssen wir vorerst zurückstellen.
Das andere ist Threlte Studio. Ich bin mir noch nicht sicher, wie man es am besten beschreibt, aber man kann es wohl als Editor bezeichnen, mit dem sich Code visuell bearbeiten lässt. Es ist erweiterbar, sodass man es an den eigenen Workflow anpassen kann, und ich bin gespannt, wie weit man damit gehen kann. Wer interessiert ist, kann uns auf Discord http://chat.threlte.xyz oder auf X https://twitter.com/threlte folgen.
Svelte fühlt sich wirklich intuitiv an, daher lag der Gedanke nahe, dass sich damit auch 3D-Umgebungen effizient verwalten lassen. Deshalb habe ich nach „Svelte + three.js“ gesucht.
Da ich bisher PlayCanvas und Babylon.js genutzt habe, bin ich sehr gespannt auf die Entwicklung von Threlte Studio. An DREI gefällt mir, dass es alles wie ein Verzeichnis auffächert, aber dabei musste ich an vertraute „Studio-Tools“ denken. Mich würde der voraussichtliche Zeitplan für Threlte Studio interessieren.
Besonders mag ich das Beispiel mit der Bildergalerie. Ich habe es so angepasst, dass man beim Klicken auf ein Bild in einen anderen Raum, also in eine andere Galerie, gelangt.
https://github.com/pmndrs/drei ist eine Sammlung von Beispielen und Helfern.
Am beeindruckendsten fand ich ein Beispiel mit GLTF-Modellen, Video-Texturen auf Text und Reflexionen; die Standalone-Version gibt es unter https://bfplr.csb.app/.
Noch beeindruckender ist die Sandbox, die zeigt, dass dafür gar nicht so viel Code nötig ist: https://codesandbox.io/p/sandbox/ground-reflections-and-vide...
Eine Schicht über three.js zu legen erfordert viel Arbeit und hat mir auch einiges Kopfzerbrechen bereitet, aber das Potenzial ist trotzdem groß. Die Nutzung von three.js hat meine Sicht auf Website-Entwicklung völlig verändert, und wer Svelte nutzt, sollte sich das unbedingt ansehen.
Das Technical Outline, insbesondere die vereinfachte Erklärung zur Autophysik, ist ziemlich aufschlussreich. Im Kern ist es ein Trackmania-Klon samt Track-Editor und wirkt wie ein Beispiel, das die Vorteile von Svelte/Threlte maximal ausnutzt.
Ich frage mich, ob die Leute wirklich deklaratives 3D wollen. X3D/VRML gibt es seit über 25 Jahren und A-Frame seit 8 Jahren, aber keines von beiden wurde besonders populär; auch mehrere andere Formate sind gekommen und wieder verschwunden. Three.js und imperatives/prozedurales 3D laufen dagegen insgesamt gut, und ich frage mich, warum das so ist.
Es ist nicht besonders gut optimiert, und alle Modelle sind kostenlose Modelle von Sketchfab. Da es eine 3D-Spielumgebung ist, hilft ein aktueller PC.
Ich denke, viele UIs könnten von 3D-Nutzung profitieren.