应用案例 · GPT-6 ASTRA × UModeler X × PicoBerry

GPT-6 ASTRA:Blender vs Unity — 一座斗兽场,建了两遍,最后在引擎里完成

一名开发者把同一项任务交给 GPT-6 ASTRA 两次:为如今的罗马斗兽场建模,一次在 Blender 里,一次在装有 UModeler X 的 Unity 里。两边结果一致,制作便在 Unity 里继续:在那里,模型一建好就能以第一人称走进去。观众由 PicoBerry 提供。下文的时间取自项目日志和修订说明,其余部分由开发者本人的讲述补足。

Unity 里的古代斗兽场。建筑大部分由按 ASTRA 的规格搭出的 UModeler X 形状构成;观众是 PicoBerry 模型。

使用工具GPT-6 ASTRABlenderUnityUModeler XPicoBerry API

GPT-6 ASTRA 在 Blender 里建模更好,还是在 Unity 里?

在这次测试里,两边不分高下。GPT-6 ASTRA 读取了 200 张参考图(含图纸),把它们整理成一份以米为单位的规格,再据此分别在 Blender 和装有 UModeler X 的 Unity 里建出罗马斗兽场。两边都得到 6,254 个网格,最高点都是 48.5 米;按日志记录,从 Blender 开始搭建到两边并排比对,前后 28 分钟。差别出现在建好之后:在 Unity 里,模型一出现就能以第一人称走进去,而且其中 4,926 个网格是 UModeler X 参数化形状,一直保持可编辑。于是开发者在 Unity 里完成了场景,并用 20 个 PicoBerry 模型摆出 3,917 名观众,填满了看台。

同一份规格,在 Blender 和 Unity 里各做出了什么?

第一天,9 月 14 日。ASTRA 只写了一遍数字,两款工具各自照着搭建,比例是 1 单位 = 1 米。两边搭出的模型大多是简单形状,缺少精细的细节;形体和比例则依照图纸。

一幅罗马斗兽场的老式雕版平面图,分成四个象限,各自画出楼梯和放射状墙体在不同楼层的样子
输入 · 图纸之一罗马斗兽场的四象限平面图,每个象限画的是不同楼层,出自开发者提供的图纸。公有领域,来自 Wikimedia Commons。
BlenderUnity + UModeler X
网格6,2546,254
UModeler X 参数化形状—4,926
三角面319,260日志未记录
最高点48.5 m48.5 m
1.8 m 人体比例检查通过通过
版本Blender 5.1Unity 6000.3 (URP), UModeler X 1.3.0

日志记录(韩国时间 KST):19:00 Blender 开始搭建 · 19:09 写出规格文件 colosseum_spec.json(2.2 MB)和 unity_spec.json(2.6 MB) · 19:10 Blender 导出一个 18 MB 的 FBX · 19:11 Blender 检查通过 · 19:28 并排比对完成。按开发者本人的估算,每边的搭建大约用了 11 到 15 分钟。

罗马斗兽场模型的 Blender 渲染图:浅色基座上一圈砖色拱廊,高耸的北墙立在左后方
Blender · 第一天Blender 版:6,254 个网格、319,260 个三角面,没有空网格,也没有缺失的材质。
同一模型的 Unity 渲染图,从相反一侧看,高耸的北墙在右后方,背景是纯蓝色
Unity + UModeler X · 第一天用同一份规格做出的 Unity 版:6,254 个网格,其中 4,926 个是 UModeler X 参数化形状。不规则的残墙和拱洞里的填充墙是普通网格。

为什么后续制作留在了 Unity?

数字没有分出胜负。真正起决定作用的,是每款工具让开发者接下来能做什么。

原因 01

一建好就能走进去

在 Unity 里,模型本来就在引擎中,所以 ASTRA 一完成,开发者就能以第一人称走进去,按真人的尺度看出哪里需要修。按开发者本人的说法,要用角色控制器试玩 Blender 做的模型,得先导出、再导入,还要处理一遍碰撞体。

原因 02

保留数值的形状

UModeler X 的形状会保留参数。选中一个拱形,Inspector 里显示的是 Radius1、Radius2、Depth、Angle 和 Sides;选中一段楼梯,显示的就是它的台阶参数。数值由 ASTRA 设定,之后任何人都还能再改。

原因 03

参考照片与模型同屏

做细节这一轮时,开发者把 Unity 视口调到与一张参考照片相同的角度,再把这张照片交给 ASTRA。模型和用来比对的照片就在同一个画面里,不必在工具之间往返。

Play 模式下,罗马斗兽场外墙底下的第一人称视角:浅色地面上方是高大的砖拱,左上角有一块操作提示浮层
Unity 内 · Play 模式在 Play 模式下站在外圈拱廊底下,视线就在控制器的眼睛高度。左上角的操作提示是控制器自带的,写着“1 unit = 1 metre”和“person 1.80 m”。

