添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
犯傻的沙滩裤  ·  new ...·  1 年前    · 
追风的鼠标  ·  ERROR:torch.distribute ...·  1 年前    · 

前言:fbx格式模型线上加载速度太慢了,老板让你优化加载速度!!!

1、首先使用blender将你的fbx格式的模型导出为gltf/glb格式的模型(或者使用npm下载fbx2gltf插件,将fbx转成glb也行,但是这样就比较麻烦了)

2、安装gltf-pipeline插件

npm install -g gltf-pipeline

3、安装完成之后,使用该插件进行模型压缩

打开命令行, cd 或者 powershell .glb/gltf 模型的文件夹下面,输入如下 命令进行压缩:

gltf-pipeline -i test8.glb -o testDraco.glb -d

test8.glb 为初始模型的名称
testDraco.glb 为结果模型名称

等待一段时间后,即可在该文件夹得到压缩后的模型。

4.THREEJS加载压缩好的glb格式的模型

我首先对我threejs版本进行了降级,降为了0.106.0

因为高版本的threejs,加载压缩过后的模型时会报错, decoder.GetAttributeDataArrayForAllPoints is not a function

将threejs版本降为0.106.0之后,又报了一个错:BufferGeometry 找不到

原因是低版本的threejs没有buffer,将报错的那一行删掉即可,然后关闭编辑器再重启即可解决。

除此之外,还有一个注意点,就是引入draco文件夹到项目目录下之后,要把draco_encode.js文件(该文件是压缩用的,我们用不到)删掉,否则引入之后终端会疯狂报错,如下:

以下是加载模型的代码:

    import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'
    import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'
    this.glbLoader = new GLTFLoader();
    this.dracoLoader = new DRACOLoader();
    DRACOLoader.setDecoderPath("../../../assets/libs/draco/");
    DRACOLoader.setDecoderConfig({ type: "js" }); //使用兼容性强的draco_decoder.js解码器
    this.glbLoader.setDRACOLoader(new DRACOLoader());
    let that = this;
    var loader = new FBXLoader();
    this.glbLoader.load("../../../assets/Models/modelDraco.glb", function (obj) {
      console.log('压缩过后的模型加载出来了', obj)
      var group = obj.scene.children[2]; //获得目标模型对象,具体要看你打印出来的3dObject在哪里      
      scene.add(group);
      group.scale.set(1, 1, 1);
复制代码
分类:
前端
标签: