把 BlenderGIS 模型,带到手掌里。

从一张能在屏幕里旋转的三维地图出发,Codex 怎样协助把地形、道路和建筑重新组织成可继续验证的多色地理手办候选。

地形、道路与建筑以分层关系组成的多色地理手办编辑插画

下午,我把一块小小的北京东软放在左手里。

绿的是地面,橙的是道路,浅蓝色的建筑从地面上冒出来,中心那幢红色的小楼像一颗过分认真的图钉。它还没有大到可以拿去参加城市规划展,也不是什么精密测绘产品。它只是一块 100 毫米见方的塑料,但路真的在上面,楼也真的在上面。

不过,这件东西的故事不是从打印机开始的。它最初只是 BlenderGIS 里的一个三维场景:地形有起伏,道路和建筑都进了软件,绕着它转一圈,已经很像一座可以俯视的小城。

但“很像”这两个字,通常最会骗人。

屏幕上的模型不等于可以打印的模型。它可能没有一个真正的底,可能没有明确的尺寸,也可能把道路和建筑当成只能在屏幕里好看的颜色。若我当时只说一句“导出 3D 打印”,大概也会得到一个文件。文件这东西很会装无辜,打开了不代表它能做出来。

于是,我没有先去研究一堆按钮,而是用 Codex 推进了整个项目:从读懂 BlenderGIS 已经获得的地形、道路和建筑信息,到组织模型、打开生成物核对,再到把结果带进实际打印。既然地图已经在屏幕里,Codex 能不能把这些信息重新组织成一件可以被制造、被检查、最后被拿在手里的东西?

这就是我理解的 vibe coding。不是对 Codex 说“你随便做一个”,然后在一片漂亮信息里假装自己满意;而是我负责描述我真正想留下的东西,Codex 负责把它拆成能被验证的交付,哪里错了就回到哪里去。

一切先从一张“还不能打印”的图开始

最初的 BlenderGIS 场景非常有用。它让我第一次看清,北京东软研发中心附近并不是一块平整的绿色桌布:道路怎么穿过去,建筑怎么散在其中,地形怎么悄悄起伏,地图都已经告诉我了。

BlenderGIS 中的北京东软三维地理场景,包含地形、道路和建筑
BlenderGIS 场景截图:公开地理数据已经以三维方式呈现地形、道路与建筑。这是 GIS 可视化证据,不是打印验收。

但它的职责也到此为止。BlenderGIS 擅长把一个地点带到我眼前,却不会替我决定它在现实里该有多大、道路应该用什么颜色、建筑要不要从地面里长出来,更不会替我承担打印失败的塑料味。

我后来才明白,第一步不是“把地图变成立体”,它早就立体了。第一步是承认:我已经有了一张三维地图,但还没有一件实体。

AI 在中间做的,不是魔法,是翻译

我给 AI 的目标很朴素:这块地图最后要做成 100 × 100 × 5 毫米的桌面小手办,地点不能换,地形、道路和建筑不能只剩下一张贴图,结果也不能停在一句“应该可以打印”。

于是,这条路线被拆成了几个肉眼能理解的阶段:先保留 BlenderGIS 场景提供的地理信息,再赋予它真实的毫米尺寸和底座;把不同信息整理成能被制造的部件;把这些部件作为一个整体带进切片与打印;最后,才轮到手掌里的这张照片。

流程概览
  1. BlenderGIS 三维场景 · 地形、道路、建筑信息
  2. 人提出产品目标 · 地点、尺寸、要保留的信息
  3. AI 生成制造候选 · 有底座、毫米尺寸、可检查
  4. 语义分件 · 地形/底座、道路、主建筑、周边建筑
  5. 同一对象的多个部件 · 导入切片软件分别选择耗材
  6. 多色实物打印样品 · 本次照片的事实证据

这张图看起来有点像把一句愿望排成了流水线。其实它更像我和 AI 的分工表:我不用假装知道每个技术细节,但我要一直盯住那件事——它有没有越来越像我说的那块手办,而不是越来越像一份漂亮的报告。

