用 Astra 在 Blender 中从一段描述搭建可编辑 3D 房屋场景
Architectural visualization with Astra
OpenAI Developers 博客展示作者用 Codex 中的 Astra 将一段房屋设计简报逐步发展为可编辑的 Blender 3D 场景,涵盖建筑、家具、材质、灯光与地板图,并经 Cycles 渲染出 30 秒 900 帧 1080p 相机漫游。
作者完整记录了用 Astra 在 Blender 与 Unreal Engine 5 中迭代搭建可编辑 3D 场景的流程、提示词与导出管线,方法可迁移到自己的场景设计项目。
我从一个简单的房屋需求开始:极简但细节丰富的家具、一个花园,以及电影般的氛围。我让 Codex 中的 Astra 把这个需求变成 Blender 中可编辑的 3D 场景。我们把它发展成了一栋带家具的家庭住宅,在 Unreal Engine 5 中探索了一个版本,并不断打磨 Blender 场景,直到我能导演一场穿越其中的镜头巡游。
第一个场景以一座带家具的起居亭为中心。后来我们为一栋更大的家庭住宅制定了平面图,然后才建造它的各个房间。在此过程中,我与 Astra 一起处理建筑、家具、材质和照明,用每个版本决定下一步要开发什么。最新一轮添加了日常物品和更温暖的照明,让这栋房子有了生活气息。
房屋的镜头巡游,使用 Cycles 在 Blender 中渲染。
我收录了项目中的几条提示词,为长度和清晰度做了编辑。它们展示了随着我看到 Astra 能建造什么,需求是如何演变的。
从房屋和氛围开始
我的第一条提示词描述了我想要的结果,但没有提供平面图或家具目录:
设计一栋漂亮的房子,配有极简但高度细节化的家具和一个漂亮的花园。让场景具有电影感,有经过考量的照明、材质和一天中的时间。
Astra 通过 Blender Python API(bpy)构建了一个可编辑的场景。它创建了建筑、细木工、家具、植物、材质、灯光和摄像机。第一个结果已经有了我想要的低矮屋顶、开放式起居空间、温暖的木材、浅色石材以及与花园的连接。我们把这栋房子命名为 Solace。

最初的 Courtyard House,由第一条设计提示词生成。
那栋房子来自一条设计提示词,但 Astra 在交回之前仍然对自己的工作进行了迭代。它检查了预览渲染,调整了构图和照明,并修正了植物相交和沙发上的搭毯等细节。我不必描述每一个物体,也不必指导每一项改动。
在这个阶段,带家具的起居亭是重点。私人翼楼仍然由一个外部体量表示。它给了我们一个可发展的视觉方向,而不是一个完整的家庭住宅布局。
我的下一个请求改变了环境:
把它变成黄金时刻。我们应该看到太阳,房子应该位于一片翠绿森林的中央。
Astra 保留了房子,并在它周围建造了森林。它添加了层层树木和林下植被,放置了太阳,并使用大气散射让光线透过林地可见。现在视野在花园边缘之外有了纵深,温暖的室内在树木的映衬下格外突出。

经过森林和黄金时刻照明处理后的同一栋早期房屋。
最初的房子及其花园是程序化建模的。对于更大的森林,Astra 使用了 Poly Haven 中现有的树木、蕨类和岩石资产。这让工作可以专注于安排环境并让场景感觉恰到好处。
在建模之前先画出更大的房子
一旦我喜欢这个方向,我就想走得更远。一个中间版本添加了带家具的卧室套房,并改进了几何结构、厨房和家具。然后我要求建造一栋更大的房子,作为一家人居住的地方要合理:
我喜欢这种极简、现代的风格,所以在把房子扩展得更宜居的同时请保持这一点。先给我画一张平面图。我们会从那里验证并逐步完善它。
这改变了工作方式。我们必须决定房间如何连接、私密空间位于何处,以及人如何在房屋中穿行。在第一个场景中添加更多家具无法回答这些问题。
Astra 提出了一个围绕种植庭院展开的单层 U 形住宅方案。客厅、用餐区和厨房构成了中央亭阁。两翼增加了三间卧室、一间办公室、浴室和一间更衣室。食品储藏室、洗衣房和储物空间为厨房和家务提供了各自的支持性房间。

