Community이미지github.com

threejs-photoreal-interior

three.js로 사진처럼 사실적인 실내 장면을 처음부터 만들기 위한 총체적인 가이드이자 시작점입니다. 모델 파일, 텍스처, HDRI 없이 완전히 코드로 생성됩니다.

threejs-photoreal-interior란 무엇인가요?

이 스킬은 three.js를 사용하여 코드로만 사실적인 실내 장면을 생성하는 완전한 워크플로우를 제공합니다. 각 단계(레이아웃, 메인 객체, 재질, 소품, 베이킹된 GI, 후처리, 검증, 영화 출력)를 위한 하위 스킬을 오케스트레이션하며, 'room-at-dawn' 프로젝트를 기반으로 합니다. 사용자는 단일 명령으로 실행 가능한 새 프로젝트를 만들 수 있으며, 템플릿에는 방, 창문, 나무 바닥, 벽, 테이블, 의자, 수건, 책장, 컵, 주전자, 현장 베이킹 및 후처리가 포함됩니다. 엄격한 통합 규칙(단위: 미터, 결정적 난수, 꼭짓점별 조명, GI 패치, 태양 직사광 vs 베이킹된 반사광 분리, 그림자 누수 방지)을 적용하여 안정적인 고품질 결과를 보장합니다. 검증 체크리스트와 실제 측정값(RTX 4090에서 107k 삼각형, 1.2초 로딩, 5분 베이킹)이 제공됩니다.

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

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

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

사진 같은 실내 장면 (총론)

이 스킬은 여러 하위 스킬을 하나의 워크플로우로 연결하고, 바로 실행 가능한 프로젝트 템플릿을 제공합니다. 방법은 room-at-dawn(MIT)에서 가져왔습니다. 새벽 침실로, 전적으로 코드로 생성되어 브라우저에서 실행됩니다. 원본 프로젝트의 규모는 대략 다음과 같습니다:

  • 183만 개의 삼각형, 로딩 약 7초(RTX 4090).
  • 베이킹된 조명 파일 gi.bin 약 13MB, 베이킹 한 번에 약 30분.
  • 비디오는 4K HDR10.

각 단계에 사용할 스킬

단계스킬무엇을 납품하는가
03d-spec-prompt아이디어를 검증 가능한 사양으로 작성: 분위기, 시간, 척도, 주요 객체, 카메라
1 크기와 외피이 스킬의 template/src/layout.js, parts/room.js실제 크기(미터), 창문, 벽 두께, 외피
2 주요 객체threejs-procedural-cloth(이불, 담요, 커튼), threejs-procedural-vegetation(창밖 나무), threejs-procedural-pothos(실내 식물)시선이 가는 객체
2b 하늘과 창밖threejs-sky-backdrop(하늘 프리셋, 구름, 창밖 잔디, 집, 먼 나무 벽, 보이는 것만 생성)동일한 하늘을 베이킹과 화면 모두에 제공
3 재질threejs-procedural-textures벽, 바닥, 나무, 직물, 사용 흔적, 책 표지
4 소품threejs-lived-in-props의자에 걸린 천, 컵, 주전자, 양말, 전선, 종이 뭉치
5 조명threejs-baked-gi하늘 빛과 태양 반사광을 꼭짓점에 베이킹하여 gi.bin에 저장; 태양 직사광은 실시간 조명 사용
6 화면threejs-realtime-postAO, bloom, 창밖과 실내 별도 노출, 색보정
7 검증, 녹화webgl-deterministic-recording스크린샷 회귀, 프레임별 렌더링, 영화 출력(피사계 심도, 모션 블러, HDR10)

새 프로젝트 만들기

bash <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/            이미 베이킹된 bake/gi.bin이 포함됨
# http://127.0.0.1:5430/?bake=128   장면을 변경한 후 다시 베이킹하고, "gi.bin 다운로드"를 클릭하여 bake/에 저장

(<skill 폴더>는 이 스킬을 로드할 때 표시되는 기본 디렉토리입니다. 플러그인으로 설치된 경우 ~/.claude/plugins/cache/ 아래에 있습니다.)

  • 이 스크립트는 템플릿을 복사하고, 각 하위 스킬의 라이브러리를 src/lib/(gi, post, props, textures, cloth, vegetation, pothos, sky, film)에 복사합니다. 프로젝트는 이후 독립적으로 작동합니다.
  • 번들러가 필요 없으며 npm도 필요하지 않습니다. three와 three-mesh-bvh는 jsdelivr에서 로드됩니다.
  • URL 매개변수:
    • ?cam=: 카메라 (room, desk, window, corner, view-창가에 서서 밖을 봄).
    • ?t=: 시간 고정 (나뭇잎, 구름이 움직이지 않음, 스크린샷용).
    • ?view=gi: 조명만 보기.
    • ?only=furniture: 특정 부품만 생성.
    • ?exp=: 노출.
  • 페이지는 window.__ready, window.__stats, window.__camera를 제공하며, webgl-deterministic-recording 도구에 직접 연결할 수 있습니다.
  • 조작: 드래그하여 시점 회전; WASD/방향키로 이동(Shift 느린 걸음, 벽과 가구 충돌); 화면 클릭 시 마우스로 직접 고개 돌리기로 전환, 시선 높이 1.6m(Esc 종료). 궤도 모드의 카메라와 시점은 방 안으로 제한되어 있으며, 확대/축소와 평행 이동 시 벽을 뚫고 나가지 않습니다.

