CommunityBildgithub.com

threejs-photoreal-interior

Ein Leitfaden zur Erstellung fotorealistischer Innenräume mit three.js – vollständig prozedural, ohne Modelldateien, Texturen oder HDRI.

Was ist threejs-photoreal-interior?

Dieses Skill ist eine umfassende Anleitung und ein Startpunkt für die Entwicklung fotorealistischer Innenräume mit three.js, die vollständig prozedural generiert werden. Es vereint mehrere Sub-Skills zu einem strukturierten Workflow und stellt eine direkt ausführbare Projektvorlage bereit. Von der Spezifikation der Szene über die Modellierung von Räumen, Möbeln und Pflanzen bis hin zur Beleuchtung mit gebackenem GI und Live-Sonne – alles folgt deterministischen Regeln und festgelegten Koordinaten. Die Beschreibung umfasst die Gesamtarchitektur (Größen und Koordinaten → Gehäuse und Fenster → Hauptobjekte → Materialien → Details → Beleuchtung → Nachbearbeitung → Validierung → Filmausgabe), die Zuordnung jedes Schritts zu einem spezifischen Sub-Skill, die Integrationsregeln zwischen Skills (Determinismus, Unterteilung, Materialien mit GI-Patch und erhaltener Shader-Patch, Albedo, Arbeitsteilung Sonne/GI, Vermeidung von Lichtlecks) sowie Build-Befehle, eine Checkliste und reale Metriken.

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

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

Fotorealistische Innenraum-Szene (Überblick)

Dieses Skill verknüpft die folgenden Skills zu einem Workflow und stellt eine direkt ausführbare Projektvorlage bereit. Die Methode stammt von room-at-dawn (MIT): Ein Schlafzimmer am frühen Morgen, vollständig programmatisch erzeugt, läuft im Browser. Der Umfang des Originalprojekts liegt etwa bei:

  • 1,83 Millionen Dreiecke, lädt in ca. 7 Sekunden (RTX 4090).
  • Die gebackene Beleuchtungsdatei gi.bin ist ca. 13 MB groß, der Bake-Vorgang dauert ca. 30 Minuten.
  • Das Video ist 4K HDR10.

Welcher Skill für welchen Schritt

SchrittSkillAusgabe
03d-spec-promptSchreibe die Idee als überprüfbare Spezifikation: Atmosphäre, Tageszeit, Maßstab, Hauptobjekte, Kameraposition
1 Größen & Gehäusetemplate/src/layout.js, parts/room.js dieses SkillsReale Maße (Meter), Fenster, Wandstärke, Gehäuse
2 Hauptobjektethreejs-procedural-cloth (Bettdecke, Decke, Vorhänge), threejs-procedural-vegetation (Bäume vor dem Fenster), threejs-procedural-pothos (Zimmerpflanzen)Objekte, auf die der Blick fällt
2b Himmel & Außenbereichthreejs-sky-backdrop (Himmelsvorgaben, Wolken, Gras vor dem Fenster, Häuser, entfernte Hecken, nur sichtbare Dinge)Ein Himmel, gleichzeitig für Bake und Rendering
3 Materialienthreejs-procedural-texturesWände, Boden, Holz, Stoffe, Gebrauchsspuren, Buchcover
4 Kleine Objektethreejs-lived-in-propsAuf der Stuhllehne hängende Handtücher, Tassen, Kannen, Socken, Kabel, Papierknäuel
5 Beleuchtungthreejs-baked-giHimmelslicht und Sonnenreflexionen werden auf die Vertices gebacken, gespeichert als gi.bin; Direktes Sonnenlicht erfolgt in Echtzeit
6 Bilddarstellungthreejs-realtime-postAO, Bloom, getrennte Belichtung für Fensterbereich und Innenraum, Farbkorrektur
7 Validierung, Aufnahmewebgl-deterministic-recordingScreenshot-Regression, Frame-für-Frame-Rendering, Filmausgabe (Tiefenschärfe, Bewegungsunschärfe, HDR10)

Neues Projekt starten