我们在重建房屋之前审阅的概念平面图。选择图片以全尺寸打开。
该平面图还为我们提供了需要检查的具体事项。卧室不必变成通道。围绕庭院的路线使两翼之间的通行避开厨房的工作通道。户外用餐区、草坪和泳池延伸了生活空间,而不会变成封闭的房间。
我批准了这个方向,并要求 Astra 在构建新版本之前保留现有场景:
将当前场景保留为备份,然后在 Blender 中构建更新后的房屋。不断迭代,直到房屋、家具和花园细节丰富且几何结构正确。在 Blender 中验证后,我们会将其导出到 Unreal Engine 5。
这个顺序很重要。我们可以先审阅平面图,再审阅模型,然后才承担实时漫游的额外工作。这仍然是一个可视化项目;概念平面图仍需经过对场地、结构和建筑要求的专业审查,才能用于指导施工。
构建房间和家具
Garden House 保留了森林环境和克制的色调,但围绕已批准的平面图扩展了建筑。庭院成为构图的中心,两侧的房间都可以眺望庭院。

经过建筑和电影化收尾处理后在 Blender 中渲染的扩展版 Garden House。
家具是让这些房间显得逼真的重要部分。Astra 对沙发坐垫及其滚边、弧形椅架、书籍和空心陶瓷物件进行了建模。床有床架、床板、床垫和成形的床上用品。衣柜有内部结构、搁板和挂衣杆。办公室有一张带线缆管理的书桌、一台显示器、一个键盘和一把带脚轮的椅子。
这些细节是场景中的几何体。它们可以从另一个角度被检查,并带入漫游中。坐垫和床上用品是手工制作的形状,因此结果不依赖于运行布料模拟。

客厅,带有建模的软包、家具、书籍和陶瓷。
厨房和浴室也投入了同样的关注。水槽和盆有实际的开口和空心的盆体。厨房包括烤箱腔体、烤架、餐具抽屉和食品储藏搁板。在宽阔的外景渲染中这些都是小东西,但当相机足够近,可以观察台面或看向房间内部时,它们就开始变得重要。
材质也需要在那个距离下表现良好。后期的场景将手工制作的饰面与来自 Poly Haven 的扫描橡木、胡桃木和灰泥纹理相结合,包括 White Oak Veneer。Astra 对齐了木材纹理,并使纹理比例与家具尺寸保持一致。

厨房和用餐区,与第一栋房屋保持同样克制的色调,并在家具和细木工方面有更多细节。
在电影级研究方面,Astra 通过 Blender 自身的可执行文件以背景模式运行脚本,使用其 --python 选项。这些脚本放置摄像机、选择镜头并渲染视图。Astra 还通过计算机使用在 Blender 中打开并检查场景,将应用程序与保存的渲染结果一并核对。
我们不断通过渲染来检查模型。Astra 生成了房间的视图和材质的特写研究,然后用它们来发现并修复问题。一个例子是钢制水槽:其表面法线——决定光线如何为网格着色——使水槽底部平坦部分看起来被挤压。修正法线并优化圆角边缘后,在不改变厨房设计的情况下得到了更干净的结果。

水槽着色和边缘优化后的材质特写研究。
在不带材质的情况下检查几何体
电影级图像有助于判断氛围。关闭材质则提供了工作的另一个视角:产生图像的墙壁、开口、家具和房间布局。

