Three——glb模型压缩

简介: glb模型压缩

Three——glb模型压缩

web开发基于Vue3对three.js加载3d模型过程中,往往会出现模型太大导致前端加载时间过长,降低用户使用的体验,我们这里选取gltf-pipeline的DRACOLoader方式来解压模型。

1、首先需要全局安装

// npm安装
npm install -g gltf-pipeline
// yarn安装
yarn global add gltf-pipeline

2、常用的压缩命令

gltf-pipeline -i 13131312(4).glb -o 13131312zip.glb -d

5f3c2862977f478dbc375804acd087de.png

我们可以看到,使用Draco压缩网络模型会比之前小了将近一半,这个是会根据纹理,面等一系列材质有关

在Vue3中使用

// 导入glb模型
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
// 压缩模型包
import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader";

8a956754b28642339374fb63bfb626c9.png

const loader = new GLTFLoader(); //实时显示进度
  const dracoLoader = new DRACOLoader(); // 压缩glb文件
  dracoLoader.setDecoderPath("../../public/gltf/"); //设置解压库文件路径
  dracoLoader.setDecoderConfig({ type: "js" }); //使用js方式解压
  dracoLoader.preload(); //初始化_initDecoder 解码器
  loader.setDRACOLoader(dracoLoader);
  loader.load(props.path, (gltf)=> {
      gltf.scene.name = "3DSouthernWind";
      gltf.scene.traverse(function (child) {
        if (child.isMesh) {
          // 渲染色泽
          child.material.emissive = child.material.color;
          //  获取纹理贴图,可以设置为一个新的纹理贴图
          child.material.emissiveMap = child.material.map;
        }
      });
      // gltf.scene.position.y = 8;
      // 模型添加到场景
      scene.add(gltf.scene);
      render();
    },
  );

8a956754b28642339374fb63bfb626c9.png

dracoLoader.setDecoderPath是用来设置解压库的文件路径,这个需要根据实际位置去获取路径中的js

a414a7dee6b340ef80c96f90d50c73f8.png

props.path这个位置替换成压缩后的图片路径即可

我这里是放在src的assets文件夹下

Vue3引入本地模型路径

const path = new URL(`../assets/SouthernWind.glb`, import.meta.url).href;

Vue2引入本地模型路径

const path = require(../assets/SouthernWind.glb)


相关文章
|
3月前
|
测试技术 语音技术 开发者
FunASR英文离线文件转写软件包问题之推理加速如何解决
FunASR英文离线文件转写软件包问题之推理加速如何解决
48 0
|
编解码 图形学 C++
如何在Blender中压缩/减小GLTF模型的大小
Blender是一款功能强大的开源软件,旨在创建3D图形,动画和视觉效果。它支持多种文件格式的导入和导出,包括GLB,GLTF,DAE,OBJ,ABC,USD,BVH,PLY,STL,FBX和X3D。这种适应性使其成为各种3D项目和工作流程的宝贵工具。(https://www.blender.org/download/)。
460 0
|
10天前
|
存储 编解码 算法
视频为什么可以被压缩?帧内压缩与帧间压缩有何区别?视频编码中的CBR、VBR、CRF...是什么?
视频压缩基于冗余,包括空间冗余、时间冗余、视觉冗余和编码冗余。帧内压缩利用空间相关性,帧间压缩利用时间相关性。视频编码中的码率控制方法有CBR(固定码率)、VBR(动态码率)、CRF(固定码率系数)、CQP(固定质量参数)、CVBR(约束可变码率)和ABR(平均码率),各有优缺点,适用于不同的场景。
|
6月前
|
存储 编解码 算法
图像的压缩算法--尺寸压缩、格式压缩和品质压缩
图像的压缩算法--尺寸压缩、格式压缩和品质压缩
117 0
|
前端开发 JavaScript C++
前端优化指南:我们该怎么去压缩图像?
前端优化指南:我们该怎么去压缩图像?
229 0
|
6月前
|
SQL 机器学习/深度学习 算法
离线蒸馏奢侈?在线蒸馏难?都不再是问题DKEL统统帮你解决,蒸馏同质化问题也解决!
离线蒸馏奢侈?在线蒸馏难?都不再是问题DKEL统统帮你解决,蒸馏同质化问题也解决!
194 0
|
6月前
|
自然语言处理 文字识别 数据可视化
从PDF和图像中提取文本,以供大型语言模型使用
从PDF和图像中提取文本,以供大型语言模型使用
|
存储 vr&ar 图形学
如何导出带有材质的GLB模型?
GLB格式作为一种优秀的3D文件格式,具备小巧高效、支持材质纹理、跨平台兼容等优点,在从设计到展示的整个工作流程中起到重要作用,促进了3D内容的创建、分享和交互。
340 0
|
存储 JSON JavaScript
glTF和GLB有什么区别?
glTF和GLB有什么区别?
323 0
|
Web App开发 算法 前端开发
Cesium开发: Draco模型压缩
Cesium开发: Draco模型压缩
555 1