CommunityBildgithub.com

threejs-procedural-cloth

Programmatisch fotorealistische statische Stoffe designen (ohne Physiksimulation): ungemachte Bettdecken, Decken, Tischdecken, über Bett- oder Tischkanten fallende Stoffe, umgeschlagene Ecken, Gegenstände auf dem Stoff sowie an einer Stange hängende Vorhänge (mit Raffungen, fallenden Falten, gebundenen Säumen, Nähten, doppelten Säumen und Leinwandbindung).

Was ist threejs-procedural-cloth?

Dieses Skill bietet eine programmatische (prozedurale) Methode zur Erzeugung fotorealistischer statischer Stoffe wie Bettdecken, Tischdecken, Vorhänge und hängende Tücher, **ohne physikalische Simulation**. Es basiert auf einer Höhenfeld-Methode (Klumpen + gerichtete lange Falten + abgeflachte Spitzen + einzeln gezeichnete Falten), die dann auf ein Trägerobjekt (z.B. Bett) projiziert wird – hohe Falten werden zur Seite gelegt, Ecken umgeschlagen, UVs über die 3D-Oberfläche geglättet, und eine feine Falten-Normal-Map sowie Abdunklungen in Vertiefungen werden hinzugefügt. Es enthält eine wiederverwendbare Bibliothek (`cloth.js`), ein schrittweises Beispiel (`example/index.html`), Verifikationsdaten sowie Anleitungen zur Portierung nach Godot/Unreal. Die Methode ist deterministisch (derselbe Seed erzeugt immer dasselbe Ergebnis), in unter 0,5 Sekunden aufgebaut und benötigt **keine Laufzeitsimulation**, was sie ideal für Szenen macht, die reproduzierbar und schnell sein müssen. Es wird unter anderem in den Kontexten 'prozeduraler Stoff', 'Bettdecke / Laken / Decke / Tischdecke modellieren', 'Stofffalten', 'Stoff fällt über Bettkante', 'umgeschlagene Decke', 'Stoff ohne Simulation', 'prozeduraler Vorhang', 'Vorhänge modellieren' und 'Stoffmuster verzerrt' eingesetzt.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ammosu/claude-threejs-photoreal/tree/HEAD/skills/threejs-procedural-cloth

Installed? Explore more Bild skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Programmatischer Stoff (ohne Simulation)

Quelle: room-at-dawn (MIT), src/scene/parts/bed.js (Bettdecke, Decke, Kissen). Hier wird es in eine wiederverwendbare Bibliothek zerlegt, mit einem schrittweise anzeigbaren Beispiel.

Kernidee: Der Stoff wird nicht „simuliert“, sondern „designt“. Auf einer ebenen Fläche wird definiert, „wie viel höher jeder Punkt des Stoffs über dem Träger ist“, und dann wird diese Ebene auf das Trägerobjekt projiziert. Vorteil: Jeder Schritt ist kontrollierbar und reproduzierbar (derselbe Seed liefert immer dasselbe), Aufbau in unter 0,5 Sekunden, und andere Objekte (Buch, Handy, eine weitere Decke) können dieselbe Höhenfunktion abfragen und liegen dadurch garantiert auf der Stoffoberfläche. Nachteil: Der Stoff ist statisch – er wird nicht durch Figuren bewegt (für Interaktion siehe references/engines.md).

Dateien

PfadInhalt
scripts/cloth.jsBibliothek (ES-Modul, nur three.js als Abhängigkeit): RNG/Rauschen, Feld, Klumpen, Faltenfamilien, Falten, Drapierung auf Träger, Umschlagen von Ecken, Gitter, UV-Glättung, Falten-Textur, Muster, Baumwoll-Material, exportableMesh (Umwandlung vor GLB-Export)
example/index.html + main.jsEin ungemachtes Bett mit Decke, ?stage=1..5 fügt schrittweise Effekte hinzu
scripts/curtain.jsVorhänge: curtainPanel (Querschnittsintegration ohne Dehnung), auditPanel, linenTextures (Leinwandbindung), curtainMaterial (Säume, Nähte, Raffungen, Lichtdurchlässigkeit, leichte Bewegung), curtainRing
example/curtain.htmlEin Paar Vorhänge vor einem Fenster, ?cam= (front, angle, top, hem, stitch, above), ?tied=1, ?fullness=, ?loops=, ?tex=checker
example/preview-*.jpgFertigbilder und Zwischenschritte des Beispiels (preview-curtain.jpg ist der Vorhang)
references/shape.mdHöhenfeld-Design: Klumpen, lange Falten, Spitzenabflachung, Falten, glatte Bereiche
references/drape-curl.mdTräger, Umfallen, Planare Verzerrung, Ecken umschlagen, Säume, Gegenstände auf dem Stoff, zweite Stoffschicht
references/uv-material.mdUV-Glättung, feine Falten-Normal-Map + Vertiefungs-Abdunklung, Muster, Material
references/verification.mdWelche Daten, welche Kameraperspektiven, häufige Symptome und deren Behebung
references/curtain.mdVorhänge: Querschnittsintegration und Breitenlösung, Zusammensetzung von θ(s), Material, Parameter, Verifikation, bekannte Probleme
references/engines.mdPortierung nach Godot/Unreal: GLB-Export, Umschreiben in GDScript/C++, Integration von interaktivem Stoff