实体模式下的实际 Blender 几何体。此检查视图中隐藏了屋顶、周围森林和窗玻璃;源模型未更改。
这使得从第一个亭子开始的演进更容易看出。新房子具有连续的布局、两翼均配有家具的房间,以及将它们与庭院连接的开口。这些元素在 Blender 中保持可编辑,独立于光照和最终摄像机视图。
Astra 还检查了几何体,包括门洞和墙体连接,并采样了穿过场景的路径。这些检查支持了视觉审查。它们并未取代查看渲染结果,也不是对每个可能的相交或建筑细节都正确的认证。
让房子感觉有人居住
在探索了带家具的房子后,我回到 Blender 进一步推进细节。布局已经可行;我希望房间感觉有人使用,并且当摄像机靠近时材质经得起细看。我的下一个任务聚焦于光线和日常生活痕迹:
让光照更安静、更温暖、更准确。改善材质对光的响应,并添加餐具和日常物品,让房子感觉有人居住。
Astra 保留了建筑结构,并在人们可能使用的地方添加了物品。餐桌上增加了盘子、餐具、玻璃杯和折叠餐巾。厨房台面上有面包、香草和瓶子。一本打开的日记、阅读眼镜、一个马克杯、一部手机和钥匙让咖啡桌不再像陈列品。办公室和卧室也增添了类似的使用痕迹。

细节和光照处理后的客厅,来自原生 4K Cycles 渲染。
这些添加物是建模对象:中空餐具、带棱纹的玻璃杯和带缝边的折叠亚麻布。Astra 还优化了表面捕捉光线的方式,将 Poly Haven 的扫描木材和灰泥纹理与织物、陶瓷和金属的程序化细节相结合。纹理比例、粗糙度和微小的表面变化帮助材质在近距离下呈现良好。
光照也随之改变。Astra 移除了曾使房间显得平淡的隐藏补光,温暖了剩余光线,并使光源与可见灯具相匹配。它建模了天花板灯具,并在灯罩内放置了发光的灯泡,让光线透出。这使高光和阴影与房间内物体的关系更加清晰。

同一轮处理后的餐桌和厨房。餐桌布置和灯具是可在编辑场景中调整的几何体。
指挥 Blender 摄像机漫游
我还想在动态画面中评判这些细节。我要求制作一段 30 秒的 1080p 房屋导览,摄像机运镜要富有动感且自然。我们先审阅了预览渲染,然后调整了取景和运动,才最终确定完整渲染。
Astra 将这一指示转化为四个摄像机镜头,分别覆盖主亭、办公室、浴室和卧室,通过剪辑衔接。它的 Python 脚本将摄像机置于离地约 1.65 米处,使用 24–26 毫米镜头,在每个镜头的开头和结尾缓入缓出速度,并加入了克制的行走运动。它引导摄像机的视线朝向家具和景观,并修改了那些预览中停留在空白墙壁上或结尾突兀的镜头。
为了更清晰地展现建筑,景深保持关闭。Cycles 以每秒 30 帧渲染了这段 30 秒导览,共 900 张独立的 1080p 帧,使用自适应采样和 OpenImageDenoise 控制噪点。Astra 将这些帧合成为影片,没有插值生成新帧。这是一个渲染的摄像机序列,因此每帧的渲染时间可以比交互式漫游长得多。
泳池边的接近镜头和房间导览,使用 Cycles 在 Blender 中渲染。
看完导览后,我要求增加五秒钟的室外镜头,展示泳池、水面倒影和躺椅,然后进入房屋。Astra 渲染了这段接近镜头并将其与现有影片拼接。它还制作了五张原生 4K 静帧,分别展示外观、庭院、客厅、厨房和卧室。同一个场景现在既能支持导演式影片,也能支持细节静帧。
在 Unreal Engine 5 中走进房屋
在项目早期,我还要求 Astra 让这座房屋在 Unreal Engine 5 中可游玩。我想以人的高度在其中移动,自由环顾四周,更好地感受空间之间的连接。这段漫游展示的是房屋的早期版本,尚未经过开场影片中展示的 Blender 细节和灯光处理。
早期交互式 Unreal 漫游的录像。
Astra 围绕已批准的 Blender 文件编写了一套导出和导入管线。它将求值后的几何体导出为 FBX 文件,包括 Blender 曲线和修改器产生的细节。除了这些文件,它还编写了一份 JSON 场景描述,记录各部件的归属位置、使用的材质以及灯光和摄像机的放置位置。
这份描述让 Unreal 得以重建场景。传输过程处理了 Blender 的米和 Unreal 的厘米,以及坐标方向的变化。重复的树木保持为共享几何体的实例,因此森林不需要为每一棵树都准备一份完整的独立网格。
材质需要单独转换。Blender 和 Unreal 使用不同的材质系统。Astra 读取了受支持的 Blender 材质输入,复用了源纹理,并为木材、石材、织物、玻璃和水等饰面构建了对应的 Unreal 材质。它保留了纹理在几何体上的定位和缩放方式,包括木纹。部分着色器行为是近似实现的,因此匹配外观仍需人工检查。
光照是这项工作的另一部分。太阳方向和手工布置的灯光提供了起点,而 Unreal 的天空和体积雾则重现了林地氛围。Astra 将视图与 Blender 进行对比,并调整了外部补光和雾霾。目标是将视觉方向带入实时照明,同时保持场景对移动的响应。

