Skip to content

模型压缩优化

打开软件默认就在这个页面。支持单文件和批量两种模式。

压缩流程

① 导入模型 — 点击"选择文件"或拖入 .glb / .gltf 文件

导入后软件自动显示模型统计和体检诊断(重复顶点、超规格纹理、缺失法线等),并给出压缩参数建议。

只支持 glTF / GLB 格式输入

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

② 选择引擎

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

不确定选哪个?选 Meshopt

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

Meshopt 格式的加载限制

使用 Meshopt 引擎压缩后的模型不能被 Babylon.js 和 model-viewer 直接加载,只支持 Three.js(r136+)。如果你的项目使用这两个框架,请选择 Draco 引擎。

③ 设置压缩级别

默认 7,适合绝大多数场景。

级别场景
1–3工程 / 医疗模型,精度优先
4–6产品展示、建筑可视化
7(默认)Web3D 通用,最佳起点
8–9移动端、低带宽,可接受轻微失真
10远景装饰,几何失真明显

级别越高不等于越好

压缩级别 10 可能导致顶点位置偏移、曲面变形,在模型外观上产生明显的"锯齿"或"破面"。建议先用 7,出现问题时再向下调整,不要一开始就设最高。

④ 开始压缩 — 点击"开始优化",右侧实时显示进度

⑤ 确认结果 — 压缩完成后查看对比窗口,建议每次都点"预览效果"确认外观,因为压缩参数不合适在视觉上才能直接看出来

压缩结果对比

批量压缩

打开"批量模式"→ 选择文件夹 → 开始。软件自动递归扫描子文件夹中所有 .glb / .gltf,支持暂停 / 继续 / 取消。

批量模式下纹理设置

批量模式与单文件模式共用同一套参数,包括引擎选择、压缩级别和纹理设置。开始批量处理前请先确认参数。

纹理设置

点击"纹理设置"按钮配置纹理处理。

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 支持,不需要额外配置,直接加载即可。但它们不支持 Meshopt 格式,请使用 Draco 引擎压缩。

高级量化参数(仅 Draco)

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

参数说明推荐范围
位置精度 qp顶点坐标精度,值越高精度越高体积越大8–12
法线精度 qn影响光照效果细腻程度6–10
UV 精度 qt影响贴图映射准确度6–10

量化参数与压缩级别的关系

量化参数是独立控制的,不受压缩级别影响。如果降低了压缩级别但模型仍然失真,可能是量化精度过低导致的,需要单独提高 qp 值。

专为 Web3D 开发者设计