CommunityImagengithub.com

threejs-photoreal-interior

Usa three.js para crear desde cero una escena interior fotorrealista, completamente generada por código, sin necesidad de modelos, texturas o HDRI. Esta guía abarca el flujo completo, la integración de skills y un proyecto ejecutable listo para usar.

¿Qué es threejs-photoreal-interior?

Este skill es una guía integral y un proyecto plantilla para crear escenas interiores fotorrealistas con three.js, completamente generadas por procedimientos, sin necesidad de modelos 3D externos, texturas o HDRI. Está basado en el proyecto room-at-dawn (MIT) y organiza el flujo de trabajo en pasos numerados, desde la especificación hasta la salida de video cinematográfica. Incluye un script que genera un proyecto independiente con todas las dependencias necesarias (excepto npm o bundlers), configurado con iluminación horneada (GI), materiales procedurales, objetos pequeños, vegetación, y un sistema de cámara que permite caminar dentro de la escena. El skill también define reglas críticas de integración entre sub-skills, como el uso de unidades en metros, generación determinista con RNG, manejo de la luz solar, y la necesidad de que todas las superficies iluminadas pasen por un parche GI. El proyecto resultante se ejecuta en el navegador y produce imágenes de alta calidad, con soporte para horneado de iluminación en vivo, post-procesado y grabación de video HDR. Es ideal para desarrolladores que quieran crear escenas 3D realistas sin activos externos y necesiten un flujo de trabajo reproducible y automatizado.

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

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Fotoreal Interior Scene (Guía General)

Este skill combina varios skills en un flujo de trabajo y proporciona una plantilla de proyecto ejecutable. El método proviene de room-at-dawn (MIT): una habitación al amanecer, completamente generada por código, que se ejecuta en el navegador. Las dimensiones del proyecto original son aproximadamente:

  • 1.83 millones de triángulos, carga en unos 7 segundos (RTX 4090).
  • El archivo de iluminación horneada gi.bin tiene unos 13 MB, tarda unos 30 minutos en hornearse.
  • El video es 4K HDR10.

Qué skill usar en cada paso

PasoSkillQué entregas
03d-spec-promptEscribe la idea como una especificación verificable: ambiente, hora, escala, objeto principal, cámara
1 Dimensiones y carcasatemplate/src/layout.js, parts/room.js de este skillDimensiones reales (metros), ventana, grosor de pared, carcasa
2 Objeto principalthreejs-procedural-cloth (edredón, manta, cortina), threejs-procedural-vegetation (árbol fuera de la ventana), threejs-procedural-pothos (planta interior)Objetos que son el foco visual
2b Cielo y exteriorthreejs-sky-backdrop (cielo predeterminado, nubes, césped exterior, casa, seto lejano, solo construir lo que se ve)El mismo cielo para horneado y visualización
3 Materialesthreejs-procedural-texturesPared, suelo, madera, tela, desgaste, cubierta de libro
4 Objetos pequeñosthreejs-lived-in-propsPaño colgado en el respaldo de la silla, taza, botella, calcetines, cables, bola de papel
5 Iluminaciónthreejs-baked-giLuz de cielo y rebotes del sol horneados en los vértices, guardados como gi.bin; luz solar directa en tiempo real
6 Imagenthreejs-realtime-postAO, bloom, exposición separada para exterior e interior, corrección de color
7 Verificación, grabaciónwebgl-deterministic-recordingCapturas de pantalla de regresión, renderizado fotograma a fotograma, salida de video (profundidad de campo, desenfoque de movimiento, HDR10)

Crear un nuevo proyecto

bash <carpeta-del-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/            Ya incluye bake/gi.bin horneado
# http://127.0.0.1:5430/?bake=128   Para rehornear después de cambiar la escena, presiona "Descargar gi.bin", guárdalo en bake/

(<carpeta-del-skill> es el directorio base que se muestra al cargar este skill; cuando se instala como plugin está en ~/.claude/plugins/cache/)

  • Este script copia la plantilla y copia las bibliotecas de cada sub-skill en src/lib/ (gi, post, props, textures, cloth, vegetation, pothos, sky, film). El proyecto funciona de forma independiente desde entonces.
  • No necesita herramientas de empaquetado ni npm. three y three-mesh-bvh se cargan desde jsdelivr.
  • Parámetros de URL:
    • ?cam= : Cámara (room, desk, window, corner, view=parado junto a la ventana mirando hacia afuera).
    • ?t= : Hora fija (hojas y nubes no se mueven, para capturas).
    • ?view=gi : Solo ver iluminación.
    • ?only=furniture : Construir solo una parte.
    • ?exp= : Exposición.
  • La página proporciona window.__ready, window.__stats, window.__camera, que se pueden conectar directamente con las herramientas de webgl-deterministic-recording.
  • Controles: Arrastrar para girar la vista; WASD / Flechas para caminar (Shift para caminar lento, choca con paredes y muebles); Haz clic en la pantalla para cambiar a giro de cabeza con el ratón, la vista baja a 1.6 m (Esc para salir). En modo órbita, la cámara y el punto de mira están limitados dentro de la habitación; al alejar o desplazar no se sale de las paredes.