bash <skill-verzeichnis>/scripts/new-project.sh ~/git_project/my-room
cd ~/git_project/my-room && python3 -m http.server 5430 --bind 127.0.0.1
# http://127.0.0.1:5430/            Bereits mit vorgebackenem bake/gi.bin
# http://127.0.0.1:5430/?bake=128   Nach Szenenänderungen neu backen, „gi.bin herunterladen“ klicken, nach bake/ speichern

(<skill-verzeichnis> ist das Basisverzeichnis, das beim Laden dieses Skills angezeigt wird; bei Plugin-Installation unter ~/.claude/plugins/cache/)

  • Dieses Skript kopiert die Vorlage und die Bibliotheken der Sub-Skills nach src/lib/ (gi, post, props, textures, cloth, vegetation, pothos, sky, film). Das Projekt ist dann unabhängig.
  • Kein Build-Tool, kein npm erforderlich. three und three-mesh-bvh werden von jsdelivr geladen.
  • URL-Parameter:
    • ?cam= Kamera (room, desk, window, corner, view=am Fenster nach draußen).
    • ?t= Feste Zeit (Blätter, Wolken unbewegt, für Screenshots).
    • ?view=gi Nur die Beleuchtung anzeigen.
    • ?only=furniture Nur bestimmte Teile bauen.
    • ?exp= Belichtung.
  • Die Seite stellt window.__ready, window.__stats, window.__camera bereit, die direkt mit den Tools von webgl-deterministic-recording verwendet werden können.
  • Bedienung: Ziehen zum Drehen der Ansicht; WASD/Pfeiltasten zum Laufen (Shift zum langsamen Gehen, Wände und Möbel blockieren); Klick auf die Leinwand schaltet auf Maus-Steuerung zum Drehen des Blicks, Augenhöhe sinkt auf 1,6 m (Esc verlässt diesen Modus). Im Orbit-Modus sind Kamera und Zielpunkt auf den Raum begrenzt, Herauszoomen oder Verschieben durchdringt keine Wände.

Struktur der Vorlage:

DateiInhalt
src/layout.jsDer einzige Ort für Maße, Sonne, Himmel (SKIES-Vorgaben), Außenkonfiguration (OUTSIDE), Farbkorrektur, Kamera, und nicht passierbare Möbelbereiche (BLOCKERS)
src/materials.jslit() (GI-Patch, erhält den ursprünglichen Shader-Patch, speichert Albedo), solid(), tbox(), tplane(), metres()
src/scene.jsErstellt jedes Teil der Reihe nach gemäß der order, Reihenfolge ist fest
src/parts/room.jsBoden, Decke, vier Wände, Fensteröffnung und Fensterbrett, schwarzes Außengehäuse, Wandkern
src/parts/outside.jsAußenbereich: Himmelskugel, Gras, Kiesweg, Hecke, Haus, entfernte Baumreihe, Hauptbaum und Bäume in mittlerer/ferner Entfernung (nur Sichtbares, threejs-sky-backdrop + threejs-procedural-vegetation). Alle mit gi = false, blockieren kein Backlicht
src/parts/furniture.jsTisch, Stuhl, auf der Stuhllehne hängendes Handtuch (PBD), Tasse, Kanne, Bücher auf dem Tisch, Bücher im Regal
src/main.jsSzene erstellen → Backen, Datei laden oder flaches Licht → Sonne → Reflexionen → Nachbearbeitung → Kamera (Orbit + Laufen, auf den Raum begrenzt)