Beispiel ausführen

cd <Skill-Ordner> && python3 -m http.server 5420 --bind 127.0.0.1
# Öffne http://127.0.0.1:5420/example/

(<Skill-Ordner> ist das bei Laden des Skills angezeigte Basisverzeichnis; als Plugin liegt es unter ~/.claude/plugins/cache/)

URL-Parameter:

  • stage=1..5: Zeigt schrittweise Klumpen, lange Falten, Spitzenabflachung, Falten, umgeschlagene Ecken und Umfallen.
  • cam=wide|close|top|side|left|foot: Voreingestellte Kameraperspektive.
  • tex=checker: Wechselt zu einem 10-cm-Schachbrettmuster, um UV-Verzerrung zu prüfen.
  • relax=0: Schaltet UV-Glättung aus, zum Vergleich.
  • ui=0: Blendet das Datenpanel aus (für Screenshots).

Nach Abschluss enthält window.__cloth die Verifikationsdaten, body[data-ready="1"] signalisiert Bereitschaft für Screenshots. Der Button „GLB herunterladen“ exportiert den Stoff für andere Engines.

Ablauf

SchrittWasWarumBibliothek
1Kontur (Viereck) und „Abstand zum Saum“ in der Ebene definierenFür Säume, Ausblenden von Falten, umgeschlagene EckenquadEdge
2Klumpen: 5–10 manuell platzierte Ellipsen mit eigener Höhe und Ausrichtung, per Smooth-Max verbundenGroßform bestimmt „in welchem Zustand ist die Decke“; Rauschen allein reicht nichtmakeLobes lobesAt
3Lange Falten: 2–3 Gruppen gerichteter Billow-Rauschfelder, je nach Bereich mit wechselnder RichtungDie Falten einer Decke verlaufen entlang der ZugrichtungfoldFamily
4Längliche Wellen für hängende Bereiche; globales Domain Warp; Soft Cap zur HöhenbegrenzungHängender Stoff ist nicht flach; vermeidet Lineal-artige Kanten; höchster Klumpen nicht übertriebensoftCap
5Spitzenabflachung: Jeder Punkt ist maximal etwa 1,2 cm höher als die Umgebung (nach zweimaligem Weichzeichnen), Täler bleiben scharfStoff mit Füllung hat keine spitzen Gipfel; macht aus einem „Berg“ eine „Decke“Field.erodePeaks
6Falten einzeln zeichnen: Vom Greifpunkt fächerförmig ausstrahlend, plus weitere verteilt entlang des Spannungsfelds, in glatten Bereichen und nahe Säumen abgeschwächtFalten mit Rauschen sehen aus wie Marmor; benötigt „Zeltprofil“-LiniensegmenteCreaseSet crease
7Saum: flaches Band, Nahtrille, KräuselungDer Rand ist echte Geometrie, muss aus der Nähe glaubwürdig seinBeispiel hemElev
8Auf Träger projizieren: flacher Bereich + runde Kante + senkrecht nach untenEine einzige Ebene kann gleichzeitig Bett und Bettkante darstellenboxSupport
9Hohe Falten zur Seite legen: Der Versatz hängt von der Höhe an dieser Stelle abBeulen werden einseitig steil, einseitig flach, nicht wie symmetrische BrötchenBeispiel place
10Ecken umschlagen: Der Teil jenseits der Bruchlinie wird zuerst um einen Zylinder gerollt, dann flach auf die Decke gelegt; der überlappte Bereich wird als glatt markiertFügt ein erzählerisches Detail hinzucurl
11UV-Glättung über die 3D-Oberfläche (Mehrgitterverfahren, Kantenlängen-Constraints)Muster werden auf steilen Falten nicht in die Länge gezogenrelaxUV uvStretch
12Material: Wiederholbare feine Falten-Normal-Map (Alpha = Vertiefungen) + Muster + SheenGeometrie regelt Zentimeter, Textur regelt MillimeterwrinkleTexture sprigPrintTexture cottonMaterial

