1.Draco简述
Draco 是一个由 Google 开发的开源项目,主要用于压缩和解压缩 3D 几何网格和点云数据。该项目旨在提高 3D 图形的存储和传输效率。Draco 支持多种编程语言,包括 C++、JavaScript 和 Java,但主要的开发语言是 C++。
Draco 官方github地址:https://github.com/google/draco/tree/gltf_2.0_draco_extension
2.通过 gltf-pipeline 使用 Draco 压缩(gltf-pipeline)
glgltf-pipeline官方github地址:https://github.com/CesiumGS/gltf-pipeline
本文使用的是 gltf-pipeline@4.1.0版本
安装:
npm install -g gltf-pipeline
具体参数:
旗帜 描述 必需
–help, -h 显示帮助信息 无
–input, -i glTF 或 glb 文件的路径 必须提供
–output, -o 输出 glTF 或 glb 文件的路径。资源会保存到相同的目录 无
–binary, -b 将输入的 glTF 转换为 glb 格式 false(默认)
–json, -j 将输入的 glb 转换为 glTF 格式 false(默认)
–separate, -s 将缓冲区、着色器和纹理分开存储,而不是嵌入到 glTF 中 false(默认)
–separateTextures, -t 仅输出分离的纹理 false(默认)
–stats 打印输出 glTF 文件的统计信息 false(默认)
–keepUnusedElements 保留未使用的材质、节点和网格 false(默认)
–keepLegacyExtensions 当为 false 时,带有 KHR_techniques_webgl、KHR_blend 或 KHR_materials_common 的材质会被转换为 PBR(物理渲染)材质 false(默认)
–draco.compressMeshes, -d 使用 Draco 压缩网格。会添加 KHR_draco_mesh_compression 扩展 false(默认)
–draco.compressionLevel Draco 压缩级别 [0-10],最大为 10,最小为 0。0 会应用顺序编码并保留面顺序 7(默认)
–draco.quantizePositionBits 使用 Draco 压缩时,位置属性的量化位数 11(默认)
–draco.quantizeNormalBits 使用 Draco 压缩时,法线属性的量化位数 8(默认)
–draco.quantizeTexcoordBits 使用 Draco 压缩时,纹理坐标属性的量化位数 10(默认)
–draco.quantizeColorBits 使用 Draco 压缩时,颜色属性的量化位数 8(默认)
–draco.quantizeGenericBits 使用 Draco 压缩时,皮肤属性(关节索引和权重)以及自定义属性的量化位数 8(默认)
–draco.unifiedQuantization 使用相同的量化网格对所有原语的位置进行量化。如果未设置,则对每个原语分别应用量化 false(默认)
–draco.uncompressedFallback 添加未压缩的回退版本的压缩网格 false(默认)
–baseColorTextureNames 在从 KHR_techniques_webgl 扩展更新到 PBR 材质时,应该考虑为基色纹理的 uniform 名称 无(未指定默认值)
–baseColorFactorNames 在从 KHR_techniques_webgl 扩展更新到 PBR 材质时,应该考虑为基色因子的 uniform 名称 无(未指定默认值)
无脑压缩参数使用(模型文件启用cmd 输入命令):
一般模型: gltf-pipeline -i A.glb -o B.glb -d –draco.compressionLevel=10
精致模型: gltf-pipeline -i A.glb -o B.glb –draco.compressionLevel=10 –draco.quantizePositionBits 16 –draco.quantizeNormalBits 0
经测试核心参数理解(大家有测试更好参数,可评论区分享):
案例文件:120M 举例方便理解
–draco.compressionLevel (控制压缩等级)
=0时,模型不压缩,压缩文件和未压缩文件大小一致 (120M)
=1时,模型压缩率最低,文件大一些(6M)
=10时,模型压缩率最大,文件小一些(4M)
–draco.quantizePositionBits (控制点的位置)
=0时,保持点位原位置,很好的保留了外观细节,但是有bug,近距离视角模型会丢失 (12M)
=11时(默认值),模型点位减面偏移,文件小一些(5M)
=16时(测试值,案例最大值好像14,但是16好用),解决了上述bug(13M)
–draco.quantizeNormalBits (控制法线的,影响面的反射是否光滑平整)
=0时,法线不被压缩,与原模型一致 (14M)
=8时(默认值),法线混乱,面反射不光滑,文件小一些(7M)
3.threejs应用
引入:
import { DRACOLoader } from ‘./jsm/loaders/DRACOLoader.js’;
import { GLTFLoader } from ‘./jsm/loaders/GLTFLoader.js’;
调用:
function loadGltf() {
const that = this;
const dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath(“js/libs/draco/”);
dracoLoader.setDecoderConfig({ type: “js” });
let loader = new GLTFLoader();
loader.setDRACOLoader(dracoLoader);
loader.load(“./item/scxf_struture/model/ceshiyasuo.glb”, function (gltf) {
gltf.scene.traverse((object) => {
if (object.isMesh) {
}
});
scene.add(gltf.scene);
});
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » gltf,glb等3D模型压缩,threejs应用(DRACO压缩算法)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载要提取码
- 分享过期和重复下载怎么办
- 模型和平台不兼容怎么办