山頂別墅的露台休閒區和戶外餐桌,玻璃欄杆外是大海
露台休閒區和戶外餐廳,擷取自 visionOS Simulator。

我們用到的工具

1. 從參考圖開始

山頂別墅從兩張參考圖開始:一張是剖切的俯視平面渲染圖,另一張是日落時分通往露台的挑高客廳。你可以用自己的圖,也可以請代理生成。

給代理的提示詞為一座現代山頂別墅生成兩張參考圖:一張是剖切的俯視平面渲染圖;另一張是黃金時刻的挑高客廳,通往露台,露台上有圍著火爐桌的休閒區、八人戶外餐桌和一座小泳池。
帶泳池、露台休閒區、戶外餐廳、客廳、廚房中島和樓梯的別墅剖切俯視渲染圖
我們用於平面的參考圖。
日落時分的挑高客廳:石灰華壁爐牆、象牙色沙發、毛圈扶手椅和玻璃管吊燈,通往俯瞰城市與海灣的露台
我們用於客廳的參考圖。

圖像生成不需要 API 金鑰。ChatGPT 訂閱裡包含的圖像生成就夠用了;我們只是剛好用了 Scenario 和 OpenAI API。

2. 規劃地面與座位

給代理的提示詞把這兩張參考圖變成以公尺為單位的平面圖和座位配置:兩層樓、挑高空間、露台和泳池。開始搭建之前先讓我看平面圖。

代理先以公尺為單位的數字寫出平面規劃,再把它畫出來。圖面、模型和座位都來自這一個檔案,所以移動一件家具時,它的座位也會跟著移動。

共有 33 個座位,分為 9 組。其中三組有可以隱藏的桌子:廚房中島、戶外餐廳和玻璃屋。

山頂別墅一樓與露台平面圖客廳廚房中島壁爐牆樓梯入口露台休閒區戶外餐廳泳池123456789101112131415161718192021222324252627北05 m
一樓和露台。帶編號的圓點是座位;虛線輪廓是上方的玻璃屋。
山頂別墅二樓平面圖,疊在一樓的淺色輪廓上挑空北側天橋書廊玻璃屋樓梯282930313233北05 m
二樓,疊在一樓的淺色輪廓上。
分組座位平面圖編號
客廳沙發41–4
客廳座椅45–8
廚房中島49–12
露台沙發513–17
露台休閒椅218–19
戶外餐廳820–27
玻璃屋228–29
北側天橋230–31
書廊232–33

3. 在 Blender 中搭建

給代理的提示詞依照這份平面圖,在無介面的 Blender 裡搭建出來。優先使用免費的 CC0 紋理,只生成缺少的部分。每張椅子先生成一張產品圖,再轉成 3D 模型。匯出前用渲染圖檢查每一個座位,並把三角形控制在 150,000 個以內。

對山頂別墅來說,就是 12 套來自 Poly Haven 的紋理、一套來自 ambientCG 的石灰華,再加上生成的石材、藝術畫和書背。六張椅子從產品圖變成了 3D 模型。第一版共有 148,484 個三角形。

挑高客廳的 Blender 渲染圖,視線越過沙發和旋轉椅,望向露台、泳池和戶外餐廳
1.0.4 版的 Blender 審查渲染圖。

4. 修正看到的問題

接著在 Apple Vision Pro 上試用這個房間,告訴代理哪裡不對。我們的三輪頭戴裝置回饋,概括起來就是這樣的提示詞:

給代理的提示詞在頭戴裝置裡,我點不到玻璃屋的書桌,挑空周圍的護欄玻璃看不見,腳凳朝向不對,火焰也太大了。把這些修好。
給代理的提示詞靠枕往前傾,有兩個座位坐得太深,檯燈也太亮了。
給代理的提示詞泳池改用 Locus 內建的房間水面,不要用建模的水。
沿南牆的懸浮橡木樓梯,以及上層樓板下的廚房中島
樓梯和廚房中島,擷取自 visionOS Simulator。
兩張羔羊絨旋轉椅面對廚房中島,敞開的玻璃門外是戶外餐廳
從客廳望向廚房,擷取自 visionOS Simulator。

5. 提升影格率

第一版在頭戴裝置上跑得很慢。讓它流暢起來,用的是這樣的提示詞:

給代理的提示詞為什麼在頭顯上這麼慢?

