管线概览:7 步走
CAD 源文件 → 格式转换 → 拓扑重建 → UV 展开 → 材质通道分离 → 纹理压缩 → glTF/GLB 打包 → 上线
① ② ③ ④ ⑤ ⑥ ⑦
每一步都有明确的通过阈值。任何一步不达标,后面所有优化都会打折。
① CAD 源文件验收
能做起点的文件优先级(从好到差):
| 格式 | 面数保留 | 装配结构 | 材质命名 | 推荐度 |
|---|---|---|---|---|
| STEP / Parasolid (.x_t) | ✅ | ✅ | ⚠️ | ⭐⭐⭐⭐⭐ |
| SolidWorks .sldasm | ✅ | ✅ | ✅ | ⭐⭐⭐⭐ |
| Rhino .3dm | ⚠️ | ⚠️ | ⚠️ | ⭐⭐⭐ |
| FBX / OBJ(已渲染用) | ❌(面数炸了) | ❌ | ⚠️ | ⭐⭐ 仅作兜底 |
| STL | ❌ | ❌ | ❌ | ⭐ 千万别用 |
验收 checklist:
- 零件命名有规律(如
FAB-001-Leg-Left,不是Mesh.287) - 装配层级清晰(子装配不超过 5 层)
- 零件之间不穿插(穿插会导致烘焙 AO 出现暗斑)
② 格式转换:保留装配结构
很多人这一步就错了:直接把 CAD 丢到 Blender 里导出 OBJ,装配关系全丢,后面配置器做零件切换要重新拆,工作量 × 10。
正确做法:用专用转换工具:
- Datakit CrossManager(行业金标准,99% 格式兼容)
- Autodesk Forge(云端 API,适合批量)
- ANSYS SpaceClaim(修补 CAD 几何问题的神器)
输出目标:保留零件命名 + 装配层级的 .fbx 或中间格式,不做任何减面。
③ 拓扑重建与减面:目标面数预算
| 品类 | 单个 SKU 目标三角面数 | 移动端目标 |
|---|---|---|
| 椅子 / 小件家具 | 8,000 – 15,000 | ≤ 12,000 |
| 沙发 / 模块家具 | 20,000 – 40,000 | ≤ 30,000 |
| 门窗 / 建筑构件 | 15,000 – 35,000 | ≤ 25,000 |
| 小型电子产品 | 6,000 – 12,000 | ≤ 8,000 |
| 工业机械(简版) | 50,000 – 100,000 | ≤ 70,000 |
减面工具优先级:
- Simplygon(最好的自动减面,能保护 UV 与边界)
- InstaLOD(价格友好,效果接近 Simplygon)
- Blender Decimate(手动兜底,不推荐批量)
⚠️ 关键约束:减面后法线不能有肉眼可见的撕裂。如果有 → 回到原始 CAD 修几何,不要在减面阶段硬扛。
④ UV 展开:3 套 UV 的必要性
PBR 管线至少 2 套 UV,推荐 3 套:
| UV 集 | 用途 | 要求 |
|---|---|---|
| UV0 | BaseColor / Normal / Roughness / Metallic | 0–1 空间无重叠,利用率 ≥ 85% |
| UV1 | Ambient Occlusion / Lightmap | 允许重叠(按烘焙策略),块之间保留 4–8px 间隔 |
| UV2 | (可选)自定义贴花 / 文字刻字 | 对应特定面,按需 |
展开工具推荐:RizomUV(速度最快,自动对称展开)。
⑤ 材质通道分离:4 张核心贴图
Web 端的 PBR ≠ 离线渲染的 PBR。不要无脑把 Substance 的 8 张图全导出去,Web 端 4 张就够:
| 通道 | 格式 | 压缩方式 | 尺寸建议 |
|---|---|---|---|
| BaseColor(含 Alpha) | PNG → KTX2 | UASTC + RDO | 1024² 或 2048² |
| Normal (OpenGL 格式) | PNG → KTX2 | UASTC Normal 模式 | 同上 |
| ORM(Occlusion / Roughness / Metallic 三通道合并) | PNG → KTX2 | R=AO, G=Roughness, B=Metallic | 同上 |
| Emissive(如有) | PNG → WebP | Lossy 85% | 同上,没发光就删掉 |
⚠️ 常见坑:Roughness 一定要打 Gamma 校正。Roughness 图看着太暗?恭喜你,八成是 sRGB 没设对。
⑥ 纹理压缩:KTX2 是你唯一的选择
2026 年了,别再发 PNG / JPG 贴图了:
| 格式 | 同质量体积比 | iOS 支持 | 安卓支持 | 桌面 Chrome |
|---|---|---|---|---|
| PNG | 100%(基准) | ✅ | ✅ | ✅ |
| WebP | ~50% | ✅ 14+ | ✅ | ✅ |
| KTX2 (UASTC) | ~25% | ✅ 16+ | ✅ 12+ | ✅ 106+ |
| KTX2 (Basis ETC1S) | ~15% | ✅ | ✅ | ✅ |
压缩工具:toktx(Khronos 官方 CLI),或用我们的在线批量压缩工具。
目标:每个 SKU 所有资源(模型 + 贴图)首屏加载 ≤ 3MB,移动端 ≤ 2MB。
⑦ glTF 打包与上线
最后一步用 glTF Transform 做三件事:
- 把所有贴图内联进
.glb(避免多个请求瀑布流) - 用
draco()压缩几何(压缩率 ~70%) - 用
textureCompress()把 Png 全转成 KTX2
// glTF Transform 关键片段示例
import { NodeIO } from '@gltf-transform/core';
import { KHRONOS_EXTENSIONS } from '@gltf-transform/extensions';
import { draco, textureCompress } from '@gltf-transform/functions';
const io = new NodeIO().registerExtensions(KHRONOS_EXTENSIONS);
const document = await io.read('input.glb');
await document.transform(
draco({ method: 'edgebreaker' }),
textureCompress({ encoder: 'ktx2' })
);
await io.write('output.glb', document);
管线验收的 4 个底线指标
在所有上线前,必须满足:
| 指标 | 阈值 | 测量方式 |
|---|---|---|
| LCP(首屏加载) | < 1.5s(4G) | Chrome Lighthouse |
| FPS(交互流畅度) | ≥ 60 桌面 / ≥ 45 中端移动 | three.js renderer.info 手动观察 |
| 内存占用(峰值) | ≤ 250MB(移动) | Chrome DevTools Memory |
| 贴图精度 | 放大 200% 无肉眼可见块效应 | 肉眼 + 对比 |
任何一项不达标 → 回到对应步骤返工,不要带病上线。
结语
一个优质的资产管线是 3D 配置器体验的地基。投入一周把管线做标准,比后面半年在“怎么又卡了”上救火,划算太多。