山顶别墅的露台休闲区和户外餐桌,玻璃栏杆外是大海
露台休闲区和户外餐厅,截取自 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 中免费。可以在资源库的“豪宅”系列里找到它。

获取山顶别墅 · 制作属于你的房间