CommunityImagegithub.com

threejs-photoreal-interior

Création procédurale d'une scène d'intérieur photoréaliste avec three.js, sans fichiers de modèles, textures ou HDRI.

Qu'est-ce que threejs-photoreal-interior ?

Ce skill centralise et orchestre l'ensemble du pipeline de création d'une scène d'intérieur photoréaliste générée entièrement par code avec three.js, sans nécessiter de modèles 3D, de textures images ou d'HDRI. Il est conçu pour les développeurs et les agents IA souhaitant produire des scènes 3D réalistes de manière reproductible et hautement contrôlable. Le pipeline couvre toutes les étapes : dimensionnement, construction du caisson et des fenêtres, placement des objets principaux, textures procédurales, petits objets de vie, cuisson de l'éclairage global (GI), post-traitement, validation et export vidéo. Le skill fournit un modèle de projet exécutable en une seule commande, intègre les sous-skills spécialisés (tissus, végétation, textures, etc.) et impose des règles d'intégration strictes (déterministe, subdivision adaptative, matériaux avec patch GI, séparation éclairage direct/indirect) pour garantir la cohérence et la reproductibilité. Il cible les plateformes Claude Code, Cursor, Codex et autres agents capables d'exécuter des scripts shell et de manipuler des fichiers JavaScript.

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

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Scène d'intérieur photoréaliste (guide général)

Ce skill enchaîne les sous-skills suivants en un pipeline cohérent et fournit un modèle de projet exécutable directement. La méthode s'inspire de room-at-dawn (MIT) : une chambre au petit matin, entièrement générée par code, exécutée dans le navigateur. Les ordres de grandeur du projet original sont :

  • 1,83 million de triangles, chargement en environ 7 secondes (RTX 4090).
  • Le fichier de GI cuit gi.bin fait environ 13 Mo, une cuisson prend environ 30 minutes.
  • La vidéo est en 4K HDR10.

Quel skill pour chaque étape

ÉtapeskillLivrable
03d-spec-promptRédiger l'idée sous forme de spécifications vérifiables : ambiance, heure, échelle, objet principal, caméra
1 Dimensions et structuretemplate/src/layout.js, parts/room.js de ce skillDimensions réelles (mètres), fenêtres, épaisseur des murs, coque
2 Objet principalthreejs-procedural-cloth (couette, couverture, rideaux), threejs-procedural-vegetation (arbre extérieur), threejs-procedural-pothos (plante intérieure)Objets au centre de l'attention
2b Ciel et extérieurthreejs-sky-backdrop (ciel préréglé, nuages, herbe extérieure, maisons, haie lointaine, ne construire que ce qui est visible)Un même ciel pour la cuisson et le rendu final
3 Matériauxthreejs-procedural-texturesMurs, sol, bois, tissu, traces d'usure, couverture de livre
4 Petits objetsthreejs-lived-in-propsTissu sur le dossier de la chaise, tasse, carafe, chaussettes, câbles, boulette de papier
5 Éclairagethreejs-baked-giRebonds de la lumière du ciel et du soleil cuits dans les sommets, sauvegardés dans gi.bin ; éclairage direct du soleil en temps réel
6 Renduthreejs-realtime-postAO, bloom, exposition séparée intérieur/extérieur, étalonnage
7 Validation, enregistrementwebgl-deterministic-recordingTests de régression par capture d'écran, rendu image par image, export vidéo (profondeur de champ, flou de mouvement, HDR10)

Créer un nouveau projet

bash <dossier_skill>/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/            contient déjà le fichier bake/gi.bin cuit
# http://127.0.0.1:5430/?bake=128   recuire après modifications, cliquer sur « Télécharger gi.bin », le placer dans bake/