템플릿 구조:

파일내용
src/layout.js유일하게 크기, 태양, 하늘(SKIES 프리셋), 창밖 구성(OUTSIDE), 색보정, 카메라, 통과 불가 가구 범위(BLOCKERS)를 설정하는 곳
src/materials.jslit()(GI 패치, 기존 셰이더 패치 유지, 알베도 기록), solid(), tbox(), tplane(), metres()
src/scene.jsorder에 따라 각 부품을 생성, 순서 고정
src/parts/room.js바닥, 천장, 네 벽, 창문 구멍과 창턱, 검은 외피, 벽 심
src/parts/outside.js창밖: 하늘 구체, 잔디, 자갈길, 울타리, 집, 먼 나무 벽, 주요 나무와 중원경 나무(보이는 것만 생성, threejs-sky-backdrop + threejs-procedural-vegetation). 모두 gi = false, 베이킹 조명 차단 안 함
src/parts/furniture.js테이블, 의자, 의자에 걸린 수건(PBD), 컵, 주전자, 탁자 위 책, 책장 위 책
src/main.js장면 생성 → 베이킹, 파일 읽기 또는 플랫 라이트 → 태양 → 반사 → 후처리 → 카메라(궤도 + 이동, 방 안으로 제한)

크로스 스킬 규칙 (반드시 지켜야 함)

  1. 단위는 미터, 좌표 고정. X는 창문 벽을 따라, Z는 실내로(창문 벽은 z = 0, z < 0은 실외), Y는 위로. 모든 크기는 layout.js에만 작성.
  2. 결정성. 난수는 항상 RNG(seed) 사용. 부품의 순서, 이름, 꼭짓점 수 중 하나라도 변경되면 해당 메시의 베이킹이 무효화됨; applyBake가 stale을 보고함.
  3. 조명은 꼭짓점에 존재하므로 세분화 필요. 물체가 놓인 표면은 1.5–2 cm, 넓은 면적은 4–8 cm로 분할. tbox/tplane 사용.
  4. 조명을 받는 모든 재질은 lit()을 통과해야 함. giPatch가 onBeforeCompile을 직접 대체하고, lit()은 기존 패치(벽면 변화 wallPatch, 직물 역광, 바람)를 뒤에 연결함. 텍스처가 있는 재질은 albedo를 제공해야 함(텍스처의 avg), 반사광 색상이 정확해짐.
  5. 태양 분업: 직사광은 DirectionalLight(강도는 베이킹 설정의 sun.irr과 동일)를 사용하고, 반사광은 파일에 베이킹함. 환경광이나 반구광을 추가하지 마십시오.
  6. 벽은 단단한 벽 심을 가져야 하며, 벽 심의 shadowSide는 FrontSide로 설정. 이것이 없으면 태양이 벽 바닥과 모서리에 일렬로 밝은 점을 누출함(실제 경험 있음; 자세한 내용은 references/integration.md 참조).
  7. 노출은 실내에 맞춤. 실내는 실외의 약 1/20: exposure 약 4.5, 창밖은 ext 약 0.3으로 어둡게 처리.
  8. 반사는 베이킹 후에 캡처. captureEnv는 applyBake/runBake 이후에 실행, 프로브는 방 중앙에 배치.
  9. 창밖 원경이 있을 때, 카메라 far는 가장 먼 객체보다 커야 함. 템플릿은 400m(나무 벽이 100m, 잔디가 260m까지 확장). far가 100에 불과하면 원경이 잘린 부분에 흰색 수평선 안개 띠가 나타나고 시점에 따라 움직임(실제 경험 있음).
  10. 태양 그림자 카메라는 창밖 나무 캐노피를 포함해야 함, 나무 그늘이 안으로 들어오도록: 템플릿은 태양을 30m 밖에 배치, near 12, far 40.

실제 측정 (템플릿, RTX 4090, Chrome headless, 1280×800)

  • 장면 생성 1.2초, 이 중 수건 걸기 약 0.65초; 10.7만 개 삼각형; 페이지 열기부터 화면 출력까지 약 1.6초.
  • 현장 베이킹 128 spp: 61,407개 샘플 포인트, 26개 worker, 6초, gi.bin 743KB. 다시 로드 후 39개 메시에 적용, 0개 무효.
  • preview.jpg: 방, 책상 옆, 창문, 조명만 보기. preview-bake.jpg: 왼쪽은 플랫 라이트, 오른쪽은 베이킹 후.

추가 정보

  • references/workflow.md: 각 단계의 절차, 결정 사항, 납품물 및 체크포인트.
  • references/integration.md: 각 스킬 간 인터페이스, 주의 사항, 겪었던 문제.
  • references/checklist.md: 검증 체크리스트 및 숫자 참조 범위.

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

관련 스킬