代理檢查了整個 Room,發現貼圖一共有 1.65 億像素,還有八盞即時聚光燈,並提出了修改建議。

給代理的提示詞就這麼做:依觀看距離調整貼圖尺寸,減少即時聚光燈。
給代理的提示詞把每一盞燈都烘焙進光照層,不再保留任何即時燈光。

貼圖從 1.65 億像素降到 3300 萬像素。最後,每一盞燈都烘焙進了五個可開關的燈組之一,不再有即時聚光燈。烘焙又讓下載變大了:現在大約 118 MB。

更多細節

如果你好奇,這裡多聊一點這個房間是怎麼一步步做出來的。

花了多久?

大約一天。我們 10 月 23 日傍晚從參考圖開始,隔天上午第一個定稿版本就完成了。

第 4、5 步裡的頭顯修正是之後幾輪回饋裡做的。

花了多少錢,用了哪些服務?

不多。以下是我們付過費的全部項目:

  • Scenario:用 GPT Image 2 生成六張椅子產品圖,用 Rodin Gen-2.5 生成八個圖生 3D 模型,其中兩個是重做的。共 750 CU。
  • OpenAI Images:六次請求,生成兩種石材紋理、壁爐上的藝術畫、一張書背圖集,以及兩根最後沒用上的橄欖枝。約 0.30 美元。
  • fal:用一張椅子做的三視圖圖生 3D 測試,1.35 美元。結果沒有用進成品。

圖像生成可以直接用 ChatGPT 訂閱裡包含的用量,不需要 API 金鑰。我們只是剛好用了 Scenario 和 API。

我們沒有用其他生成服務:沒有 Tripo、Meshy、Hunyuan3D 或 Trellis。以上費用是記錄下來的用量,不是發票金額。

Locus 本身需要修改嗎?

有一些。這麼大的房間碰到了 App 的一些極限。這些修正都已經發布,所以類似的房間可以直接受益:

  • 打開「座位」時,玻璃屋裡的影格率掉到 2–3 fps:每個座位標記每秒十次重新檢查自己和整棟房子之間的視線。現在標記會記住視線,直到你或標記移動為止,開銷從每格 300–450 ms 降到不到 1 ms。
  • 火焰變成了真正的 3D 火焰。先是讓線性燃燒器的火焰保持在燃燒器自己的平面裡;接著把看起來像剪紙的扁平火焰換成體積火焰,現在它直接從燃燒器上燃起,而不是懸在上方 6 cm。
  • 在露台的一個座位上,移動座位的疊加層蓋住了泳池,水面就消失了。現在這個疊加層不會再遮住後面的東西。
  • 從樓上的座位看,View 裡的樹近得讓人不舒服,所以房間現在可以隱藏 View 中近處的景物。
  • 成組的、部分被遮住的座位標記(例如樓上書桌那個)現在可以直接選取。
  • 為了在頭戴裝置上找出拖慢影格率的原因,我們加了可以關閉火焰或透明表面的內部開關。

房間水面和烘焙光照層在 Locus 裡本來就有,山頂別墅只是用上了它們。

在 Apple Vision Pro 上執行得如何?

我們在頭戴裝置上量測了 1.0.2 版。坐著看時維持 90 fps。書廊的座位是 61–69 fps,關掉火焰或隱藏透明表面後可達 90。

這些數字來自帶額外效能日誌的 Locus 偵錯版,App Store 版沒有這些。自己做 Room 時,描述你在頭顯上看到的情況,讓代理去檢查貼圖、三角面和燈光就行。

這個房間還沒有使用 GPU 紋理壓縮,我們也還沒有在目前版本上重新量測舒適度和效能。

過程中出過哪些問題?

  • 生成的家具在 App 裡顯示成黑色,因為粗糙度和金屬度被打包進了同一張紋理。把它們拆開就解決了。
  • 書本離書架最多懸空 0.6 m:每本書都繞著錯誤的原點旋轉了。
  • 靠枕向前傾,原因是一個正負號寫反了。
  • 讓所有相同的材質共用一份,聽起來很聰明,但記憶體反而增加了大約 132 MiB,所以我們放棄了。

山頂別墅在 Locus 中免費。可以在資源庫的「豪宅」系列裡找到它。

取得山頂別墅 · 製作屬於你的房間