SketchUp 接入 MCP 实战续篇:从“能画一个立方体”到“交付一件可修改的模型”

上一篇解决的是"怎么接上":我们区分了官方远程 Connector 和本地桥接方案,也完成了版本读取、模型检查和测试立方体。

但接通 MCP 只是第一步。

真正把它放进日常工作后,很快会遇到几个更实际的问题:

  • 一次说太多,AI 做到一半就超时;
  • 外形看起来没问题,尺寸和组件层级却是错的;
  • 修改一个细节,前面正确的部分也被一起改坏;
  • AI 说"已完成",模型里却留下散面、重名组件或错位对象;
  • 操作很多,但没有一个节点适合回退。

所以这篇不再讲安装,而是用一张餐桌走完一次完整的本地 MCP 建模流程:读取、规划、白模、复核、细化、材质、交付

重点不是"一句话生成",而是让每一步都可检查、可修改、可撤销。

说明:不同版本的 SketchUp MCP 扩展,工具名称和参数可能不同。下面的提示词按"能力"描述,不强依赖某个具体工具名。实际执行前,请先让 AI 列出当前可用工具;涉及真实项目时,务必另存副本。


一、先定义交付标准,不要急着让 AI 开画

这次要做一张六人餐桌,最终要求如下:

项目 要求
总体尺寸 1800 × 900 × 760 mm
桌面 1800 × 900 × 35 mm
桌腿 4 根,截面 70 × 70 mm
桌腿退距 距桌面四边 100 mm
围板 长边 1460 × 25 × 100 mm,短边 560 × 25 × 100 mm
倒角 桌面外露边 3 mm,桌腿外露边 2 mm
组件结构 桌面、桌腿、围板分别成组,最外层为 DiningTable_v01
原点 桌面中心在 XY 原点,地面为 Z=0
材质 桌面暖色橡木,桌腿和围板深灰
交付 无散面、命名清晰、尺寸正确、保留可编辑结构

这张表有两个作用。

第一,它把"做一张现代餐桌"变成了可以验证的数据。第二,它提前定义了"完成"的含义------不是视口里看着像,而是尺寸、位置、层级、材质和可编辑性都符合要求。

第一个提示词:只读,不修改

不要一上来就让 AI 创建几何体。先确认它看到的模型和你看到的是同一个。

text 复制代码
请连接当前 SketchUp 模型,先只读检查,不要创建、删除或修改任何对象。

请报告:
1. SketchUp 版本;
2. 当前模型单位;
3. 当前活动编辑上下文是否在模型根层级;
4. 当前选择集中的对象数量;
5. 现有群组、组件和材质数量;
6. 当前可用的撤销、几何创建、变换、材质和模型信息工具。

如果模型单位不是毫米,先报告,不要自行修改。

这一步看似慢,实际是在避免最常见的低级错误:在错误的编辑上下文中建模、用英寸解释毫米,或者把新对象塞进一个正在编辑的旧组件里。


二、让 AI 先复述计划,再执行

模型检查通过后,先让 AI 把需求转换成坐标和组件计划。

text 复制代码
我们要创建 DiningTable_v01,暂时只做白模,不加材质、不做倒角。

成品总体尺寸为 1800 × 900 × 760 mm。
桌面尺寸为 1800 × 900 × 35 mm,桌面顶面 Z=760 mm。
四条桌腿截面为 70 × 70 mm,从地面延伸到桌面底面;
桌腿外侧距桌面对应边均为 100 mm。
桌面中心位于 XY 原点,地面为 Z=0。

执行前请先输出:
1. 桌面包围盒的最小点和最大点;
2. 四条桌腿各自的中心坐标和高度;
3. 计划创建的群组/组件层级;
4. 分几步执行,每一步如何检查。

此时不要修改模型。发现尺寸冲突时先提问,不要自行猜测。

根据这些条件,AI 至少应该推导出:

  • 桌面 X 范围:-900 到 900 mm;
  • 桌面 Y 范围:-450 到 450 mm;
  • 桌面 Z 范围:725 到 760 mm;
  • 桌腿高度:725 mm;
  • 桌腿外侧距离桌面边缘 100 mm;
  • 每条桌腿中心距 X 轴方向端部:765 mm;
  • 每条桌腿中心距 Y 轴方向端部:315 mm。