CAD Explorer 中打开的组合地理模型,左侧为产物目录,右侧为三维预览
Codex 实际打开生成物的界面:左侧为产物目录,右侧为 CAD Explorer 对组合模型的三维预览。这证明生成物被实际打开并可视检查,不替代切片或实物验收。

最关键的设计:让颜色在模型里有位置

生成一整块完整模型,其实没有那么难:让所有地形、道路和建筑长在一起,导出,结束。真正开始麻烦的是后半段——我想让道路是橙色,建筑是蓝色,重点建筑再亮一点,同时又不希望它们彼此打架、脱离地面,或者在打印时变成一地塑料碎屑。

我一开始也想过,干脆把所有东西合成一整块,打印时随便选个颜色。这个办法省事,和把一座城市压成饼干差不多。能吃,不能说没用,但道路会重新沉进地面,建筑也会变得像一层没睡醒的纹理。

后来我们换了一个更笨、但更接近结果的想法:底座、道路、主建筑和周边建筑不再只是屏幕上的四种颜色,而是四个独立的部件。

  • 底座和地形留给绿色耗材,承接整块地图;
  • 道路独立出来,用橙色耗材,路网才不会藏回地里;
  • 建筑独立出来,用浅蓝色;中心建筑再用红色,地标自然有了重点。

它们仍然是同一个模型:共享同一个原点、尺寸和外廓关系。所谓“整合”,不是把所有颜色焊成一块看不出来的单色塑料,而是让切片软件把它们当成一个对象的多个部件。这样在打印前,我可以为每一类信息选不同的耗材;打印后,眼睛不用费劲,也能先看见道路,再看见建筑,最后才去看地形。

地形底座、道路和建筑自下而上分层展开的地理手办爆炸图
真实分件生成物的爆炸预览:最上层是建筑,中间层是道路,最下层是地形底座。三层在平面位置上完全对齐,只为讲清结构而沿高度拉开;实际打印时它们回到同一原点,作为一个对象的多个部件分别选择耗材。爆炸图证明分件关系可视化成功,不替代切片或实物装配验收。

这就是分件设计真正解决的问题:做出“一整块灰色模型”很简单;让同一块模型在多色打印后,路还是路、楼还是楼、地还是地,才是后期最需要认真安排的部分。对不懂建模的人来说,可以把它想成一张叠在一起的透明地图:建筑在最上面,道路在中间,底座在最下面。打印时它们重新合在一起,但每一层都允许换一种颜色。

这件事听起来像打印技巧,其实更像表达选择。不同颜色不是装饰,它决定一张地图在变小以后,还能不能把自己说清楚。

可直接复制的提示词:少走一点弯路,也少花一点 Token

vibe coding 最怕的不是 AI 不会做,而是你每一轮都要重新解释:我有一个什么模型、想保留什么、哪里不能偷懒。下面这段提示词,是我希望一开始就交给 AI 的那种话。把方括号里的内容替换成你的地点、尺寸和现有素材即可。

我已经用 BlenderGIS 获得了 [地点] 的三维 GIS 场景,场景中已有地形、道路和建筑信息。
它目前只是可视化模型,不要把它直接称为可打印成品。

请把它转化为一个可继续验证的 3D 打印地理手办候选:
1. 成品外廓为 [宽] × [高] × [总高] mm,单位必须是 mm,并有封闭、可放置的底座;
2. 保留地形、道路、主建筑和周边建筑的识别关系;
3. 将底座/地形、道路、主建筑、周边建筑做成相互不重叠、共享同一原点的独立部件;
4. 这些部件必须能作为同一个对象的多个部件一起导入切片软件,使我能为道路和建筑分别选择不同耗材;
5. 同时提供一个单体组合版,供单色打印或兼容性检查使用;
6. 不要把它改造成拼图,也不要把渲染、文件生成或静态检查写成已经完成切片或实物打印。

在开始生成前,先只输出一张简洁确认表:已有输入、将生成的部件、尺寸、待确认风险、尚未验证的事项。
遇到地点、尺寸、数据许可或已有输出冲突时停止并询问我;不要擅自覆盖文件。

