Community画像github.com

threejs-photoreal-interior

Three.jsでプログラムのみでフォトリアルな室内シーンをゼロから構築するための統合ガイド。モデルファイル、テクスチャ、HDRIは一切不要で、各サブスキルを連携させてワンコマンドで実行可能なプロジェクトを作成します。

threejs-photoreal-interior とは?

このスキルは、Three.jsを使用してプログラムのみでフォトリアルな室内シーンを構築するための統合ガイドです。モデルファイル、テクスチャ、HDRIを一切必要とせず、コードのみで完結する点が最大の特徴です。部屋の寸法設定、外壁と窓の配置、主要オブジェクト(家具、観葉植物、カーテンなど)の生成、テクスチャのプロシージャル生成、小物の配置、そしてベイクドGIによる照明とリアルタイムポストプロセスまでをカバーします。対応プラットフォームはブラウザ上で動作するThree.jsアプリケーションで、特にClaude Code、Cursor、CodexなどのAIエージェントと連携して利用することを想定しています。各サブスキル(threejs-procedural-cloth、threejs-baked-gi、threejs-realtime-postなど)を統合するルールを定義し、決定論的なシード生成、頂点ベースのライティング、太陽光と間接光の適切な役割分担などを徹底することで、一貫性のある高品質な出力を実現します。そして、わずか1つのコマンドで新しいプロジェクトをセットアップし、スクリプト生成、ライティングのベイク、リアルタイムレンダリング、動画出力までを一括で行えるテンプレートを提供します。

対応✓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 約13 MB、ベイク時間約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、ブルーム、窓外と室内の露出を個別に調整、カラーグレーディング
7 検証、録画webgl-deterministic-recordingスクリーンショット回帰テスト、フレームごとのレンダリング、映画出力(被写界深度、モーションブラー、HDR10)

新規プロジェクト作成

bash <スキルフォルダ>/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/ に保存

(<スキルフォルダ> はこのスキルをロードしたときに表示されるベースディレクトリです。プラグインとしてインストールされている場合は ~/.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シーン構築 → ベイク、ファイル読み込み or フラットライト → 太陽 → 反射 → ポストプロセス → カメラ(オービット+移動、部屋内に制限)

スキル間の絶対ルール

  1. 単位はメートル、座標は固定。 X は窓壁に沿って、Z は室内方向(窓壁は z = 0、z < 0 は室外)、Y は上。すべてのサイズは layout.js にのみ記述。
  2. 決定論的。 乱数はすべて RNG(seed) を使用。パーツの順序、名前、頂点数が1つでも変わると、そのメッシュのベイクは無効になります。applyBake は古いデータを報告します。
  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ワーカー、6秒、gi.bin 743 KB。再ロード後、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」「窗外景色」「遠景」「背景房子」「地平線」「大氣透視」「霧化」「窗外的樹」「天空和光照對不上」「清晨/黃昏/陰天的天空」「只建看得到的東西」時使用。

関連スキル