一句氛围描述,能换来什么样的 3D 场景?
能换来一套可编辑的 Blender 场景,而不是一张概念图。作者在 Codex 里给 Astra 的第一句话只有三样要求——极简但细节丰富的家具、一个花园、电影感氛围,既没有平面图也没有家具目录。
Astra 走的是 Blender Python API(bpy),建出建筑、细木作、家具、植物、材质、灯光和相机;成品自带低矮屋顶、开放起居空间、暖色木材、浅色石材和通向花园的开口,作者把这栋房子命名为 Solace。交付前的自检值得单独说:Astra 自己看了预览渲染,调整构图和灯光,修掉植物互相穿插、沙发搭毯没搭好的问题,作者并没有逐个物体下指令。但第一版范围有限——重点是有家具的起居亭,私密的一翼只用一个外轮廓体量表示。
一栋房子走过的六步
- 1一句氛围描述
只说极简但细节丰富的家具、一个花园、电影感,没有平面图与家具清单。
- 2先画概念平面图
先决定房间怎么连、私密空间放哪、人怎么走,再动手建模。
- 3建房间、家具与卫浴细节
沙发滚边、床架与床品、衣柜隔板、中空水槽、烤箱腔体都建成几何;材质混用扫描贴图。
- 4灯光与生活物件这一轮
移除压平房间的隐藏补光、让光源对应可见灯具,并加入餐具、书本、钥匙等日常物件。
- 530 秒 Blender 导览
四段镜头、离地约 1.65 米、24–26mm 镜头,Cycles 逐帧渲染 900 张 1080p 单帧。
- 6导出到 Unreal Engine 5
FBX 几何加 JSON 场景描述,重建材质与光照,加第一人称角色与碰撞。
这种自检不是碰运气,它背后是三层操作方式和一条固定循环。
Astra 到底怎么在 Blender 里干活?
靠三层手段叠起来:写脚本、让脚本在后台出图、再打开软件用眼睛验收。第一层是 Blender Python API(bpy),Astra 用 Python 建几何体、分配材质、摆灯光和相机,场景里每个物件都由代码生成,因此随时能回去改,而不是一个改不动的导入网格。
第二层是后台渲染:Astra 调用 Blender 自带的命令行,用 --python 跑脚本摆相机、选镜头、出图,不必打开图形界面,适合一遍遍出预览。第三层是 computer use:Astra 直接打开 Blender 界面,把屏幕里的场景和存下来的渲染图对着看,抓那些只看脚本发现不了的视觉问题。三层叠起来是一条固定的循环——生成场景、渲染预览、检查、发现问题、修正、再渲染。
整个流程里最具体的修复例子是钢制水槽:表面法线(决定光如何落在网格上的方向向量)出了问题,碗的平坦部分看起来像被掐进去,Astra 自己发现后修正法线、圆化边缘,画面干净了,厨房设计没动。这条循环的意义是:模型交出手之前,Astra 会先自己过一遍。它更像一个会检查自己稿子的初级设计师,而不是执行完命令就停手的工具。
类比自我审查循环像交稿前会自己先检查一遍的初级设计师,而不是执行完命令就停手的工具。
循环能修好画面,却定不了房间怎么连——所以把房子改大之前,作者先要了一张平面图。
为什么下一步不是加家具,而是先要一张平面图?
因为加法算不出动线。作者明确要求“先画平面图,我们从那里验证和迭代”,原因是继续往第一个场景里塞家具,回答不了房间怎么连接、私密空间放在哪、人怎么穿过房子。Astra 给出的方案是单层 U 形住宅围着种植庭院:中央亭是起居、用餐和厨房,两翼加三间卧室、一间办公室、浴室和更衣室,另配食品间、洗衣和储藏。平面图同时给出可检查项:卧室不能变成过道,绕庭院的一条路线,让两翼之间的走动不穿过厨房的工作通道,户外餐区、草坪和泳池延伸起居空间而不成为封闭房间。执行顺序也被写进指令——先把当前场景留作备份,在 Blender 里把新房子建到细节到位、几何正确,验证通过后再导出到 Unreal Engine 5。不过,这仍然只是可视化项目,概念平面图还需要对场地、结构和建筑规范做专业审查,才能用于指导施工。
空间关系定下来之后,画面是否可信就取决于镜头凑近时能看到的那些东西。
让房间看起来可信的,是材质贴图还是几何本身?
答案偏向几何。沙发坐垫连同滚边、弯曲椅框、书本和中空陶瓷都是建出来的:床有床架、排骨架、床垫和定型床品,衣柜有内部隔板和挂杆,书桌带线缆管理、显示器、键盘和带脚轮的椅子;水槽和水盆都做出了真的开口和中空碗体,厨房有烤箱腔体、烤架、餐具抽屉和食品架。
作者特意说明坐垫和床品是直接建出来的形状,不依赖布料模拟,所以能从别的角度看、也能带进漫游。材质则混合作者做的饰面与 Poly Haven 的扫描橡木、胡桃木、灰泥贴图(含 White Oak Veneer),Astra 对齐木纹方向,并让贴图尺度与家具实际尺寸一致。另一条检查线是关掉材质看实体:墙面、开口、家具和布局在没有材质的状态下更容易判断,Astra 还检查了门洞与墙的连接,并试走了几条穿过场景的路线。这条检查线也有上限——它不替代看图,也不等于每一处交接和建筑细节都已经正确。
布局和几何立住之后,作者又回头做了一遍让房子“像有人住”的处理。
“有人住”的感觉,是靠加光效还是加物件?
靠同时加物件和重做灯光。作者这一轮的 brief 很直白:灯光更安静、更暖、更准确,改善材质对光的反应,并添加餐具和日常物件。于是餐桌多了盘子、餐具、杯子和折好的餐巾,厨房台面有面包、香草和瓶子,咖啡桌上摊着笔记本、老花镜、马克杯、手机和钥匙——而且这些是建模实体:中空盘子、带竖纹的玻璃杯、叠好并缝了边的亚麻餐巾。灯光侧的改动更值得记:Astra 移除了把房间压平的隐藏补光,把剩下的光调暖,让光源与看得见的灯具对应,还建了天花板灯、把发光灯泡放进能透光的灯罩里,使高光和阴影与房间里的物体建立起清楚的关系。
静态图看着可以了,但细节最终要在运动里判断——于是有了那段 30 秒的导览。
30 秒的房子导览,是怎么被“导演”出来的?
先看预览渲染,再决定全渲染——顺序本身就是方法。作者要的是 1080p、30 秒、运镜有动感且像人。Astra 把它拆成四个镜头段落(主亭、办公室、浴室、卧室),用切换连接。脚本把相机放在离地约 1.65 米、用 24–26mm 镜头,每段开头结尾做速度缓动,加入克制的步行感,把视线引向家具和窗景;盯着白墙或结尾尴尬的镜头,也在看过预览后被换掉。为了让建筑看得更清楚,景深全程关闭。Cycles 把这段片子渲成 900 张独立的 1080p 单帧(按 30fps 播放),用自适应采样和 OpenImageDenoise 控噪;Astra 再把这些帧组装成影片,中间不插新帧——原因很直接:这是渲染出来的相机序列,每一帧都能花掉实时漫游给不了的时间。之后作者又加了 5 秒室外镜头(泳池、水面反射、躺椅)再进门,并额外产出五张原生 4K 静帧,覆盖外景、庭院、起居室、厨房和卧室。
这些数字在官方记录里都能一一对上,但渲染总耗时和硬件没有公布。
什么时候该离线渲染,什么时候该进引擎
| 条件 | 这个案例怎么做 | 可以怎么做 |
|---|---|---|
| 要判断气氛、材质和镜头的最终画质 | 案例用 Cycles 逐帧渲染,30 秒拆成 900 张 1080p 单帧,每帧可以花远比实时更长的时间 | 先把电影感做出来,再考虑是否需要可交互版本 |
| 想按人的高度自由走动、感受空间如何连接 | 案例把场景导出到 Unreal Engine 5,加第一人称角色与碰撞,打包成原生 Mac 应用 | 预留材质与光照的重新翻译和人工比对时间,别指望自动一致 |
| 要门、抽屉、灯和咖啡机真的能动 | 管线需要记录部件归属、铰接或滑动方式,以及哪个开关控制哪盏灯 | 导出前先想清楚哪些部件需要行为,再决定场景组织方式 |
| 打算把概念平面图用于施工 | 案例明确这仍是可视化项目,概念平面图需要场地、结构与建筑规范的专业审查 | 把它当作设计沟通材料,另行安排专业审查 |
电影可以慢慢逐帧渲染,可作者还想自己按人的高度走进去看看。
把同一个场景搬进 Unreal Engine 5,难在哪几步?
难在几何、材质、光照和碰撞都要换一套语言。导出环节,Astra 围绕已批准的 Blender 文件写了一条管线:把曲线和修改器生成的细节一并算进去,导出为 FBX,并写一份 JSON 场景描述,记录部件归属、材质以及灯光和相机的位置,让 Unreal 能重建场景;单位要从米换成厘米,坐标朝向也要改;反复出现的树保持共享几何实例,森林不必为每一棵生成完整网格。
材质要单独翻译:两套材质系统不同,Astra 读取 Blender 支持的材质输入、复用原贴图,在 Unreal 里重建木材、石材、织物、玻璃和水的材质,并保留贴图在几何上的位置和缩放(包括木纹),但有一部分着色逻辑只能近似还原,外观是否一致仍要看图比对。光照以太阳方向和手工摆放的灯为起点,Unreal 的天空和体积雾负责重建林地氛围,Astra 再对照 Blender 调整外部补光和雾。最后要能走:加第一人称角色、行走控制和起点,地板要能接住玩家,墙壁、家具和玻璃要挡住移动,附近树干可以当障碍,但不必让每一株蕨类植物都变成隐形墙;成品打包成原生 Mac 应用,并用角色的正常移动测试路线。把更有生活痕迹的那版房子搬回 Unreal 之后,管线记录了每个门或抽屉属于哪个部件、在哪里铰接或滑动、哪个开关控制哪盏灯;在 Unreal 里,门把手、抽屉盒和里面的物品随所属组件一起移动。最大的变化是能“用”这栋房子:按 E 键可以开门、打开厨房储物柜、开关选定的灯、操作意式咖啡机——按下按钮,咖啡流进杯子,液面上升。需要注意的是,这段漫游展示的是细节与灯光处理之前的较早版本房子。
类比跨引擎资产迁移像把一份手写食谱换成另一家厨房的设备:食材还是那些,但火候刻度、锅具尺寸全要重新标一遍。
两个引擎都在手里了,那怎么让它们真的可比?
怎么让 Blender 和 Unreal 的同一栋房子可比?
把两个引擎放进同一组机位。Astra 用更新后的房子和匹配的相机角度各做一套故事板,每套以一张大外景开头、后接六张房间与花园的小图;两套覆盖同样的七个主题,顺序也一致,相机位置、朝向和视野匹配,但各自保留自己的灯光、材质和色调映射。数字编号、短说明、字体和间距由 Astra 处理,同时保持每张图完整不裁切。一个已知瑕疵是:Unreal 版本的浴室镜面仍有反射伪影。差别来自两个引擎各自的成像方式,不代表优劣;能这样并排比的范围,就是这七个受控机位。
同一栋房子,两套故事板各自保留了什么
| 对比项 | Blender 版本 | Unreal Engine 5 版本 |
|---|---|---|
| 成像方式 | Cycles 渲染 | Lumen 静帧捕获 |
| 覆盖主题 | 七个主题,顺序一致 | 七个主题,顺序一致 |
| 相机口径 | 机位、朝向、视野匹配 | 机位、朝向、视野匹配 |
| 保留项 | 自己的灯光、材质、色调映射 | 自己的灯光、材质、色调映射 |
| 已知瑕疵 | 未提及 | 浴室镜面仍有反射伪影 |
同一套方法,作者还拿去做了三类完全不同的场景。
换成一个戴森球或一座莫奈花园,这套方法还成立吗?
成立的部分是同一个循环:先出预览,再由 Astra 从预览里挑问题。HELIOS 里,作者要的是一个带戴森球(Dyson sphere)的太阳系,这座虚构的集热结构最终长到数千块独立面板,带凹陷表面、散热鳍片、支撑结构和大控制枢纽;Astra 在预览中发现行星发白、土星环被画面裁掉,于是减弱补光、放宽构图;后来作者要从地球看近乎闭合的外壳,它建了带三个窄开口的新版本,预览里只有一束光看得清,它就把发光面移近开口,还调整了海洋材质,压掉一处会抢走注意力的反射。这批素材的来源被逐一标出。
太阳图像来自 NASA JPL / STEREO 与 SDO(由假彩色紫外影像改编),地球图像来自 NASA Earth Observatory 的 Blue Marble,夜间灯光署名 NASA Earth Observatory / Robert Simmon,使用 Suomi NPP VIIRS 数据,行星与云图来自 Solar System Scope / INOVE,按 CC BY 4.0 改编。Shipyard 里,AURELION-07 是一艘带锥形船体、分段环和四个细节推进器的巡洋舰,发动机有约束带、检修管线、凹陷喷口和同心发光开口,陶瓷装甲、机加工金属和玻璃有各自材质,程序化贴图改变装甲和金属的颜色、粗糙度与表面细节;它在预览里发现船首太平淡、背景行星太抢眼,下一轮就补上面板与接缝、加对接硬件和环形紧固件,并把行星移远变暗。Giverny 项目里,池塘以外的部分显得空,作者让它研究真实参考再扩展花园与建筑;表面仍显得平,它就加上带纹理的砾石和砌体、细化睡莲叶与花瓣。三个项目都保留了可编辑的几何、材质、灯光和相机,但边界同样明确——它们是电影化与可视化场景,不证明工程可行性、植物学准确性或历史还原的准确性。
想自己试一遍,第一句话该怎么说?
起步建议是:先挑一个你真想看到的地方或物体——一个房间、一件家具、一艘飞船或一片想象的地形,描述它的用途和氛围,然后向 Astra 要一个可编辑场景和几张用来评审的视图。先看大形状,再走近问哪里需要改;每一张渲染都是下一个设计决策的起点。从选工具的角度看,差别不在“能不能生成 3D”,而在生成之后还剩什么:拿到手的是一张成品图或一个不可编辑的网格,下一步只能重做;拿到手的是一套可编辑场景,才能继续改、继续导出、加交互,也能交给设计师接手。可编辑性决定了后面所有环节能不能接得上。边界同样写得明确:这是可视化概念,不是施工依据,而且整份记录都由发布方自己完成,没有第三方复现。
类比可编辑场景与生成结果像拿到可编辑的源文件而不是一张扁平图片:前者接着改,后者只能重做。