(<dossier_skill> correspond au répertoire de base affiché lors du chargement de ce skill ; s'il est installé en tant que plugin, il se trouve dans ~/.claude/plugins/cache/)

  • Ce script copie le modèle et les bibliothèques de chaque sous-skill dans src/lib/ (gi, post, props, textures, cloth, vegetation, pothos, sky, film), le projet devient alors autonome.
  • Aucun outil de build ni npm n'est nécessaire. Three.js et three-mesh-bvh sont chargés depuis jsdelivr.
  • Paramètres d'URL :
    • ?cam= : caméra (room, desk, window, corner, view = debout près de la fenêtre regardant dehors).
    • ?t= : temps figé (feuilles et nuages immobiles, pour capture).
    • ?view=gi : visualiser uniquement l'éclairage cuit.
    • ?only=furniture : ne construire qu'une pièce spécifique.
    • ?exp= : exposition.
  • La page expose window.__ready, window.__stats, window.__camera, utilisables directement par les outils de webgl-deterministic-recording.
  • Contrôles : faire glisser pour tourner la vue ; WASD / flèches pour se déplacer (Shift pour marcher lentement, avec détection des murs et meubles) ; cliquer sur l'écran pour passer en mode rotation libre avec la souris, regard à 1,6 m (Échap pour quitter). En mode orbite, la caméra et le point d'intérêt restent confinés dans la pièce : ni zoom arrière ni translation ne traversent les murs.

Structure du modèle :

FichierContenu
src/layout.jsUnique endroit pour définir les dimensions, le soleil, le ciel (préréglages SKIES), la configuration extérieure (OUTSIDE), l'étalonnage, les caméras, les zones infranchissables des meubles (BLOCKERS)
src/materials.jslit() (patch GI, conserve le patch shader original, enregistre l'albédo), solid(), tbox(), tplane(), metres()
src/scene.jsConstruit chaque pièce selon order, ordre fixe
src/parts/room.jsSol, plafond, quatre murs, ouverture et rebord de fenêtre, coque noire, noyau de mur
src/parts/outside.jsExtérieur : sphère de ciel, herbe, chemin de gravier, haie, maison, arbres lointains, arbre principal et arbres de moyen-plan (ne construit que ce qui est visible, threejs-sky-backdrop + threejs-procedural-vegetation). Tout en gi = false, ne bloque pas la lumière de cuisson
src/parts/furniture.jsTable, chaise, serviette sur le dossier (PBD), tasse, carafe, livre sur la table, livres sur l'étagère
src/main.jsCréation de la scène → cuisson, chargement du fichier ou éclairage plat → soleil → réflexions → post-traitement → caméra (orbite + déplacement, confiné dans la pièce)

Règles d'intégration impératives entre skills

  1. Les unités sont en mètres, les coordonnées sont fixes. X le long du mur de la fenêtre, Z vers l'intérieur (mur de la fenêtre en z = 0, z < 0 est l'extérieur), Y vers le haut. Toutes les dimensions sont écrites uniquement dans layout.js.
  2. Déterministe. Les nombres aléatoires utilisent toujours RNG(seed). L'ordre, le nom et le nombre de sommets des pièces doivent rester inchangés ; si l'un d'eux varie, la cuisson de ce maillage devient invalide ; applyBake signalera les mailles obsolètes.
  3. La lumière est stockée dans les sommets, donc il faut subdiviser. Les surfaces recevant des objets sont subdivisées à 1,5–2 cm, les grandes surfaces à 4–8 cm. Utiliser tbox/tplane.
  4. Tous les matériaux éclairés doivent passer par lit(). giPatch remplace directement onBeforeCompile, et lit() enchaîne les patches originaux (variation des murs avec wallPatch, contre-jour du tissu, vent). Les matériaux texturés doivent fournir albedo (la avg de la texture) pour que la couleur des rebonds lumineux soit correcte.
  5. Répartition du soleil : La lumière directe est gérée par une DirectionalLight (intensité égale à sun.irr de la configuration de cuisson), les rebonds sont cuits dans le fichier. Ne pas ajouter de lumière ambiante ou d'hémisphère.
  6. Les murs doivent avoir un noyau plein, avec shadowSide réglé sur FrontSide. Sans cela, le soleil laisse des points lumineux au bas des murs et dans les coins (constaté en pratique ; voir references/integration.md).
  7. L'exposition doit être centrée sur l'intérieur. L'intérieur est environ 1/20 de l'extérieur : exposure ≈ 4,5, l'extérieur utilise ext ≈ 0,3 pour assombrir.
  8. Les réflexions sont capturées après la cuisson. captureEnv doit être exécuté après applyBake/runBake, la sonde placée au centre de la pièce.
  9. Lorsqu'il y a un arrière-plan extérieur, le far de la caméra doit être supérieur à l'objet le plus éloigné. Le modèle utilise 400 m (haie à 100 m, herbe jusqu'à 260 m). Avec un far de 100 m, la zone coupée au loin révèle une bande de brouillard blanc à l'horizon, qui suit le mouvement de la caméra (constaté en pratique).
  10. La caméra d'ombre du soleil doit couvrir la canopée de l'arbre extérieur pour que l'ombre des feuilles tombe à l'intérieur : le modèle place le soleil à 30 m, near 12, far 40.

Mesures (modèle, RTX 4090, Chrome headless, 1280×800)

  • Création de la scène en 1,2 secondes, dont la chute de la serviette en ~0,65 s ; 107 000 triangles ; affichage en ~1,6 s.
  • Cuisson en direct 128 spp : 61 407 points d'échantillonnage, 26 workers, 6 secondes, gi.bin 743 Ko. Au rechargement, application sur 39 maillages, 0 obsolète.
  • preview.jpg : vue de la pièce, du bureau, de la fenêtre, éclairage seul. preview-bake.jpg : à gauche éclairage plat, à droite après cuisson.

Pour aller plus loin

  • references/workflow.md : détail de chaque étape, décisions à prendre, livrables et points de validation.
  • references/integration.md : interfaces entre les skills, points d'attention, problèmes rencontrés.
  • references/checklist.md : liste de vérification et plages de valeurs de référence.

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」「窗外景色」「遠景」「背景房子」「地平線」「大氣透視」「霧化」「窗外的樹」「天空和光照對不上」「清晨/黃昏/陰天的天空」「只建看得到的東西」時使用。

Skills associés