使用 gltfpack 为 GLB 模型减面
三角面保留比例表示希望留下原模型多少比例的三角面。它是目标值,不是结果保证。本文只讨论几何简化,不调整纹理尺寸或编码。
先从适度减面开始
上传原模型,保留原纹理,将三角面保留比例设为 50%,简化误差先用默认的 1%。检查曲面轮廓、薄片和孔洞后,再决定是否继续降低比例。模型包含多个网格时,要逐个检查,不能只看总数量。
gltfpack -i input.glb -o output.glb -si 0.5 -kn -km -ke
为什么没有达到目标
误差上限限制简化允许产生的误差,上限越严格,越可能提前停止。开放边界、属性接缝以及较小网格部件的结构,也可能限制可执行的简化。页面会显示实际结果和可能原因,引擎不会给出唯一、确切的停止原因。
多块模型需要保持开放边缘对齐时,可以锁定边界顶点。这样有助于避免缝隙,但可能留下更多三角面。导出后仍要检查拼接效果,锁定边界并不保证所有可见接缝都完全不变。
波纹示例的实测结果
| 简化设置 | 输出三角面 |
|---|---|
| 原始网格 | 8,192 |
| 保留 50%,默认误差上限 | 4,095 |
| 保留 10%,零误差,锁定边界 | 8,192 |
| 保留 10%,激进简化 | 812 |
各次测试均使用同一份原始 CC0 示例和原生 gltfpack 1.3,每个网格图元只统计一次。结果取决于模型本身,数量接近目标也不能说明剩余形状一定合适。
从同一角度比较轮廓
以下图片用 Three.js 0.180.0 渲染表中的文件,相机、灯光和材质设置相同。点击可查看原尺寸图片,先比较外侧起伏和内孔边缘,不要只看三角面数量。
激进简化、保留 10% 的结果中,内孔出现了更直的边和更尖的转角,外侧起伏也不如原来圆润。缩略图中容易忽略这些变化,所以达到三角面目标并不等于外观已经合适。
这个示例没有蒙皮和动画。单个视角也看不出运动问题、遮挡面或所有光照变化。确定减面结果前,仍要旋转检查自己的模型,并按实际展示尺寸比较。
对比后再决定是否启用激进简化
激进简化优先满足目标数量,并忽略误差上限;开启后,界面会禁用误差输入框。请保留原文件,检查输出的轮廓和表面明暗。它不能保证在更大幅度减面的同时保持画质。
gltfpack -i input.glb -o output.glb -si 0.1 -sa -kn -km -ke
引擎参考: gltfpack
打开优化工具 ↗

