3D模型秒变小体积神器!开源库meshoptimizer压缩+OBJ转GLTF全攻略
在三维开发中,如果模型更小,那么加载速度会更快,极大提高用户体验。meshoptimizer不仅可以极大地压缩模型大小,还可以把obj转换为gltf格式,更适合在web中使用。
开源项目
使网格更小、渲染更快的网格优化库meshoptimizer:https://github.com/zeux/meshoptimizer
编译方法
1、使用Visual Studio 2022打开项目文件夹。
2、右键CMakeLists.txt,选择meshoptimizer的CMake设置。
3、在设置页面、CMake变量和缓存表格中,设置MESHOPT_BASISU_PATH为basis_universal项目根目录:E:/github/basis_universal
4、在设置页面、CMake变量和缓存表格中,勾选MESHOPT_BUILD_GLTFPACK选项。
5、点击工具类全部保存按钮,保存修改的配置。
6、右键CMakeLists.txt,选择生成。
7、在out\build\x64-Debug文件夹会生成可执行文件:gltfpack.exe
使用方法
Usage: gltfpack [options] -i input -o output
基础参数
-i 文件:待处理的输入文件,支持.obj/.gltf/.glb格式
-o 文件:输出文件路径,支持.gltf/.glb格式
-c:压缩gltf/glb文件(使用-cc可生成更高压缩率的文件)
纹理参数
-tc:使用BasisU超级压缩将所有纹理转换为KTX2格式
-tu:编码纹理时使用UASTC格式(高质量、大尺寸)
-tq N:设置纹理编码质量,取值范围1-10,默认值为8
-ts R:按比例R缩放纹理尺寸,取值范围0-1,默认值为1
-tl N:将纹理尺寸限制在N像素以内,默认值0表示无限制
-tp:将纹理尺寸调整为最接近的2的幂,以符合WebGL1的限制
-tfy:在BasisU超级压缩过程中沿Y轴翻转纹理
-tj N:压缩纹理时使用N个线程
-tr:保留原始纹理路径引用,而非复制或嵌入图像
纹理类别参数:
-tc C:对C类纹理使用ETC1S编码
-tu C:对C类纹理使用UASTC编码
-tq C N:对C类纹理设置编码质量为N
(其中C为逗号分隔的类别列表,不含空格,有效值为color、normal、attrib)
简化参数
-si R:按三角形/顶点数量比例R简化网格,取值范围0-1,默认值为1
-se E:限制简化误差为E,取值范围0-1,默认值0.01表示1%偏差
-sa:激进简化至目标比例,忽略质量损失
-sv:简化网格时考虑顶点属性
-slb:简化时锁定边界顶点,避免连接网格出现缝隙
顶点精度参数
-vp N:位置坐标使用N位量化,取值范围1-16,默认值为14
-vt N:纹理坐标使用N位量化,取值范围1-16,默认值为12
-vn N:法线使用N位量化(切线最高8位),取值范围1-16,默认值为8
-vc N:颜色使用N位量化,取值范围1-16,默认值为8
顶点坐标参数
-vpi:位置使用整数属性(默认)
-vpn:位置使用归一化属性
-vpf:位置使用浮点属性
顶点属性参数
-vtf:纹理坐标使用浮点属性
-vnf:法线使用浮点属性
-kv:保留源顶点属性,即使未被使用
动画属性参数
-at N:平移使用N位量化,取值范围1-24,默认值为16
-ar N:旋转使用N位量化,取值范围4-16,默认值为12
-as N:缩放使用N位量化,取值范围1-24,默认值为16
-af N:以N赫兹的频率重采样动画,默认值为30
-ac:保留恒定动画轨道,即使不修改节点变换
场景参数
-kn:保留命名节点及其关联网格,以便外部变换命名节点
-km:保留命名材质,禁用命名材质合并
-ke:保留扩展数据
-mm:尽可能合并相同网格的实例
-mi:序列化多网格实例时使用EXT_mesh_gpu_instancing扩展
杂项参数
-cf:生成压缩的gltf/glb文件,并为不支持的加载器提供回退方案
-noq:禁用量化,生成更大且无扩展的glTF文件
-v:详细输出(单独使用时显示版本信息)
-r 文件:输出JSON格式报告到指定文件
-h:显示帮助信息并退出
常用命令行
1、查看帮助。
.\gltfpack.exe
2、压缩glb文件。
@echo off
set name=文件名
echo 开始转换...
.\gltfpack.exe -i ./old/%name%.glb -o ./new/%name%.glb -cc -tc -kn -km -mm
echo 转换完成
pause