Skip to content

最后更新:

模型压缩优化 ​

模型压缩优化是 Zipoly 的核心功能:对 glTF/GLB 模型执行 Draco(KHR_draco_mesh_compression)或 Meshopt(EXT_meshopt_compression / gltfpack)几何压缩,体积缩减 70–90%,并可选 KTX2/WebP 纹理压缩,支持单文件与批量两种模式。打开软件默认就在这个页面。

压缩流程 ​

  1. 导入模型 — 点击"选择文件"或拖入 .glb / .gltf 文件。导入后软件自动显示模型统计和体检诊断(重复顶点、超规格纹理等),并给出压缩参数建议
  2. 选择引擎 — 按下表选择 Draco 或 Meshopt,不确定时直接用默认的 Meshopt
  3. 设置压缩级别 — 默认 7,适合绝大多数场景
  4. 开始压缩 — 点击"开始优化",右侧实时显示进度
  5. 确认结果 — 查看对比窗口,建议每次都点"预览效果"确认外观——参数是否合适,只有肉眼能判断

只支持 glTF / GLB 格式输入

压缩功能仅接受 .glb 和 .gltf 文件。FBX、OBJ 等其他格式需先通过格式转换转为 GLB,再进行压缩。

第 2 步:选择引擎 ​

DracoMeshopt(推荐)
压缩率高更高
加载速度快更快(WebGPU 友好)
纹理压缩JPEG / WebP / KTX2BasisU(ETC1S / UASTC)
框架兼容Three.js / Babylon.js / model-viewer 原生支持仅 Three.js(需配置解码器)
适合场景旧项目、需要广泛兼容新项目、追求极致性能

不确定选哪个?选 Meshopt

Meshopt 不可用时软件会自动降级到 Draco 并提示,不会中断处理。

Meshopt 压缩设置

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 纹理设置

Draco 引擎:JPEG(兼容最佳)/ WebP(体积小 30%)/ KTX2(GPU 原生,性能最优)

Meshopt 引擎:BasisU 内置,选 ETC1S(小体积)或 UASTC(高质量),也可选择不压缩纹理

颜色贴图用 ETC1S,法线/高光贴图用 UASTC

ETC1S 压缩率更高但有损失;UASTC 质量接近无损但体积更大,适合对细节要求高的纹理(如法线贴图、高光贴图)。

纹理优化仅对 GLB 格式有效

如果目标格式选择的是 glTF(贴图独立存放),纹理设置中的 KTX2 / WebP 转换选项不会生效。需要纹理压缩时请将目标格式设为 GLB。

压缩后如何在项目中加载 ​

为什么压缩后需要配置加载器?

Draco 和 Meshopt 都是有损几何压缩算法,浏览器本身不能直接解码这种格式,需要由加载器在运行时完成解码。下面的代码是必须的。

Draco:

js
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:

js
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 纹理(同时配置两个):

js
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) ​

点击"高级参数"可单独调节精度,普通用户保持默认即可。

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 官方标准,规范原文在此:

专为 Web3D 开发者设计