Skill-übergreifende Regeln (unbedingt einhalten)

  1. Einheit ist Meter, Koordinaten sind fest. X entlang der Fensterwand, Z in den Raum hinein (Fensterwand bei z = 0, z < 0 ist außen), Y nach oben. Alle Maße nur in layout.js.
  2. Deterministisch. Zufallszahlen immer mit RNG(seed). Reihenfolge, Name und Vertexanzahl der Teile – ändert sich eines davon, wird der Bake für dieses Mesh ungültig; applyBake meldet veraltet.
  3. Licht liegt auf Vertex – also unterteilen. Oberflächen, auf denen Dinge stehen, auf 1,5–2 cm unterteilen, große Flächen auf 4–8 cm. tbox/tplane verwenden.
  4. Alle beleuchteten Materialien müssen durch lit() gehen. giPatch ersetzt direkt onBeforeCompile, lit() hängt den ursprünglichen Patch hinten an, einschließlich Wandvariationen (wallPatch), Stoff-Gegenlicht, Wind. Materialien mit Texturen müssen albedo angeben (Durchschnitt der Textur), damit die Farbe des reflektierten Lichts korrekt ist.
  5. Arbeitsteilung der Sonne: Direktes Licht mit DirectionalLight (Intensität gleich der im Bake gesetzten sun.irr), Reflexionslicht wird in die Datei gebacken. Kein zusätzliches Umgebungs- oder Halbkugellicht.
  6. Wände benötigen einen massiven Wandkern, dessen shadowSide auf FrontSide gesetzt ist. Ohne diesen scheint die Sonne an Wandfüßen und Ecken als helle Punkte durch (tatsächlich aufgetreten; siehe references/integration.md).
  7. Belichtung auf Innenraum ausrichten. Der Innenraum hat nur etwa 1/20 der Helligkeit des Außenbereichs: exposure ca. 4,5, Fensterbereich mit ext ca. 0,3 abdunkeln.
  8. Reflexionen nach dem Backen aufnehmen. captureEnv muss nach applyBake/runBake ausgeführt werden, die Sonde in der Raummitte.
  9. Bei Fernsicht vor dem Fenster muss die Kamera-Far-Ebene größer sein als das am weitesten entfernte Objekt. Standardvorlage: 400 m (Hecke bei 100 m, Gras bis 260 m). Bei Far-Ebene von 100 wird der Himmel am Rand der beschnittenen Fernsicht als weißer Dunststreifen sichtbar, der sich mit der Kamerabewegung mitbewegt (tatsächlich aufgetreten).
  10. Der Schattenkamerabereich der Sonne muss die Baumkronen vor dem Fenster abdecken, damit Baumschatten in den Raum fallen. Standardvorlage: Sonne bei 30 m, near 12, far 40.

Messwerte (Standardvorlage, RTX 4090, Chrome headless, 1280×800)

  • Szenenerstellung: 1,2 s, davon Handtuchsimulation ca. 0,65 s; 107.000 Dreiecke; von Seitenaufruf bis Bildanzeige ca. 1,6 s.
  • Live-Bake 128 spp: 61.407 Abtastpunkte, 26 Worker, 6 s, gi.bin 743 KB. Nach erneutem Laden 39 Netze angewandt, 0 ungültig.
  • preview.jpg: Raum, Schreibtisch, Fenster, nur Licht. preview-bake.jpg: Links flaches Licht, rechts nach Bake.

Weiterführendes

  • references/workflow.md: Vorgehen bei jedem Schritt, zu treffende Entscheidungen, Ausgaben und Prüfpunkte.
  • references/integration.md: Schnittstellen zwischen den Skills, zu beachtende Punkte, aufgetretene Probleme.
  • references/checklist.md: Abnahmeliste und Referenzbereiche für die Zahlen.

Individual skills in this repo

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

threejs-procedural-cloth

用程式「設計」出照片級的靜態布料(不做物理模擬):沒鋪好的棉被、毯子、桌巾、垂下床緣或桌緣的布、翻起一角的被子、布上放東西,以及掛在桿子上的窗簾(吊環夾出的折、往下鬆開與散開、綁起下擺、車線與雙層縫邊、亞麻平織)。方法是平面高度場(團塊+有方向的長折+削峰+逐條畫上的皺褶)→ 包到支撐物上 → 高的折往一側倒 → 翻角 → 依 3D 曲面攤平 UV → 細皺紋 normal map+凹處變暗,含可重用程式庫、分階段範例、驗證數據,以及搬到 Godot/Unreal 的做法。當使用者說「程式生成布料」「棉被/床單/毯子/桌巾建模」「布料皺褶」「布垂下床邊」「被子翻一角」「布料不要用模擬」「cloth without simulation」「procedural cloth」「布上的花紋被拉長」「布料看起來像塑膠/像山」「窗簾建模」「程式生成窗簾」「窗簾皺褶」「curtain」「布簾」時使用。

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