ASTRA 的改动是怎么进入 Unity 场景的?

按开发者本人的说法,ASTRA 从来没有远程操控编辑器。它写出文件,再由 Unity 把这些文件应用到场景里。

文件内容项目中的例子
规格用数字描述的整个模型colosseum_r2_spec.json … colosseum_r5_unity_spec.json
增量与上一次修订相比改动了什么unity_r2_delta.json, unity_r4_rebuild_delta.json
补丁针对某一处的修正unity_r2_patch.json, unity_r4_final_patch.json

每一处改动都是一个文件,所以每次修订都能回滚,两次修订之间的差异能直接读出来,同一份规格也能同时交给 Blender 和 Unity。开发者认为,第一天的对比之所以公平,也要归功于这套做法。

一天的修订是什么样子?

9 月 15 日(韩国时间 KST)。R2 在 11:35 完成,R8 在八个半小时后的 20:05 定稿。R2 到 R4 用同一份规格在两款工具里都搭建了;从 R5 开始,只在 Unity 里进行。只标一个时间的,表示那一步完成的时间。

  1. R2:长轴转动约 19.94°,与真实遗址的朝向对齐;放射状墙体上开出贯通拱,加入中间回廊和竞技场下方的通道。
  2. R3:用 14 道纵向墙重建地下层,并加上从地下层通往一层、再一路上到三层的楼梯。
  3. R4:楼梯移到已发表资料所标示的位置。依据有三项:2022 年一项关于场边高台(podium)的研究、斗兽场考古公园 2023 年的参观路线公告,以及一项关于拱券修复的研究。
  4. R5:依据一张带标注的剖面图做出 13 段楼梯,再加上连接它们的梯段,全部是 UModeler X 的 Stair 形状;最上层拆分为 31.8 米高处的回廊和 37.9 米高处的平台。
  5. R6:工作转入建筑内部。
  6. R7:对照参考资料检查结构,让内部可以安全行走,并封好地面接缝。
  7. R8 的楼梯这一轮:用时 14 分钟。
  8. 竞技场围墙的 436 个切片,合并成了四个 UModeler X QuadStrip。
  9. R8 定稿。
修订网格数参数化形状数行走检查
R27,3765,870四段楼梯,上下往返,使用 1.8 m 碰撞体
R311,8908,493Unity:向上移动 5,064 次、向下 5,063 次;Blender:921 个检测点
R411,7878,315Unity:往返各移动 5,431 次;Blender:1,048 个检测点
R512,1448,660Unity:37 条路线各走一个来回,共 74 趟

R2 到 R5 的修订说明记录了这些行走检查。R3 到 R5 的 Unity 检查用的是一个高 1.8 米的 CharacterController:先放在每条路线的起点,之后一路移动过去,中途不瞬移,也没有一步被挡住;Blender 这边则在路线沿途的各个点上检查地面接触和身体净空。这些检查都没有覆盖建筑里的每一个房间。

楼梯这一轮为什么 14 分钟就做完了?

因为按开发者本人的解释,UModeler X 里的楼梯是一个带数值的形状,而不是要一点点雕出来的几何体。

一段楼梯的参数动画:宽度从 1.52 米变到 3.60 米,台阶高度从 0.225 米变到 0.40 米,于是在同样 6.99 米的高差内,台阶数从 31 级减到 17 级。

UModeler X 的 Stair 把宽度、台阶高度、台阶数、总高度和深度都作为参数保存下来,ASTRA 照着图纸把这些数字填了进去。用开发者本人的话说,AI 不是在雕形状,而是在填数字。最终场景里共有 253 个楼梯形状。

14 分钟9 月 15 日楼梯这一轮的用时,17:27–17:41
253最终场景里的楼梯形状
17,927最终场景里的 UModeler X 参数化形状

这一轮优化改变了什么?

通过对比场景文件测得:从 R8 场景,到 9 月 16 日针对加载做过优化的场景。

优化前优化后变化
GameObjects30,95026,078−15.74%
MeshRenderers27,85922,803−18.15%
场景文件181.2 MB135.0 MB−25.5%

开发者特别点出的那一步,其实发生在这一轮优化之前,也就是 9 月 15 日傍晚:竞技场围墙的 436 个切片没有被丢掉,而是重新合并成了四个 QuadStrip。用开发者本人的话说,现在拖动一条曲线,墙就会跟着一起动,所以合并后的场景仍然可以编辑。

遗址是怎么变成旅游景点,又变成古代斗兽场的?

之后又做了两个场景。