Wichtige Regeln

  1. Zufall immer über RNG(seed) / pn(...,seed), niemals Math.random(). Screenshot-Regressionen, Backen von Beleuchtung, Multi-User-Synchronisation hängen davon ab.
  2. Großformen mit kubischer Interpolation (Field.cubic) abtasten, Falten mit bilinearer (Field.bil). Bei bilinearer Interpolation von Großformen sind auf dem Gitter 5-mm-Kästchen sichtbar.
  3. Falten nicht mit Rauschen erzeugen. Rauschen ergibt Klumpen; echte Falten sind gerichtet und laufen an beiden Enden spitz zu.
  4. Erst Spitzen abflachen, dann Falten hinzufügen. Bei umgekehrter Reihenfolge werden die Faltenrücken ebenfalls abgeflacht.
  5. Der glatte Bereich unter der umgeschlagenen Ecke muss den gesamten Umschlagbereich abdecken (Beispiel verwendet QMAX zur automatischen Berechnung). Sonst liegt die umgeschlagene Kante auf hohen Klumpen und das Muster wird linear verzerrt (ist passiert, siehe references/verification.md).
  6. UV-Glättung verwendet die „nicht umgeschlagene“ Form U; die Verzerrung des umgeschlagenen Teils muss separat geprüft werden. relaxUV erwartet Gitterauflösung als Vielfaches von 8.
  7. Hängender Stoff darf nicht mit darunter liegenden Objekten kollidieren: Im Beispiel ist der Bettrahmen schmaler als die Matratze. Kollisionen außerhalb des Trägers werden von dieser Methode nicht behandelt.
  8. Wenn zwei benachbarte Kanten gleichzeitig herunterhängen, wird an der Ecke ein konischer Stoff- oder Dreieckslappen benötigt; boxSupport behandelt dies nicht. Bitte nur gegenüberliegende Kanten herunterhängen lassen.

Startwerte (im Beispiel getestet)

  • Dicke der flachen Decke 5 cm, Klumpenhöhe × LOBE_SCALE (0.3 = normal benutzt, 1 = zu großen Wulst gestapelt), maximale Soft-Cap 23 cm.
  • Abstand langer Falten ca. 12 cm, Länge ca. 60 cm, Amplitude 3–4 cm; Abflachungsradius 5 Gittereinheiten (2,5 cm), Obergrenze 1,2 cm.
  • Faltenbreite 2,4–4 cm, Höhe ca. 0,16–0,3 der Breite, 30 % sind Rillen; 4–7 Falten pro Greifpunkt, 200 Gruppen verteilt.
  • Gitter ca. 7 mm (288×192), ca. 130.000 Dreiecke, Aufbau ca. 0,45 s (davon UV-Glättung ca. 0,15 s), Überlappungen 0, UV-Verzerrung p5/p95 ca. 0,92/1,08.

Vorhänge (hängender Stoff)

Die Methode für Bettdecken („Höhenfeld auf Träger projizieren“) ist für Vorhänge nicht geeignet. Vorhänge verwenden stattdessen: Jeder horizontale Querschnitt ist ein Seil mit fester Länge, das entlang des fortschreitenden Winkels θ(s) gezeichnet wird. Mit einem Bisektionsverfahren wird der Faktor von θ so angepasst, dass diese Reihe genau der gewünschten Breite auf dieser Höhe entspricht. Der Stoff dehnt sich nicht, daher wird UV direkt in Metern gemessen und die Textur verzerrt sich nicht. Details in references/curtain.md.