Estructura de la plantilla:

ArchivoContenido
src/layout.jsEl único lugar para dimensiones, sol, cielo (valores predeterminados SKIES), configuración exterior (OUTSIDE), corrección de color, cámaras, áreas infranqueables de muebles (BLOCKERS)
src/materials.jslit() (parche GI, conserva el parche shader original, registra albedo), solid(), tbox(), tplane(), metres()
src/scene.jsCrea cada parte según order, el orden es fijo
src/parts/room.jsSuelo, techo, cuatro paredes, hueco de ventana y alféizar, carcasa negra, núcleo de pared
src/parts/outside.jsExterior: esfera de cielo, césped, camino de grava, seto, casa, seto lejano, árbol principal y árboles a media distancia (solo construir lo que se ve, threejs-sky-backdrop + threejs-procedural-vegetation). Todos con gi = false, no bloquean la luz horneada
src/parts/furniture.jsMesa, silla, toalla colgada en el respaldo (PBD), taza, botella, libros sobre la mesa, libros en la estantería
src/main.jsCrear escena → hornear, cargar archivo o luz plana → sol → reflejos → post-procesado → cámara (órbita + caminar, limitada dentro de la habitación)

Reglas a seguir estrictamente entre skills

  1. Las unidades son metros, las coordenadas fijas. X a lo largo de la pared de la ventana, Z hacia el interior (la pared de la ventana está en z = 0, z < 0 es exterior), Y hacia arriba. Todas las dimensiones solo se escriben en layout.js.
  2. Determinista. Los números aleatorios siempre usan RNG(seed). Si cambia el orden, el nombre o el número de vértices de una pieza, la horneada de esa malla se invalida; applyBake reportará stale.
  3. La luz está en los vértices, por lo que hay que subdividir. Las superficies donde se colocan objetos se subdividen a 1.5–2 cm, áreas grandes a 4–8 cm. Usa tbox / tplane.
  4. Todos los materiales iluminados deben pasar por lit(). giPatch reemplaza directamente onBeforeCompile; lit() encadena el parche original después, incluyendo cambios en la pared (wallPatch), tela contraluz, viento. Los materiales con textura deben proporcionar albedo (el avg de la textura), para que el color de la luz reflejada sea correcto.
  5. División del trabajo del sol: La luz directa usa DirectionalLight (intensidad igual a sun.irr configurado en el horneado), la luz reflejada se hornea en el archivo. No agregues luz ambiental ni luz hemisférica.
  6. Las paredes deben tener un núcleo macizo, con shadowSide configurado como FrontSide. Sin él, el sol filtrará puntos brillantes en la base de las paredes y esquinas (problema real; ver references/integration.md).
  7. La exposición se ajusta al interior. El interior tiene aproximadamente 1/20 de la luz exterior: exposure alrededor de 4.5, el exterior con ext alrededor de 0.3 para oscurecer.
  8. Los reflejos se capturan después del horneado. captureEnv debe ejecutarse después de applyBake/runBake, con la sonda en el centro de la habitación.
  9. Cuando hay paisaje exterior lejano, el far de la cámara debe ser mayor que el objeto más lejano. La plantilla usa 400 m (el seto está a 100 m, el césped se extiende hasta 260 m). Si far es solo 100, el círculo donde se corta el paisaje lejano mostrará una neblina blanca en el horizonte que se mueve con la vista (problema real).
  10. La cámara de sombra del sol debe cubrir las copas de los árboles fuera de la ventana para que la sombra de los árboles entre: la plantilla coloca el sol a 30 m de distancia, near 12, far 40.

Mediciones (Plantilla, RTX 4090, Chrome headless, 1280×800)

  • Construcción de la escena: 1.2 segundos, de los cuales la toalla colgante tarda unos 0.65 segundos; 107,000 triángulos; desde que se abre la página hasta que aparece la imagen, unos 1.6 segundos.
  • Horneado en vivo a 128 spp: 61,407 puntos de muestreo, 26 workers, 6 segundos, gi.bin 743 KB. Tras recargar, se aplican 39 mallas, 0 inválidas.
  • preview.jpg: Habitación, lado de la mesa, ventana, solo luz. preview-bake.jpg: izquierda luz plana, derecha después del horneado.

Más información

  • references/workflow.md: Pasos de cada etapa, decisiones a tomar, entregables y puntos de verificación.
  • references/integration.md: Interfaces entre skills, puntos a tener en cuenta, problemas encontrados.
  • references/checklist.md: Lista de verificación y rangos de referencia numérica.

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 relacionados