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)


相关文章
|
编解码 图形学 C++
如何在Blender中压缩/减小GLTF模型的大小
Blender是一款功能强大的开源软件,旨在创建3D图形,动画和视觉效果。它支持多种文件格式的导入和导出,包括GLB,GLTF,DAE,OBJ,ABC,USD,BVH,PLY,STL,FBX和X3D。这种适应性使其成为各种3D项目和工作流程的宝贵工具。(https://www.blender.org/download/)。
1879 0
|
数据可视化 定位技术
three.js实现烟雾缭绕效果
前言 大家好!我是Fly哥,最近接广告的接的有点多, 感谢大家还是一如既往的支持我!respect, 前几天我在朋友圈分享了一个烟雾缭绕的效果。很多小伙伴都表示非常感兴趣,有的同学说用到了噪声, 有的同学说用到了着色器,还有更过分说用到了ps, 胖虎竟然无语凝噎。其实都是就是简单的贴图。配合一点想象力。我们先看下效果: 然后我就发了一条朋友圈,问这个像什么?? 有的说 云层, 有的说云墨,有的说雾霭, 其实都不是, 我想做的是烟雾。好的话不不多说!, 本篇文章阅读大概5分钟。不耽误大家太多时间,主要是介绍思路, 说太多也没啥意义。如果你对three.js 还没有一点了解都没有,
three.js实现烟雾缭绕效果
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
2231 0
Threejs使用精灵Sprite作为标签,鼠标悬浮精灵上时鼠变小手
|
JavaScript 前端开发 数据可视化
Three.js第2篇,加载glb / gltf模型,Vue加载glb / gltf模型(如何在vue中使用three.js,vue使用threejs加载glb模型)
Three.js 是一个用于在 Web 上创建和显示 3D 图形的 JavaScript 库。它提供了丰富的功能和灵活的 API,使开发者可以轻松地在网页中创建各种 3D 场景、模型和动画效果。可以用来展示产品模型、建立交互式场景、游戏开发、数据可视化、教育和培训等等。这里记录一下如何在Vue项目中使用Three.js
4995 4
Three.js第2篇,加载glb / gltf模型,Vue加载glb / gltf模型(如何在vue中使用three.js,vue使用threejs加载glb模型)
ThreeJs添加拖动辅助线
这篇文章介绍了在Three.js中使用TransformControls组件来添加拖动辅助线,实现对3D模型在不同轴向上进行直观的拖动和平移操作。
873 0
|
编解码 缓存 算法
Three.js如何降低3D模型的大小以便更快加载
为加快600MB的3D模型在Three.js中的加载速度,可采用多种压缩方法:1) 减少顶点数,使用简化工具或LOD技术;2) 压缩纹理,降低分辨率或转为KTX2等格式;3) 采用高效文件格式如glTF 2.0及draco压缩;4) 合并材质减少数量;5) 利用Three.js内置优化如BufferGeometry;6) 按需分批加载模型;7) Web Workers后台处理;8) 多模型合并减少绘制;9) 使用Texture Atlas及专业优化工具。示例代码展示了使用GLTFLoader加载优化后的模型。
2524 12
|
前端开发
使用ffmpeg-core的时候报错,解决Uncaught (in promise) ReferenceError: SharedArrayBuffer is not defined
使用ffmpeg-core的时候报错,解决Uncaught (in promise) ReferenceError: SharedArrayBuffer is not defined
Threejs用切线实现模型沿着轨道行驶
这篇文章详细介绍了如何使用Three.js让一个模型沿着预定的曲线路径移动,并保持模型的方向始终沿着路径的切线方向,提供了实现这一效果的具体代码和步骤。
1069 1
Threejs用切线实现模型沿着轨道行驶
|
JavaScript
threeJs通过GUI实现动态对模型的控制
这篇文章讲述了如何使用three.js结合GUI工具实现实时控制3D模型的属性,以便于在开发过程中动态调整和预览模型效果。
479 2
threeJs通过GUI实现动态对模型的控制
|
开发框架
threejs做特效:实现物体的发光效果-EffectComposer详解!
【8月更文挑战第7天】实现物体的发光效果-EffectComposer详解!
3084 6
threejs做特效:实现物体的发光效果-EffectComposer详解!