管线概览: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

减面工具优先级:

  1. Simplygon(最好的自动减面,能保护 UV 与边界)
  2. InstaLOD(价格友好,效果接近 Simplygon)
  3. 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 做三件事:

  1. 把所有贴图内联进 .glb(避免多个请求瀑布流)
  2. 用 draco() 压缩几何(压缩率 ~70%)
  3. 用 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 配置器体验的地基。投入一周把管线做标准,比后面半年在“怎么又卡了”上救火,划算太多。