图 1:执行前先把自然语言换算成坐标。示意图不代表真实 SketchUp 操作界面。

这里最值得检查的是"退距"的定义。

"桌腿距边缘 100 mm"可能被理解为桌腿外侧、中心线或内侧距边缘 100 mm。只要定义不清,最后就能差出 35 至 70 mm。

让 AI 先复述坐标,是成本最低的错误拦截点。


三、白模阶段:拆成三次操作

不要把桌面、桌腿、围板、倒角和材质塞进一个请求。白模阶段分三次做,每次只解决一种几何关系。

图 2:桌面、桌腿、围板分阶段创建,每一步检查通过后再继续。

第一步:只创建桌面

text 复制代码
现在只创建桌面:

- 尺寸 1800 × 900 × 35 mm;
- 中心位于 XY 原点;
- 顶面 Z=760 mm;
- 创建后立即成组,命名为 DT_Top;
- 不创建其他对象,不加材质,不做倒角。

完成后读取 DT_Top 的包围盒,报告 X/Y/Z 三个方向尺寸及最小点、最大点。
若任一尺寸误差超过 0.1 mm,请撤销本步并报告原因。

为什么只做一个桌面?因为它会成为后续所有部件的坐标基准。桌面位置一旦错了,桌腿和围板再精确也没有意义。

第二步:创建一条桌腿,再复制

text 复制代码
在不修改 DT_Top 的前提下,创建第一条桌腿:

- 截面 70 × 70 mm;
- 高度 725 mm;
- 底面 Z=0;
- 其靠近桌角的两个外侧面,分别距桌面对应外边 100 mm;
- 创建为组件定义 DT_Leg,实例名 DT_Leg_FL。

先只创建这一条。完成后报告包围盒和中心点,不要继续复制。

确认第一条腿正确后,再发第二条指令:

text 复制代码
以 DT_Leg_FL 为源,复制出另外三条相同组件实例。
实例分别命名为 DT_Leg_FR、DT_Leg_RL、DT_Leg_RR。

四条腿必须共用同一个组件定义,但每个实例名称不同。
只做平移,不旋转、不缩放。

完成后报告四个实例的中心坐标、包围盒尺寸,以及它们是否共用同一组件定义。

这里使用"组件实例"而不是四个独立群组,是为了保留后续统一修改能力。比如桌腿截面从 70 mm 改为 65 mm,修改定义即可同步四条腿。

但也要注意:如果未来四条腿需要不同开槽或不同造型,就应该先"设为唯一",否则修改一条会影响全部实例。

第三步:添加围板并建立总层级

text 复制代码
在桌面下方添加四块围板:

- 围板顶面贴合桌面底面 Z=725 mm;
- 围板高度 100 mm,厚度 25 mm;
- 两块长边围板长度 1460 mm;
- 两块短边围板长度 560 mm;
- 围板位于桌腿之间,不得穿过桌腿;
- 分别命名为 DT_Apron_Long_F、DT_Apron_Long_B、
  DT_Apron_Short_L、DT_Apron_Short_R。

创建后检查围板与桌腿是否发生实体穿插。
确认无误后,将 DT_Top、四条桌腿和四块围板放入最外层组件 DiningTable_v01。
不要修改任何子对象的局部坐标和尺寸。

这里故意没有把围板的完整坐标写死,而是同时给了尺寸和拓扑约束:贴桌面底面、位于桌腿之间、不能穿插。

按当前尺寸,X 方向两条桌腿内侧面的净距应为 1460 mm,Y 方向应为 560 mm。如果 AI 的计算结果与此不一致,它应该停下来报告冲突,而不是靠拉伸围板或移动桌腿"凑上去"。这正是前面要求"发现冲突先提问"的价值。


四、不要相信"已完成",要让模型自己说话

视口截图适合看外形,不适合证明尺寸。

白模完成后,应该同时做三类检查。

1. 尺寸检查

text 复制代码
请只读检查 DiningTable_v01,不要修改。

报告:
- 总体包围盒尺寸;
- 桌面尺寸与 Z 范围;
- 每条桌腿的尺寸、中心点和 Z 范围;
- 每块围板的尺寸和 Z 范围。

将实际值与以下目标逐项对比:
总体 1800 × 900 × 760 mm;
桌面 1800 × 900 × 35 mm;
桌腿 70 × 70 × 725 mm。