我还会在模型出来后再补一段。这一段有点像对 AI 说:别急着庆功,先把你做了什么、没做什么放在桌面上。

确认按上一轮方案继续。完成后请只用以下格式汇报:

- 交付:底座/地形、道路、主建筑、周边建筑、单体组合版是否齐全;
- 装配:各部件是否共享原点,是否可作为同一个对象的多个部件导入;
- 分色:底座、道路、建筑分别适合什么样的视觉对比,不假定具体耗材已经可用;
- 检查:尺寸、封闭性、流形、部件是否重叠、文件完整性分别是通过、失败还是未检查;
- 未验证:切片、换料、支撑、首层、实物打印必须逐项列出,不得以文件或预览替代;
- 风险与下一步:只列最影响打印成功的三项。

不要解释实现代码;不要创建拼图;不要覆盖已有输出。

提示词不能替你判断结果。它只是替你把最容易忘掉的事情提前写好:颜色要怎么留下、部件要怎么相处、什么才算证据、什么还只是希望。这样 AI 不需要消耗一大段上下文猜“你说的模型究竟是什么”,人也能更早发现它是不是正在悄悄跑偏。

AI 收到提示词以后,究竟怎样把它做出来

提示词不是被塞进一个黑箱,然后隔天掉出来一块塑料。至少在我们的项目里,AI 做的更像一个不嫌麻烦的项目经理:它把一句“做成地理手办”,交给几种擅长不同事情的工具,再把每一步的结果拎回来让我看。

我想强调的并不只是“Codex 会调用很多工具”。更重要的是,当我看懂它怎样做事时,约束不再是一句模糊的“做好一点”,而会变成可以落在某一步的选择:道路太细,就在分件前规定最小可读宽度;地形太平,就在定义实体时要求适度夸张;我忽然觉得某栋楼值得被看见,就在角色分配时让它成为重点建筑。

流程概览
  1. 看见 Codex 的执行步骤
  2. 把感觉说成约束 · 尺寸、颜色、宽度、重点
  3. Codex 调度工具 · GIS、CAD、几何检查、预览、切片
  4. 得到中间模型与检查结果
  5. 人回看、怀疑、提出新判断
  6. 发现新的创造点 · 地标、地形、颜色、边框

↻ 反馈进入下一轮

这才是我愿意把执行过程摊开写的原因。理解流程并不会把创作变成流水账,反而会把想象力从“AI 到底会不会做”里解放出来。你知道某个效果发生在何处,就能在那里加一道约束;你看见某个中间结果,就可能想到原先根本没有打算做的事。人不是在流程外面等答案,而是在流程里不断给答案换方向。

左右滑动查看完整表格

阶段 AI 要工具完成的事 人还可以追加的约束与效果
读取现场 读取 BlenderGIS 场景和已归档的地图、高程、道路、建筑信息,确认地点、范围、来源与许可,而不是凭截图猜一座城市。 指定中心点、模型覆盖范围;要求保留某条路、某个水体或一座地标;数据来源不清楚就停止。
定义实体 让 CAD 建模工具按毫米重建底座与地形,而不是直接把屏幕网格塞给打印机。 指定成品长宽高、底座厚度、边框形状、地形夸张程度;也可以明确“这是纪念摆件,不是测绘沙盘”。
分配角色 将地形/底座、道路、主建筑、周边建筑做成共享坐标的语义部件,同时生成单体组合版。 指定道路、建筑和底座的颜色;把地标单独设为重点色;要求道路始终比某个最小宽度更清楚。
检查模型 用几何检查工具查看尺寸、封闭性、流形、部件重叠和零体积问题;用装配预览工具实际查看模型。 指定喷嘴、层高、材料或最小细节门槛;要求细小建筑宁可合并或省略,也不要变成打印时会掉的碎屑。
准备交付 输出分件模型、单体组合版、清单与校验值,让下一次打开时能知道哪一件是什么。 指定只要单色版、只要多色版,或两版都保留;要求已有输出不得被静默覆盖。
切片与实物 在切片软件中作为同一对象的多个部件导入,分别配置耗材;随后由人完成实际打印和验收。 指定换料次数上限、首层颜色、打印方向、支撑策略、试件优先级;没有切片和实物证据时,继续写“未验证”。