Unreal 中厨房的近景视图,展示了中岛、凳子、电器和木质表面。从打包后的应用程序中捕获,设置选择用于静态图像。
最后,房屋需要一个玩家和碰撞。Astra 添加了第一人称角色、行走控制和起始点。地板需要支撑玩家;墙壁、家具和玻璃需要阻挡移动。附近的树干可以成为障碍物,但不会让每一株蕨类都变成隐形墙。Astra 将结果打包为原生 Mac 应用程序,并使用角色的正常移动测试了其中的路线。
在 Solace 中行走给了我另一种审视设计的方式。我可以从花园接近房屋,进入起居空间,并从并非构图渲染一部分的位置观察各个房间。
在 Blender 细节和光照处理之后,我让 Astra 将更具生活气息的房屋带回 Unreal。它将更新后的几何体和材质重新导出到现有项目中,并为模型添加了交互。该流程记录了哪些部分属于每扇门或抽屉、它们在哪里铰接或滑动,以及开关应控制哪些灯光。在 Unreal 中,把手、抽屉盒及其内容物与它们所属的组件一起移动。
最大的变化是能够使用房屋的部分功能。上下文提示和 E 键让我可以打开门和厨房储物空间,打开和关闭选定的灯光,并操作浓缩咖啡机。它的冲泡流程会按下按钮,将咖啡注入杯中,并提升液面高度。我们在 Blender 中建模的细节现在有了我可以在走过房间时尝试的行为。
Unreal Engine 5 中更新后的房屋,包括一台交互式咖啡机。
在故事板中比较 Blender 和 Unreal
在最新一轮处理之后,我让 Astra 使用更新后的房屋和匹配的相机角度刷新故事板。它保留了各个镜头,并为 Blender 和 Unreal Engine 5 分别组装了独立的故事板。每个故事板都以一张大型外部视图开始,随后是六张较小的房间和花园视图。Astra 处理了编号标题、简短说明、排版和间距,同时保留每张完整图像而不进行裁剪。
更新后的故事板使用 Cycles 渲染和 Lumen 静态捕获。它们以相同顺序覆盖相同的七个主题,并具有匹配的相机位置、方向和视野。每个引擎保留自己的光照、材质和色调映射。Unreal 浴室镜子仍然显示出一些反射伪影。共享布局使两个版本更容易一起审查,并将各个视图转变为整栋房屋的展示。选择任一故事板即可放大查看其标签和图像。

Blender 故事板,由 Cycles 渲染组装而成。

Unreal Engine 5 故事板,由 Lumen 静态捕获组装而成。
超越建筑的设计
我在截然不同的 3D 场景中使用了相同的方法。在 HELIOS 中,我让 Astra 构建一个太阳系,并在太阳周围放置一个戴森球。这个虚构的收集器逐渐发展为数千个独立面板,带有凹陷表面、散热鳍片、支撑服务结构和更大的控制枢纽。Astra 将这些几何结构与材质和光照结合起来,使这一构造在明亮恒星周围清晰可见。