用"通过 / 不通过 / 无法验证"标记每一项,不要用"基本正确"等模糊结论。

2. 结构检查

text 复制代码
请检查 DiningTable_v01 的层级与命名:

- 最外层只能有 1 个组件 DiningTable_v01;
- 内含 1 个桌面、4 个桌腿实例、4 块围板;
- 四条桌腿应共用 DT_Leg 组件定义;
- 不应存在散落的边或面;
- 不应存在默认名称、空群组或重名实例。

只报告问题,不要自动修复。

3. 空间关系检查

text 复制代码
请检查:

- 四条桌腿底面是否全部位于 Z=0;
- 桌腿顶面和围板顶面是否与桌面底面 Z=725 mm 对齐;
- 围板是否穿入桌腿;
- 左右、前后是否关于 X/Y 轴对称;
- 是否有对象超出桌面 XY 投影范围。

若当前工具不能可靠判断实体相交,请明确写"无法验证",不要猜测。

"无法验证"并不是失败。

真正危险的是工具没有检查能力,AI 却根据预期回答"没有问题"。


五、发现错误时,不要让 AI"整体优化"

假设检查发现右后桌腿 Y 坐标多了 50 mm。最不稳妥的说法是:

帮我把桌子调整正确。

它可能重新排列四条腿,甚至重建整张桌子。

更稳妥的修复指令应该把修改范围锁死:

text 复制代码
只修复实例 DT_Leg_RR 的位置。

当前问题:它的 Y 方向中心坐标比目标值多 50 mm。
请仅沿 Y 轴负方向平移 50 mm。

禁止修改:
- DT_Leg 组件定义;
- 其他三个桌腿实例;
- 桌面和围板;
- 任何对象的尺寸、旋转和材质。

执行前报告当前坐标和目标坐标;
执行后重新读取该实例坐标,并检查 DiningTable_v01 总体包围盒。
如果工具无法保证只移动该实例,则不要执行。

这类提示词可以概括成四句话:

  1. 只改谁;
  2. 改什么参数;
  3. 哪些对象绝对不能动;
  4. 改完如何证明。

它比"再优化一下"长,但返工成本低得多。


六、倒角与材质要放到白模确认之后

倒角会增加边和面数量,材质会干扰几何检查。二者都不应该出现在白模阶段。

倒角前先建立回退点

text 复制代码
白模已经确认。执行任何细化前,请先:

1. 确认当前没有未完成的编辑上下文;
2. 保存一个新版本,文件名追加 _whitebox;
3. 如果当前工具不支持保存或另存为,请停止并提醒我手动完成。

不要继续执行倒角。

手动确认保存完成后,再开始倒角:

text 复制代码
只处理外露边:

- DT_Top 外露边倒角 3 mm;
- DT_Leg 的四条竖向外露边倒角 2 mm;
- 围板暂不倒角;
- 不改变总体长、宽、高;
- 不使用 eval_ruby。

先对桌面执行并报告结果,待确认后再处理桌腿。
若当前类型化工具不支持可靠倒角,请停止,不要用任意代码执行替代。

这里宁可接受"当前工具不支持",也不要为了完成任务临时打开 eval_ruby。类型化工具能力有限,影响的是效率;任意代码执行权限失控,影响的是整个模型和本机环境。

材质先命名,再贴图

为了让后续替换 PBR 材质更容易,先统一材质命名:

text 复制代码
创建并应用两种占位材质:

1. MAT_Oak_Warm_v01
   - 用于 DT_Top;
   - 先使用暖橡木近似色,不加载外部贴图。

2. MAT_Metal_Dark_v01
   - 用于四条桌腿和四块围板;
   - 先使用深灰近似色,不加载外部贴图。

不要按单个面零散赋材质,优先在正确的群组或组件层级应用。
完成后报告每种材质关联的对象。

为什么先用占位色?

因为建模阶段要确认的是材质分区,不是最终渲染效果。等对象归属完全正确后,再替换 Base Color、Normal、Roughness、Metallic、AO 等 PBR 资源,会比一边建模一边处理贴图稳定得多。


七、最终交付检查:把 AI 当执行员,也当质检员

最后一次提示词不要再创建内容,只做验收。

图 3:固定视图用于观察外形,尺寸和层级数据用于证明结果。

text 复制代码
请对 DiningTable_v01 做最终只读验收,不要修复、删除或重命名任何对象。