针对如今的遗址,开发者要求在周围加上商店和街道,营造出罗马这处旅游景点的氛围。白天、夜晚和清晨三个版本,在 9 月 16 日 14:59 到 15:25 之间做了出来:26 分钟,三个版本。这里的画面只拍到了广场上的遗址和几棵伞松,看不到商店或街道。

白天从高处俯瞰如今的罗马斗兽场遗址,它立在铺装广场上,旁边有几棵松树
白天白天的景点:遗址立在广场上,高耸的北墙清晰可见。
隔着一片平坦的灰色地面,从地面高度看罗马斗兽场遗址,左边是两棵伞松
地面视角从地面高度看同一个场景。
夜晚的罗马斗兽场遗址,外墙的每一个拱洞里都亮着暖色的灯光
夜晚夜晚版本,灯光从拱廊内部亮起。

做第二座斗兽场时,开发者把官方网站上的内部结构资料和真实的剖面图加为参考,要求做出这座建筑在古代的样子。ASTRA 先搭出环形的四分之一,再复制并旋转这四分之一,把整个环补齐。遮阳篷、完整的座席和皇帝包厢是之后才加上的。

四分之一,经过复制和旋转,拼成完整的环。
从高处看古代罗马斗兽场:一圈完整的浅色拱廊,没有遮阳篷
仅结构加上遮阳篷之前的完整环形。
从高处看古代罗马斗兽场:奶油色的遮阳篷盖住了敞开的竞技场四周的看台
加上遮阳篷顶上张开的遮阳篷(velarium),当年用来为看台遮阳。
古代罗马斗兽场内部:浅色石砌的层层座席,以及竞技场边缘一座红白相间的皇帝包厢
皇帝包厢内部:层层座席,以及竞技场边缘的皇帝包厢。

观众为什么来自 PicoBerry?

看台上有了人,场景就活了起来;但这些人是 ASTRA 用基本形状搭的,近看就露了馅。

于是开发者接入 PicoBerry API,让 ASTRA 替换掉这些观众。ASTRA 为就座和欢呼的古罗马人发出了 20 个生成请求,其中有贵族、士兵、商人和孩子;全部是发给 PB Ultra 的文本提示词,也全部在四分钟内发出(9 月 17 日 15:29:46–15:33:35)。每条提示词先生成一张图像,再变成 3D 模型。场景用这 20 个模型填满了看台上的 3,917 个位置;按开发者本人的说法,模型是直接进入场景的。在此之前,当天下午 15:04,ASTRA 用一条就座观众的提示词试了 PicoBerry 的三个 AI 模型(Hunyuan 3.1、PB Ultra 和 PB Slim 2);下面是 PB Slim 2 和 PB Ultra 的结果。

罗马斗兽场看台上坐满了简单的方块观众人偶,穿着紫色、红色、青色、橙色和白色的短袍
ASTRA 的基本形状看台上是 ASTRA 用基本形状搭出的观众。
同一片看台上坐满了各不相同的古罗马观众,穿着蓝色、白色、棕色和黄色的衣服
PicoBerry同一片看台,机位几乎相同,观众已换成 PicoBerry 模型。
20PicoBerry 模型,用 PB Ultra 从文本提示词生成
3,917看台上由这 20 个模型填满的位置
< 4 分钟ASTRA 发出全部 20 个请求的用时,9 月 17 日 15:29:46–15:33:35(KST)
一名留胡子的男子,身穿红边的奶油色托加袍、脚穿凉鞋,坐在石凳上,由 PB Slim 2 生成
PB Slim 215:04 的测试提示词,PB Slim 2 的结果。
一名留胡子的男子,身披红边托加袍、脚穿凉鞋,坐在残破的石凳上,细节更精致,由 PB Ultra 生成
PB Ultra同一条提示词在 PB Ultra 上的结果;全部 20 个观众用的都是这个 AI 模型。
PicoBerry 模型:身穿紫边托加袍、坐着的古罗马贵族男子贵族男子
PicoBerry 模型:秃头、披深色斗篷、坐着的古罗马元老院议员元老院议员
PicoBerry 模型:穿红色短袍、系腰带、坐着的古罗马士兵士兵
PicoBerry 模型:坐着、一只手打着手势的古罗马商人商人
PicoBerry 模型:肌肉结实、抱着双臂坐着的古罗马劳工劳工
PicoBerry 模型:身穿蓝色长裙、坐着的古罗马贵族女子贵族女子
PicoBerry 模型:披灰色披肩、弓着背的古罗马老妇人老妇人
PicoBerry 模型:抱着小孩坐着的古罗马妇女母亲与孩子
PicoBerry 模型:穿粉色衣服、高举双臂的古罗马小女孩欢呼的女孩
PicoBerry 模型:抱膝而坐的古罗马小男孩坐着的男孩

20 个 PicoBerry 观众中的 10 个,保持生成时的原样。

从里面看是什么样子?

