模型压缩优化
模型压缩优化是 Zipoly 的核心功能:对 glTF/GLB 模型执行 Draco(KHR_draco_mesh_compression)或 Meshopt(EXT_meshopt_compression / gltfpack)几何压缩,体积缩减 70–90%,并可选 KTX2/WebP 纹理压缩,支持单文件与批量两种模式。打开软件默认就在这个页面。
压缩流程
- 导入模型 — 点击"选择文件"或拖入
.glb/.gltf文件。导入后软件自动显示模型统计和体检诊断(重复顶点、超规格纹理等),并给出压缩参数建议 - 选择引擎 — 按下表选择 Draco 或 Meshopt,不确定时直接用默认的 Meshopt
- 设置压缩级别 — 默认 7,适合绝大多数场景
- 开始压缩 — 点击"开始优化",右侧实时显示进度
- 确认结果 — 查看对比窗口,建议每次都点"预览效果"确认外观——参数是否合适,只有肉眼能判断
只支持 glTF / GLB 格式输入
压缩功能仅接受 .glb 和 .gltf 文件。FBX、OBJ 等其他格式需先通过格式转换转为 GLB,再进行压缩。
第 2 步:选择引擎
| Draco | Meshopt(推荐) | |
|---|---|---|
| 压缩率 | 高 | 更高 |
| 加载速度 | 快 | 更快(WebGPU 友好) |
| 纹理压缩 | JPEG / WebP / KTX2 | BasisU(ETC1S / UASTC) |
| 框架兼容 | Three.js / Babylon.js / model-viewer 原生支持 | 仅 Three.js(需配置解码器) |
| 适合场景 | 旧项目、需要广泛兼容 | 新项目、追求极致性能 |
不确定选哪个?选 Meshopt
Meshopt 不可用时软件会自动降级到 Draco 并提示,不会中断处理。

Meshopt 格式的加载限制
使用 Meshopt 引擎压缩后的模型不能被 Babylon.js 和 model-viewer 直接加载,只支持 Three.js(r136+)。如果你的项目使用这两个框架,请选择 Draco 引擎。
第 3 步:设置压缩级别
默认 7,适合绝大多数场景。
| 级别 | 场景 |
|---|---|
| 0(RAW) | 不压缩几何,仅作对比基线 |
| 1–3 | 工程 / 医疗模型,精度优先 |
| 4–6 | 产品展示、建筑可视化 |
| 7(默认) | Web3D 通用,最佳起点 |
| 8–9 | 移动端、低带宽,可接受轻微失真 |
| 10 | 远景装饰,几何失真明显 |
级别越高不等于越好
压缩级别 10 可能导致顶点位置偏移、曲面变形,在模型外观上产生明显的"锯齿"或"破面"。建议先用 7,出现问题时再向下调整,不要一开始就设最高。
第 4 步:开始压缩
点击"开始优化",右侧实时显示进度。

第 5 步:确认结果
压缩完成后查看对比窗口,建议每次都点"预览效果"确认外观——参数是否合适,只有肉眼能判断。

批量压缩
打开"批量模式"→ 选择文件夹 → 开始。软件自动递归扫描子文件夹中所有 .glb / .gltf,支持暂停 / 继续 / 取消。
批量模式下纹理设置
批量模式与单文件模式共用同一套参数,包括引擎选择、压缩级别和纹理设置。开始批量处理前请先确认参数。
纹理设置
点击"纹理设置"按钮配置纹理处理。