按以下格式输出:

一、尺寸
- 总体尺寸:目标值 / 实际值 / 结论
- 桌面尺寸:目标值 / 实际值 / 结论
- 桌腿尺寸:目标值 / 实际值 / 结论

二、结构
- 最外层组件名称
- 子对象数量
- 桌腿是否共用组件定义
- 是否存在散边、散面、空群组或默认名称

三、位置
- 是否以 XY 原点为中心
- 是否落地
- 是否对称
- 是否存在穿插或超出范围

四、材质
- MAT_Oak_Warm_v01 的应用对象
- MAT_Metal_Dark_v01 的应用对象
- 是否存在未使用材质

五、风险
- 列出所有无法通过当前工具验证的项目

只能使用"通过 / 不通过 / 无法验证"三种结论。

如果当前扩展支持视口截图,可以再补一组固定视图:

  • 正视图;
  • 侧视图;
  • 顶视图;
  • 等轴测视图。

截图用于人工判断比例、穿插和视觉异常,数据报告用于确认尺寸与层级。两者不能互相替代。


八、把整套流程压缩成一个可复用模板

以后不管做书柜、橱柜、门窗还是景观小品,都可以复用下面这套任务单。

text 复制代码
【任务名称】
创建:

【执行范围】
当前阶段只做:
明确禁止:

【单位与坐标】
模型单位:
原点定义:
朝向定义:
地面标高:

【关键尺寸】
总体尺寸:
部件尺寸:
间距与退距:
允许误差:

【组件结构】
最外层名称:
子组件名称:
哪些对象共用组件定义:
哪些对象必须独立:

【执行顺序】
1. 只读检查;
2. 复述坐标与计划;
3. 创建基准对象;
4. 分批创建其他对象;
5. 尺寸和层级复核;
6. 细化;
7. 材质;
8. 最终验收。

【停止条件】
- 需求存在歧义;
- 尺寸互相冲突;
- 需要调用未授权工具;
- 无法保证只修改指定对象;
- 检查结果超出允许误差。

【每步回报】
- 实际创建或修改的对象;
- 修改前后数值;
- 检查结果;
- 无法验证的项目;
- 是否可以单步撤销。

这个模板最重要的不是格式,而是三个约束:

  • 执行前先计算;
  • 执行后读回数据;
  • 不确定时停止,而不是猜。

九、哪些工作适合交给 MCP,哪些仍应由人决定

MCP 擅长的是明确、重复、可验证的操作:

  • 按尺寸创建规则几何;
  • 批量命名和整理组件;
  • 复制、阵列和精确移动;
  • 读取包围盒、数量和层级;
  • 按既定规则分配材质;
  • 执行标准化交付检查。

它不擅长替你做没有标准答案的判断:

  • 桌腿比例是否"更优雅";
  • 某个空间是否"更有氛围";
  • 节点做法是否满足真实加工;
  • 材质是否适合项目预算与维护条件;
  • 结构和人体工学是否真的成立。

更准确的分工是:

人负责目标、约束和判断,AI 负责计算、执行和重复检查。

当任务可以被写成尺寸、坐标、层级、允许误差和停止条件时,MCP 通常能明显提效;当任务只能用"高级一点""舒服一点""有设计感"来描述时,AI 最多提供备选方案,不能替代设计决策。


结语:真正省时间的不是一句话,而是少返工

第一次接通 SketchUp MCP 时,最有冲击力的画面通常是:输入一句话,视口里出现了模型。

但真正决定它能否进入项目的,不是生成速度,而是下面这些问题:

  • 它是否知道自己正在改什么;
  • 结果能否用数据复核;
  • 错误能否被限制在一个小步骤里;
  • 每个阶段是否有明确回退点;
  • 最终模型能否被其他人继续编辑。

从"能调用工具"到"能稳定交付",中间差的不是更长的提示词,而是一套工程化流程。

先读,再算;先白模,再细化;每步检查,随时可退。

做到这些,AI 才不只是替你画得快,而是真的开始替你承担建模流程中的重复劳动。

下一篇,我们可以继续解决材质问题:如何从 SketchUp 中扫描现有材质,通过 AI 生成 Base Color、Normal、Roughness、Metallic 和 AO,并把它们重新绑定到模型,形成一条可追踪、可回滚的 PBR 材质工作流。