Erst nähen, dann fallen lassen
In frühen Versionen fiel der Stoff schon, während die Nähte noch gesucht wurden. Das Shirt hat sich verdreht, gedehnt oder die passende Kante verfehlt. Besser: erst Nähte schließen, Topologie mergen, danach drapen.
BioCloth simuliert Kleidung direkt im Browser: 2D-Schnittmuster werden zu einem Mesh, die Nähte schließen sich und der Stoff fällt auf einen animierten Avatar.
Rolle
Team von 2
Status
Aktiv
Jahr
2025 – 2026
Stack
JavaScript
Runtime + Engine-Glue
WebGPU
Compute-Pipelines
WGSL
Solver-Shader
Three.js
Scene + Rendering
Links
Kern des Projekts
Am Anfang war die Idee: Kleidungsstück im Browser anzeigen, fertig. Hat nicht gereicht. Sobald Nähte falsch schließen, Collision zu spät kommt oder Performance einbricht, wirkt es nicht nur unsauber, sondern kaputt. BioCloth wurde deshalb eher Engine-Arbeit als UI-Projekt.
94×
Capture-Readback nach Pipelining schneller
<1 min
geschätzte komplette Precompute-Zeit
Replay
Layout-Fingerprint-Cache für Playback
CCD+
Raycast-CCD plus Proximity-Pushout
Problem
Problem
Ein T-Shirt aus zwei flachen Pattern-Teilen klingt erstmal simpel. Schwierig wird es, sobald es sich bewegen soll. Nahtkanten brauchen gleiche Samples, sonst trifft der Solver falsche Punkte. GPU-Threads dürfen nicht gleichzeitig denselben Vertex verändern. Collision muss schnell sein, aber trotzdem verhindern, dass Stoff durch den Körper rutscht. Und wenn pro Frame Daten zurück zur CPU müssen, ist Realtime fast sofort weg.
Ansatz
Startpunkt ist ein Pattern-JSON. BioCloth sampled zuerst passende Nahtkanten, füllt die Teile per Delaunay-Triangulation und lädt Particles plus Springs auf die GPU. Danach ziehen Seam-Constraints die Stoffteile zusammen. Wenn der Fehler klein genug ist, werden die Nähte wirklich gemerged. Erst dann kommen Gravity, XPBD-Springs und Collision gegen den animierten Body dazu. Für schwere Szenen gibt es Precompute/Replay: einmal auf stärkerer Hardware berechnen, Frames prüfen und später im Browser abspielen.
Pipeline
Jeder Schritt hat eine klare Aufgabe, ein eigenes Datenformat und Fehler, die man gezielt prüfen kann. Genau dadurch bleibt das Projekt debugbar.
2D-Teile mit Bézier-Punkten und Seam-IDs
gleiche Naht-Samples, danach Delaunay-Fill
Verlet, XPBD-Springs und CCD-Collision
aus Naht-Vertices wird ein echtes Kleidungsstück
geprüfte Precompute-Frames später abspielen
Was sich geändert hat
In frühen Versionen fiel der Stoff schon, während die Nähte noch gesucht wurden. Das Shirt hat sich verdreht, gedehnt oder die passende Kante verfehlt. Besser: erst Nähte schließen, Topologie mergen, danach drapen.
Eine Naht hält nur sauber, wenn beide Kanten gleich viele Vertices haben. Remeshing prüft die Nahtpaare vor der Triangulation und erzwingt gleiche Samples. Sonst versucht der Solver zwei unterschiedliche Auflösungen zusammenzuziehen.
Der aktuelle Merged-Path nutzt Raycast-CCD plus Proximity-Fallback. Dadurch rutscht der Stoff deutlich seltener in den Body. Danach war aber klar: animierte Collision-Daten sind teuer, vor allem BVH-Refit und Triangle-Uploads.
Replay war zuerst nur gegen langsame Reloads gedacht. Später wurde es ein echter Teil der Architektur: teure Cloth-Bewegung einmal berechnen, mit Layout-Fingerprint speichern und auf schwächeren Geräten wiederverwenden.
Technische Entscheidungen
Runtime
Precompute macht aus teurer WebGPU-Arbeit normale Replay-Daten: auf stärkerem Rechner berechnen, Layout prüfen, Frames cachen und später auch auf schwächeren Geräten flüssig abspielen.
Stärkere Hardware kann die teuren Cloth-Frames einmal berechnen. Der Browser lädt danach geprüfte Replay-Daten, statt alles live zu lösen.
Cache-Identität hängt an Settings, Pattern-Dateien, Schema-Version und Human-Model-Path. Alte Motion wird dadurch abgelehnt, statt still falsch abgespielt zu werden.
Replay überspringt Live-Physik und spielt gecachte Frames ab. Wichtig für Laptops oder mobile Geräte, wo WebGPU-Budget schnell knapp wird.
Was daraus rauskam
Hat gut funktioniert
Hat nicht funktioniert
Nächste Baustellen
Was als Nächstes zählt
sichtbare Mesh-Updates stärker auf GPU halten, weniger CPU-Readback
Normals direkt in Precompute-Captures speichern oder auf GPU berechnen
Collision nicht immer laufen lassen: erste/letzte Iteration plus Final-Pass testen
Galerie
03
Nächstes Projekt
Schreib mir kurz, worum es geht — ich melde mich.