Draco 引擎:JPEG(兼容最佳)/ WebP(体积小 30%)/ KTX2(GPU 原生,性能最优)
Meshopt 引擎:BasisU 内置,选 ETC1S(小体积)或 UASTC(高质量),也可选择不压缩纹理
颜色贴图用 ETC1S,法线/高光贴图用 UASTC
ETC1S 压缩率更高但有损失;UASTC 质量接近无损但体积更大,适合对细节要求高的纹理(如法线贴图、高光贴图)。
纹理优化仅对 GLB 格式有效
如果目标格式选择的是 glTF(贴图独立存放),纹理设置中的 KTX2 / WebP 转换选项不会生效。需要纹理压缩时请将目标格式设为 GLB。
压缩后如何在项目中加载
为什么压缩后需要配置加载器?
Draco 和 Meshopt 都是有损几何压缩算法,浏览器本身不能直接解码这种格式,需要由加载器在运行时完成解码。下面的代码是必须的。
Draco:
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'
import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js'
const dracoLoader = new DRACOLoader()
// 推荐:将解码器文件复制到项目 public 目录(避免依赖外部 CDN)
// cp node_modules/three/examples/jsm/libs/draco public/draco -r
dracoLoader.setDecoderPath('/draco/')
const loader = new GLTFLoader()
loader.setDRACOLoader(dracoLoader)
loader.load('model_optimized.glb', gltf => scene.add(gltf.scene))Meshopt:
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'
import { MeshoptDecoder } from 'three/addons/libs/meshopt_decoder.module.js'
const loader = new GLTFLoader()
loader.setMeshoptDecoder(MeshoptDecoder)
loader.load('model_optimized.glb', gltf => scene.add(gltf.scene))Meshopt + KTX2 纹理(同时配置两个):
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'
import { MeshoptDecoder } from 'three/addons/libs/meshopt_decoder.module.js'
import { KTX2Loader } from 'three/addons/loaders/KTX2Loader.js'
// renderer 是你的 THREE.WebGLRenderer 实例
const ktx2Loader = new KTX2Loader()
// 推荐:将转码器复制到项目 public 目录(避免依赖外部 CDN)
// cp node_modules/three/examples/jsm/libs/basis public/basis -r
ktx2Loader.setTranscoderPath('/basis/')
ktx2Loader.detectSupport(renderer) // 检测当前 GPU 支持的 KTX2 子格式
const loader = new GLTFLoader()
loader.setMeshoptDecoder(MeshoptDecoder)
loader.setKTX2Loader(ktx2Loader)
loader.load('model_optimized.glb', gltf => scene.add(gltf.scene))Babylon.js 和 model-viewer 用户
这两个框架内置 Draco 支持,无需任何配置,直接加载即可——但请使用 Draco 引擎压缩(它们不支持 Meshopt)。
高级量化参数(仅 Draco)
点击"高级参数"可单独调节精度,普通用户保持默认即可。

| 参数 | 说明 | 推荐范围 |
|---|---|---|
| 位置精度 qp | 顶点坐标精度,值越高精度越高体积越大 | 8–12 |
| 法线精度 qn | 影响光照效果细腻程度 | 6–10 |
| UV 精度 qt | 影响贴图映射准确度 | 6–10 |
| 通用属性精度 qa | 顶点色等通用属性的量化精度,默认关闭 | 按需 |
量化参数与压缩级别的关系
量化参数是独立控制的,不受压缩级别影响。如果降低了压缩级别但模型仍然失真,可能是量化精度过低导致的,需要单独提高 qp 值。
常见问题
Draco 和 Meshopt 到底选哪个?
大多数新项目选 Meshopt(压缩率更高、解码更快);项目使用 Babylon.js 或 model-viewer 时必须选 Draco(这两个框架不支持 Meshopt 但内置 Draco)。软件遇到 Meshopt 不可用时会自动降级为 Draco。
压缩会损失模型精度吗?
会。Draco/Meshopt 是有损几何压缩,默认级别 7 在视觉上基本无损。若出现变形或锯齿,降低压缩级别(如 9 → 7)或提高位置精度 qp;量尺寸用的工业模型建议级别 1–3 并预览确认。
压缩后文件反而变大了?
常见于面数极少(< 1000 面)或体积很小(< 100KB)的模型,压缩元数据开销超过收益。可降低压缩级别或直接不压缩。
压缩后的模型加载不出来?
Draco 和 Meshopt 都需要页面端配置对应解码器,完整加载代码见上文压缩后如何在项目中加载;Babylon.js 与 model-viewer 内置 Draco,无需配置。
整个项目的模型都要压,一个个点太慢?
用批量模式:打开批量开关 → 选择文件夹 → 开始,软件递归扫描所有 .glb/.gltf 并按当前参数处理,支持暂停/继续/取消。
参考与延伸阅读
Zipoly 使用的压缩算法与扩展均为 glTF 官方标准,规范原文在此:
- KHR_draco_mesh_compression 扩展规范(Khronos 官方)
- EXT_meshopt_compression 扩展说明(meshoptimizer 作者维护)
- google/draco — Draco 压缩开源实现
- zeux/meshoptimizer — Meshopt 压缩开源实现(gltfpack 同源)
- three.js GLTFLoader 文档 — DRACOLoader / MeshoptDecoder / KTX2Loader 配置入口