这里面真正的关键不是“AI 会用多少工具”,而是每一个工具都只替人回答一个小问题。GIS 工具回答“这里原本有什么”;CAD 工具回答“它能变成什么形状”;检查工具回答“这件东西有没有明显坏掉”;切片软件和打印机最后才回答“它究竟能不能长到现实里”。

这也解释了为什么一段好提示词可以省下很多 Token。它不是让 AI 少做事,而是让它一开始就知道该找谁、先检查什么、哪些地方不许自作聪明。你不用每次等它生成完再说“对了,我还想要道路是橙色的”,更不用在一块已经合并好的单色模型前面发愁:我是不是刚刚把最重要的信息弄丢了。

如果想让自己的地图长得更有个性,可以在第一段提示词之后加上下面这一小段。它不是必须全部勾选,但每一条都会直接影响 AI 接下来分派给工具的任务:

在上述规则之外,请按我的选择追加约束:
- 视觉层级:底座 [颜色/材料],道路 [颜色/材料],普通建筑 [颜色/材料],重点建筑 [颜色/材料];
- 地形表达:地形起伏 [保持真实/适度夸张],最高与最低处的视觉差要清楚,但不要牺牲模型稳定性;
- 路网表达:保留 [道路或区域],道路最小可读宽度为 [数值] mm,过细的路径 [省略/合并/加宽];
- 建筑表达:重点建筑为 [名称或位置],需要 [更高/不同颜色/独立部件];过小建筑 [省略/合并为体块];
- 成品取向:[桌面摆件/教学模型/礼物],边缘 [直角/圆角],底座上 [保留/不保留] 名称或日期;
- 制造约束:打印机 [型号],喷嘴 [直径],材料 [材料],最多允许 [次数] 次换料;
- 交付边界:本轮不制作拼图;所有不能验证的判断都必须明确标记为未验证。

这些约束能带来一些很具体的特殊效果:把一座楼设成红色重点,眼睛会先找到地标;把道路从地面里抽出来,城市的骨架会更清楚;适度夸张地形,手指摸上去才会觉得它不是一块平板;把过小的建筑合并成体块,反而会让最终样品少一点脆弱,多一点像样。

当然,AI 也不能替我决定哪一种“像样”更好。它可以把地标做得更高,把道路做得更宽,把地图压得更平,但这些都是选择,不是自动的正确答案。我的工作始终没有被省掉:看一眼,怀疑一下,再告诉它哪里还不对。

最后,回到手掌里

手掌中的北京东软多色地理手办实物打印样品,绿色底座上有橙色道路和蓝红色建筑
实物照片:一件已经完成打印的多色地理手办样品。照片能证明样品被实际打印并拍摄;它不单独证明具体打印机、切片参数、长期强度或批量生产质量。

这次照片里的样品已经告诉我,至少有一件事不是只发生在屏幕里:道路、底座和建筑真的用不同颜色站在了一起。它不完美,甚至从掌心这个视角看,有些地方还带着 3D 打印特有的层纹和笨拙。但我反而喜欢它的笨拙。它提醒我,地理信息不是一堆冷冰冰的坐标;它可以被压缩、被挑选、被重新上色,最后变成一件能被手指摸到的小东西。

至于这套模型如何继续变成拼图,那是下一篇要讲的事。拼图会带来新的结构、缝隙和取舍,不能在这里假装已经解决。

而今天这块小小的北京东软,仍然躺在手心里。橙色的路从指缝旁边穿过去,浅蓝色的小楼站在绿色地面上。它当然不是城市本身,但它已经不是那张只能在屏幕里旋转的地图了。

地图与底图:© OpenStreetMap contributors,ODbL 1.0;地形数据:GMRT。本文中的 BlenderGIS 截图、模型截图和实物照片均来自本项目过程。实物照片证明已存在打印样品;其他打印参数与质量结论须以对应切片记录和实物检验为准。