import { curtainPanel, auditPanel, linenTextures, curtainMaterial, curtainRing, CU } from './scripts/curtain.js';
const p = curtainPanel({ x0t: 0.27, x1t: 0.95, x0h: 0.25, x1h: 0.97, zc: 0.12, yTop: 2.29, yHem: 0.02, loops: 7, seed: 4101 });
const lin = linenTextures();
scene.add(new THREE.Mesh(p.geo, curtainMaterial({ map: lin.map, normalMap: lin.normalMap, yTop: 2.29 })));
console.log(auditPanel(p));   // crossings muss 0 sein; stretchP95Pct sollte < 1 sein
  • Im Beispiel getestet: Ein Panel ca. 100.000 Dreiecke, Aufbau 0,2 s, Verzerrung p95 0,4–0,7 %, Überkreuzungen 0.
  • Fallstrick: Wenn depth zu eng eingestellt ist, fehlen 5–15 % des Stoffvolumens. Bei Platzmangel fullness reduzieren, nicht die Tiefe.
  • Fallstrick: Wenn der Saum zu schmal wird, kreuzen sich die Falten gegenseitig – der Schwellwert hängt vom Seed ab (im Beispiel hat das rechte Panel noch bei ca. 0,67-fach Überkreuzungen, erst bei 0,79-fach ist es frei). crossings prüfen, ggf. Seed wechseln.
  • Standard depth [-0.11, 0.16] verkürzt den Stoff nicht, die Stange sollte ca. 12 cm von der Wand entfernt sein.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

threejs-photoreal-interior

用 three.js 從零做一個照片級的室內場景,完全用程式生成、不需要模型檔、貼圖或 HDRI 的總綱與起手式。內容包括:整體流程(尺寸與座標 → 外殼與窗 → 主角物件 → 材質 → 小物 → 烘焙光照 → 後製 → 驗證 → 電影輸出)、各步驟該用哪個 skill、跨 skill 整合的規則(決定性、細分、材質要經過 GI 補丁且保留原本的 shader 補丁、反照率、太陽直射與烘焙分工、陰影漏光)、一個指令就能建立可執行的新專案(房間、窗、木地板、牆面、桌椅、掛在椅背的毛巾、書架、杯子、水壺、現場烘焙、後製),以及驗收清單和實測數字。當使用者說「做一個寫實的房間/室內」「three.js 照片級場景」「程式生成整個場景」「不用模型做室內」「room-at-dawn 那種」「從哪裡開始做寫實 3D 場景」「開一個新的寫實場景專案」「把這些 skill 串起來」「寫實室內場景流程」時使用;做其中單一環節時,直接用對應的子 skill。

threejs-procedural-textures

在 three.js 用程式即時生成照片級材質貼圖(不用任何圖檔):可無縫重複的雜訊、以公釐為單位的高度場轉 normal map、粗糙度與 AO 打包、Canvas2D 轉貼圖、平均反照率(給光照烘焙用)、接縫檢查。內含現成的材質:滾筒漆木屑壁紙加上大尺度的灰泥與漆色變化、烤漆橘皮紋、手摸過的粗糙度、積灰、橡木地板(交錯接縫、每片紋理不同、節疤、四邊微倒角)、通用木紋、對拼橡木貼皮、平織、鬆餅格、毛巾布、羅紋、針織、毛氈、棉繩、使用痕跡(灰塵、油脂、指紋、碎屑、棉絮、頭髮、杯印、細刮痕,同時畫進顏色與粗糙度)、斑點釉、粉體塗裝刮傷、書封圖集與對應 UV 的書本幾何、書頁邊、地形圖海報、照片、假文字。當使用者說「程式生成貼圖」「procedural texture」「不用圖檔的材質」「normal map 怎麼產生」「木地板/木紋貼圖」「牆面看起來太假」「布料材質」「針織/毛巾布 normal map」「使用痕跡」「刮痕/指紋/灰塵」「粗糙度貼圖」「書封/書背」「假文字」「貼圖有接縫」「Canvas 畫貼圖」時使用。

threejs-sky-backdrop

在 three.js 用程式做天空與窗外遠景,不需要 HDRI 或圖檔。天空的同一份參數同時用在三個地方:烘焙光照用的解析式天空、看得到的天空球(雲層、高空薄雲、地平線霧帶、太陽),以及不烘焙時用的太陽光、半球光與環境貼圖。內含四種預設(清晨、白天、陰天、黃昏)和一個量測工具,確認看到的天空和照亮場景的天空亮度一致。遠景部分包括:只建從室內窗戶看得到的東西(窗洞可見性與 LOD)、隨距離變淡的大氣霧化、遠處逐漸變粗的草地網格、碎石小路、樹籬、鄰居房子(陶瓦屋頂、窗戶、煙囪、天窗)、封住地平線的遠方樹牆,並可以搭配 threejs-procedural-vegetation 種樹。當使用者說「天空」「sky shader」「雲」「程式生成天空」「不用 HDRI」「窗外景色」「遠景」「背景房子」「地平線」「大氣透視」「霧化」「窗外的樹」「天空和光照對不上」「清晨/黃昏/陰天的天空」「只建看得到的東西」時使用。

Verwandte Skills