这篇能做出什么
想象你要做一把游戏里的“科幻应急扳手”:整体轮廓已经有一个粗糙的白模,但手柄太短、头部卡口太钝、表面没有工艺感。传统做法是回 Blender 一点点挪点、重新展 UV、再画贴图,来回几小时。用指令式局部编辑,流程可以压缩成:框住手柄 → 说一句“把手柄加长 15%,握持段略微收细,其他部分不变” → 看四视图 → 接受或回退 → 再框住头部说下一句。
按这篇走完,你会得到四样东西:
1. 一个按你的规格收敛过的模型文件(glb 或 fbx),面数、单位、朝向都能直接进引擎或渲染管线。
2. 一套贴图,并且贴图是在形状定稿之后迭代出来的,不会因为改形而全废。
3. 一份迭代记录表,每轮只记三件事:选区在哪、指令原文、结果保留还是回退。这份表比模型本身更值钱,下次做同类资产可以直接复用。
4. 一套可复用的提示词模板,把“一句话只改一处”变成肌肉记忆。
核心方法论只有一句:把“改模型”拆成“框一小块 + 说一句话 + 验三条线”。三条线是形状、接缝、面数,后面会展开。
前置条件清单
动手前把这些准备好,能省掉一半返工。
- 账号与编辑额度:Meshy 的编辑功能入口和额度规则会随版本调整,具体以官方文档当前版本为准。先在免费额度内跑通一轮完整流程,再决定是否投入正式资产。
- 一个干净的白模。三种来源都行:自己在 Blender 里搭的低模、从图片/文本生成后减面得到的模型、买来的基础网格。判断标准只有一条:没有破面、没有重叠面、没有非流形边。白模不干净,后面每一轮编辑都会放大问题。
- 参考图:正面、侧面、四分之三视角各一张。局部编辑时把参考图放在旁边,能显著减少“越改越偏”。
- 规格表:目标管线的硬性约束,提前写死。示例:
| 项目 | 取值 | 说明 |
|---|---|---|
| 单位 | 米 | 导出前统一,避免引擎里缩放 100 倍 |
| 朝向 | +Z 向上,正面朝 -Y | 与引擎导入约定一致 |
| 三角面预算 | 按目标平台定 | 手游道具和电商主图差一个量级 |
| 贴图尺寸 | 2K 或 4K | 电商主图可上 4K,实时渲染看显存 |
| 材质数量 | 尽量 ≤ 3 | 材质槽越多,引擎里越难合批 |
- 版本目录:先从命令行建好,不要等文件乱了再补。
```bash
mkdir -p wrench/{refs,base,rounds,export}
cp wrench_base.glb wrench/base/wrench_base_v00.glb
```
- 记录表:一个 JSON 文件就够,字段固定下来。
```json
{
"asset": "wrench_emergency",
"unit": "meter",
"triangle_budget": 20000,
"rounds": [
{
"version": "v01",
"goal": "确定整体比例",
"selection": "整体",
"prompt": "lengthen the handle by about 15 percent, keep the head unchanged",
"result": "accepted",
"notes": "手柄加长,握持段略收细"
}
]
}
```
分步骤
步骤 1:把白模整理成“可编辑”的状态
局部编辑最怕的事情是:你以为只改了头部,结果整条模型的缩放和朝向都被重算了一遍,导进引擎之后对不上位。所以第一步不是打开编辑器,而是在 Blender 里做归一化:应用缩放与旋转、水平居中、把底面落到 Z=0。
```python
Blender 脚本:归一化当前选中物体
import bpy
obj = bpy.context.active_object
应用旋转与缩放,避免后续编辑继承奇怪的变换矩阵
bpy.ops.object.transform_apply(location=False, rotation=True, scale=True)
原点移到几何中心,再水平居中
bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY', center='BOUNDS')
obj.location = (0.0, 0.0, 0.0)
bpy.context.view_layer.update()
底面贴到 Z = 0
min_z = min((obj.matrix_world @ v.co).z for v in obj.data.vertices)
obj.location.z -= min_z
bpy.ops.object.transform_apply(location=True, rotation=False, scale=False)
print("归一化完成,当前三角面数:",
sum(len(p.vertices) - 2 for p in obj.data.polygons))
```
顺手做一次体检,把面数、材质槽、UV 层打出来存档:
```python
Blender 脚本:资产体检
import bpy
obj = bpy.context.active_object
me = obj.data
tris = sum(len(p.vertices) - 2 for p in me.polygons)
print("三角面数:", tris)
print("材质槽:", [s.material.name if s.material else None for s in obj.material_slots])
print("UV 层:", [uv.name for uv in me.uv_layers])
print("顶点组:", [g.name for g in obj.vertex_groups])
```
如果白模是从图片或文本生成的,先减面到预算的 1.2 倍左右再进编辑。留一点余量,因为局部编辑通常会带来少量面数增长。
步骤 2:锁定基线版本,拍四视图
把归一化后的模型导出为 wrench_base_v00.glb,然后截四张图:正、侧、背、四分之三。这四张图的作用是后面每一轮都拿它对比。人眼对“渐变式走形”极不敏感,连续改五轮之后你会觉得“好像还行”,但和基线一比就发现整体变胖了。
导出脚本:
```python
Blender 脚本:导出 glb 基线
import bpy
bpy.ops.export_scene.gltf(
filepath="//export/wrench_base_v00.glb",
export_format='GLB',
use_selection=True,
export_apply=True,
)
```
从这一版开始,每一轮编辑前先复制一份当前版本。AI 编辑不可逆,回退的成本远低于重做。
步骤 3:选区框定——决定“只改这一块”
这是整个流程里最需要手感的一步。选区决定了改动的作用范围,选错了,提示词写得再准也没用。
三种常见选区方式,按精度从低到高:
- 包围盒 / 框选:拉一个立方体把目标区域框住。适合体块级改动,比如“手柄整体加长”。
- 笔刷涂抹:在模型表面刷出区域。适合表面细节,比如“在护板上加一道凹槽”。
- 部件 / 材质选择:如果白模本来就是分件的(手柄、头部、卡口分开),直接选部件最稳。
框选的三条经验:
1. 选区要略大于目标区域,把接缝包进去。只框住凹槽本身,编辑后凹槽边缘会和周围对不上,出现硬边。
2. 选区不要跨越结构断点。给头盔加护目镜,选区覆盖额头到鼻梁就够了,别把耳朵和护耳一起框进去——那部分会被重绘。
3. 一次只框一个语义单元。想同时改手柄和头部,就分两轮。合并成一轮,模型会在两个区域之间“编造”过渡。
举扳手的例子:改手柄比例,选区框住手柄中段到尾部,头部卡口不进选区;改卡口形状,反过来。
步骤 4:提示词写法——一句话只改一件事
提示词模板固定成四段:
```
[动作动词] + [对象部位] + [具体形态或材质] + [保持不变的范围]
```
对照例子:
| 类型 | 写法 |
|---|---|
| 差 | 让手柄更酷一点,加点科技感,顺便把材质改成金属 |
| 差 | 不要让它看起来太钝 |
| 好 | 把手柄加长约 15%,握持段略微收细,头部卡口保持不变 |
| 好 | 在头部卡口内侧加一圈防滑齿,齿高约 2 毫米,其余部分不变 |
差在三个地方:一句话干了三件事、形容词不可验证、只有否定没有目标形态。
英文提示词在多数 3D 生成模型上更稳,因为训练语料以英文为主。中英对照写成两行,用哪个都试一次,取好的那个存进模板库:
```text
EN: lengthen the handle by about 15 percent and slightly taper the grip section, keep the head and jaws unchanged
CN: 把手柄加长约 15%,握持段略微收细,头部卡口保持不变
```
关于“保持不变”,写一句显式约束确实有用,但不要写成一长串否定句。一句 keep the rest of the model unchanged 比五句 don't change A, don't change B 效果好——否定词堆叠会让模型注意力分散。
另外,量词尽量给数值。“加粗”不如“加粗到原来的 1.5 倍”,“加一点细节”不如“加三道等距横向凹槽”。数值不必精确命中,它的作用是给模型一个明确的锚点。
步骤 5:单轮验收——三条线
每一轮编辑出来,别急着接受,按三条线过一遍:
1. 形状线:目标部位改对了吗?四视图对比基线,看整体轮廓有没有被带着走。
2. 接缝线:选区边界处有没有硬边、错位、颜色断层?把视角拉近到接缝,绕着看一圈。
3. 面数线:三角面数涨了多少?如果一轮涨了 30% 以上,说明选区太大或者指令触发了整体重建,回退重来。
任何一条不过,就回退,不要“在坏结果上继续修”。连续叠加两轮的效果通常是模型越来越糊。
验收通过就导出 wrench_round_v01.glb,把指令原文和选区截图写进记录表。
步骤 6:多轮迭代的顺序策略
顺序错了会浪费大量轮次。固定按这个梯度推进:
体块比例 → 结构件 → 表面细节 → 贴图
- 第一轮改比例。把整体长短、粗细定下来,这时候不要碰任何细节。
- 第二轮加结构件。卡口、护板、卡扣、螺丝位——这些是有明确形状的东西。
- 第三轮加表面细节。凹槽、倒角、磨损、纹理起伏。
- 第四轮之后才动贴图。
原因很直接:每往前推一步,后面的改动都建立在前面定稿的形状上。先做贴图再改形,UV 一重展,贴图全废。
一个五轮的示例记录:
| 轮次 | 目标 | 选区 | 指令要点 |
|---|---|---|---|
| v01 | 比例 | 手柄 | 加长 15%,握持段收细 |
| v02 | 结构 | 头部卡口 | 内侧加防滑齿 |
| v03 | 结构 | 头部侧面 | 加一个圆形旋钮凸台 |
| v04 | 细节 | 手柄表面 | 加三道等距横向凹槽 |
| v05 | 贴图 | 全身分材质 | 金属主体 + 橡胶握把 |
步骤 7:贴图迭代
贴图阶段的第一原则:形状锁死,只改材质。从这一轮开始,选区的作用从“限定几何范围”变成“限定材质区域”。
提示词里写工艺,不要写情绪:
```text
EN: brushed aluminum with fine linear scratches along the length, slightly worn edges, matte finish
CN: 拉丝铝材质,沿长度方向有细密线性划痕,边缘轻微磨损,哑光
```
三个容易踩的点:
- 分材质迭代。金属主体和橡胶握把分两轮做,每轮选区只覆盖对应区域。一次性喊“全身换成金属+橡胶+塑料”,模型会在交界处乱猜。
- 改动幅度大要重展 UV。如果某一轮把形状改得比较狠(比如加了新的凸起结构),先回 Blender 重新展 UV 再回来做贴图,否则贴图会在新结构上拉伸。
- 保留中间版本。贴图轮次的结果差异往往很微妙,留档才能做 A/B 对比。
步骤 8:导出与回管线
定稿后导出,按目标管线选格式:实时渲染和大多数引擎走 glb,传统 DCC 交换走 fbx。
```python
Blender 脚本:定稿导出
import bpy
bpy.ops.export_scene.gltf(
filepath="//export/wrench_final_v05.glb",
export_format='GLB',
use_selection=True,
export_apply=True,
export_yup=True, # 按目标引擎的坐标约定调整
)
```
导入引擎或渲染器之后,按这张清单过一遍:
- 缩放是否为 1,朝向是否符合约定
- 三角面数是否在预算内
- 材质槽数量是否可接受,贴图是否随文件打包
- 法线朝向是否正确(发黑、发花通常是法线反了或缺少切线)
- 贴图颜色空间:基础色用 sRGB,法线/粗糙度/金属度用 Linear
电商渲染管线额外注意一点:主图通常需要干净背景和统一光照,导出前在 DCC 里把模型原点放在视觉重心,方便批量摆位。
常见坑与排错
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 指令没生效,模型没变化 | 选区为空或选区太小 | 扩大选区,把目标区域完整包住并带上接缝 |
| 改动蔓延到全身 | 选区过大,或指令里同时说了多个动作 | 缩小选区;把指令拆成单动作重跑 |
| 接缝处出现硬边、错位 | 选区边界切在平滑过渡区 | 选区向外扩一圈,让过渡区落在选区内部 |
| 模型“炸开”、出现尖刺 | 白模本身有破面或非流形边 | 回 Blender 修拓扑,重新导基线 |
| 面数暴涨 | 一轮内改了太多区域 | 回退,拆成多轮;必要时先减面再继续 |
| 贴图错位、拉伸 | 形状改动后 UV 未重展 | 重新展 UV 再做贴图轮次 |
| 导入引擎后模型发黑 | 法线反向或缺少切线 | 在 Blender 里重算外法线,导出时勾选切线 |
| 颜色偏灰、偏亮 | 贴图颜色空间设置错误 | 基础色 sRGB,数据贴图 Linear |
| 迭代几轮后“感觉不对” | 渐变式走形,没有和基线对比 | 每轮强制四视图对比 v00 |
| 文件越存越乱 | 没有版本命名规范 | 回到步骤 2 的目录结构,v00 到 v05 逐版留档 |
排错顺序建议固定:先看选区,再看指令,最后才怀疑模型能力。绝大多数失败案例出在前两步。
下一步建议
- 建自己的提示词库。按“动作类型”分类:加结构、减结构、改比例、改材质、做旧。每类存三到五条验证过的中英对照,下次直接改名词。
- 做 A/B 对照。同一个选区、同一个目标,写两版指令各跑一次,记录哪版更接近预期。十次之后你对“什么词有用”的判断会比任何教程都准。
- 把重复劳动脚本化。归一化、体检、导出这三段 Blender 脚本可以串成一个批处理,每次拿到新白模先跑一遍,省掉手工检查。
- 保留最后 10% 给传统 DCC。AI 编辑擅长体块和材质方向,精确的倒角、布线、对称修正还是手工更快。把 AI 当成“快速试错的前端”,别指望它一次交付成品。
- 定期回看官方文档。编辑功能的入口、选区工具和导出选项会随版本变化,涉及具体操作路径时以官方文档当前版本为准;本文的流程框架不随版本变化,可以长期当骨架用。