最初的 HELIOS 收集器,外壳敞开,露出太阳。其尺寸和距离是为电影效果而构图,而非按统一的天文比例展示。
Astra 在工作过程中会审查渲染结果。在最初的预览中,它注意到行星看起来发白,土星环被画面裁切。它降低了补光并加宽了构图。后来当我要求从地球视角展示外壳几乎闭合的视图时,它建模了一个带有三个狭窄开口的新版本。预览中只有一束光清晰可见,于是它将发光表面移近开口。它还测试了对海洋材质的修改,以柔化与主体相竞争的反光。

朝向地球的构图,外壳由 5,120 块面板几乎闭合,并带有三个透光开口。此视图同样采用电影化的比例和光照。
HELIOS 渲染使用了来自 NASA JPL / STEREO 和 SDO 的太阳图像,这些图像改编自假彩色紫外观测,以及来自 NASA Earth Observatory 的 Blue Marble 的地球图像。夜间灯光 归功于 NASA Earth Observatory / Robert Simmon,使用了 Suomi NPP VIIRS 数据,由 Chris Elvidge、NOAA NGDC 提供。来自 Solar System Scope / INOVE 的行星和云层地图在 CC BY 4.0 下改编。
在 Shipyard 项目中,Astra 构建了 AURELION-07,这是一艘巡洋舰,拥有锥形船体、分段环和四个精细的推进器。引擎带有约束带、服务管线、凹陷喷嘴和同心发光开口。陶瓷装甲、机加工金属和玻璃具有不同的材质。程序化纹理改变了装甲和金属的颜色、粗糙度和表面细节。几何结构、材质、灯光和相机在 Blender 中保持可编辑。

AURELION-07,Shipyard 项目中单独建模的飞船,在 Blender 中渲染。
在这里,Astra 同样使用预览来确定需要改进的地方。它发现船首过于平淡,背景行星过于突出。下一轮迭代为锥形船体加装了面板和接缝,添加了对接硬件和环紧固件,并移动并调暗了行星。随后它从多个角度检查了飞船,包括引擎。这次审查在我必须逐一指出每个细节之前,就促成了模型和构图的修改。

同一艘飞船的第二个视图,使引擎结构和表面细节清晰可见。
从参考设计花园
我还让 Astra 以莫奈在吉维尼的花园为灵感设计一个花园,包含睡莲池、绿色小桥和茂密种植。当早期渲染显示池塘之外显得空旷时,我让它研究真实参考,并扩展周围的花园和建筑。
我的下一次反馈是关于仍然看起来扁平的表面。Astra 添加了带纹理的砾石和砖石,细化了睡莲叶片和花瓣,并渲染了新的 Cycles 视图以供审查。结果仍然是一个可编辑的 Blender 场景,真实花园的比例为构图做了调整。

一幅受吉维尼启发的睡莲水园的 Cycles 渲染图。选定的植物、纹理和天空环境均来自 Poly Haven。
从你自己的场景开始
我喜欢 Solace 的一点是,它能够让我在这些阶段中持续发展同一个想法。我可以描述一种氛围,查看平面图,要求更精确的家具,然后探索结果。Astra 将工作贯穿于场景、脚本和 Unreal 项目,而我则不断决定我想建造什么样的地方。HELIOS 和 Shipyard 给了我同样的空间,让我从整体设计一直深入到各个单独部件,而 Astra 则在此过程中检查和改进结果。
对于你自己的实验,从你想看到的一个地方或物体开始:一个房间、一件家具、一艘航天器,或一片想象中的风景。描述它的用途和氛围,然后让 Astra 提供一个可编辑的场景和几个视图供你查看。先看整体形状,然后靠近并询问需要改变什么。每一次渲染都可以成为下一个设计决策的起点,无论你是想完善一个物体,还是最终探索整个世界。
来源:OpenAI Developers:Blog(网页) · developers.openai.com