Unity 版从第一天起就带着一个第一人称控制器,身高 1.8 米,眼睛高度 1.65 米。在完成的斗兽场里,开发者又要求加上一个,好穿行在观众之间、走进走出。

在 Play 模式下从座席之间往上走,经过一排排 PicoBerry 观众;有几个摆得太低,陷进了台阶里。

这个模型不是什么?

修订说明对这几点都很谨慎,本页也一样。

局限 01

不是数字孪生

它是依据公开的图纸、照片和论文,按实物尺寸搭建的诠释性模型。它不一定与单块石料或断裂线吻合,修订说明里也写明了这一点。

局限 02

楼梯位置出自解读

R4 把楼梯移到了已发表资料所指的位置,但这些坐标只是模型的输入值,不是测绘数据。一层到二层之间的楼梯,依据的是斗兽场考古公园对所在区域的描述,没有详细的平面图;通往三层的梯段,则是根据那项拱券修复研究中的一张插图摆放的。

局限 03

不谈帧率

场景加载实测为 5.4 秒和 5.1 秒。没有做过性能分析,所以本页不给出任何 fps 数字。

局限 04

流程对比,不是比赛

两边都照着 ASTRA 的规格搭建。这次测试呈现的是同一份规格在两款工具里分别做出什么,而不是每款工具能达到的最佳效果。

常见问题

GPT-6 ASTRA 能根据平面图为建筑建模吗?

这次做到了,不过是作为原型。开发者给了它 200 张参考图(含图纸);ASTRA 从中读出尺寸,写成一份以米为单位的规格,再据此搭建。形体和比例依照图纸,精细的细节却没有跟上,因为两边搭出的模型大多是简单形状。项目文档称它为按实物尺寸搭建的诠释性模型,而不是测绘级的复刻。

用 AI 建模时,UModeler X 比 Blender 更好吗?

质量上并没有更好。在这次测试里,第一天两边搭出的模型,在两边都有记录的每一项数字上都一致,即 6,254 个网格和 48.5 米的最高点,而且都通过了 1.8 米人体比例检查。UModeler X 的优势在实用层面。模型马上就能在引擎里玩,形状也保留着参数,所以之后的修改只是改数字,不用重新搭几何体。

UModeler X 参数化形状是什么?

就是创建之后依然保留设置的形状。拱形保留 Radius1、Radius2、Depth、Angle 和 Sides;楼梯保留宽度、台阶高度和台阶数;QuadStrip 保留它的曲线。这些数值是 ASTRA 照着图纸设定的,之后仍能在 Unity 的 Inspector 里修改。最终场景里共有 17,927 个参数化形状,其中 253 个是楼梯。

GPT-6 ASTRA 是怎么和 Unity 配合的?

靠文件。ASTRA 把模型写成 JSON 规格,把之后的每次改动写成增量或补丁,再由 Unity 应用;第一次搭建则来自 ASTRA 写的一个编辑器脚本。按开发者本人的说法,ASTRA 从来没有直接操控编辑器。开发者是在 PowerShell 里运行 ASTRA 的。正因为每一处改动都存成文件,每次修订才都能回滚,同一份规格也才能同时交给 Blender 和 Unity。

PicoBerry 是怎么做出观众的?

PicoBerry 把 ASTRA 通过 API 发来的 20 条文本提示词,逐条先变成图像,再做成 PB Ultra 3D 模型;这 20 个请求,ASTRA 用了不到四分钟就全部发出。场景用它们填满了看台上的 3,917 个位置。它们替换掉的,是 ASTRA 先前用基本形状搭出的观众。建筑本身则大部分由 ASTRA 的 UModeler X 形状构成。

做这座斗兽场花了多长时间?

按开发者本人的估算,实际动手的时间大约 12 小时。日志补上了各段的用时:9 月 14 日第一天的对比用了 28 分钟;15 日从 R2 完成到 R8 定稿用了八个半小时,其中楼梯这一轮 14 分钟;16 日三个旅游景点版本用了 26 分钟;17 日 ASTRA 发出 20 个观众的生成请求,用时不到四分钟。

开发者自己动手建模了吗?

日志里记下的是方向把控,而不是建模。开发者提供了参考资料,在做细节那一轮时把视口对齐到一张参考照片。此外还要求加上商店、做出古代版本、在完成的斗兽场里加上第一人称控制器、换上 PicoBerry 观众,并检查了每一次修订。按开发者本人的说法,形状本身都是 ASTRA 摆放的。

用的是哪个版本的 Blender、Unity 和 UModeler X?

Blender 5.1、Unity 6000.3(使用 URP)和 UModeler X 1.3.0。没有可供试玩的公开版本。

建筑交给形状 人物交给 PicoBerry

可以从 PicoBerry 网页版开始,也可以把 API 接到你现有的智能体上。