javascript - ThreeJS 我的 GLTF 在主机服务器上加载速度太慢?

标签 javascript three.js loading gltf

我目前正在创建一个包含 3D Market Place 功能的网站。唉,我在实现该网站的主要功能时遇到了麻烦。

这是网站(alpha状态):https://www.openstring-studios.com/

所有代码都在 index.html 文件中,因此您可以看到它是如何制作的,不过不要介意困惑,我的问题只是将 3D 模型加载到场景中。

有一个名为 sketchfab.com 的网站,他们具有在 WebGL 窗口中预览 PBR 资源的惊人功能。而且加载速度相当快。

这是我的问题。我想为我的网站创建一个类似的功能,并使用 ThreeJS 库来完成它。然而,尽管只要我将其上传到主机服务器上,所有内容都会在我的 xampp 本地主机上快速加载,但模型需要永远加载(可能是因为 4k 纹理)。

这是我使用的代码:

function init() {   
    camera.position.z = 0.3;
    camera.position.y = 0.15;
    camera.position.x = 0.4;
    renderer.setPixelRatio( window.devicePixelRatio );
    renderer.setSize( window.innerWidth/sceenDivide, 600 );
    renderer.physicallyCorrectLights = true;
    renderer.gammaOutput = true;
    renderer.gammaFactor = 2.8;

    new THREE.RGBELoader().setDataType( THREE.UnsignedByteType )
    .setPath( '' ).load( 'white_cliff_top_1k.hdr', function ( texture ) {   
        var cubeGenerator = new THREE.EquirectangularToCubeGenerator( texture, { resolution: 512 } );
        var pmremGenerator = new THREE.PMREMGenerator( cubeGenerator.renderTarget.texture );
        var pmremCubeUVPacker = new THREE.PMREMCubeUVPacker( pmremGenerator.cubeLods );
        envMap = pmremCubeUVPacker.CubeUVRenderTarget.texture;
        cubeGenerator.update( renderer );
        pmremGenerator.update( renderer );
        pmremCubeUVPacker.update( renderer );
        loader = new THREE.GLTFLoader().setPath( '' );
        loadModel( 'Promo_ProductSoil.gltf');
        loadModel( 'Promo_ProductCover.gltf');
        loadModel( 'StraightPot_OrangePaintedIron.gltf');
        pmremGenerator.dispose();
        pmremCubeUVPacker.dispose();
        scene.background = cubeGenerator.renderTarget;
    } );
}

function loadModel( src ) {
    loader.load( src , function ( gltf ) {
        gltf.scene.traverse( function ( child ) {
            if ( child.isMesh ) {

                child.material.envMap = envMap;
                child.position.y -= 0.12
                mesh = child;                   
            }
            gltfSource = gltf;
        } );
        scene.add( gltf.scene );
    },
    function ( xhr ) {
        onProgress( xhr )
    } );
}

有没有一种解决方案可以让我达到与 sketchfab.com 网站上类似的加载速度,因为目前我的简单锅模型需要一分钟多的时间才能显示。

飞机加载如此之快的唯一原因是它们的 Material 只有低分辨率的 BaseColor 而没有其他内容。

关于如何解决这个问题的任何想法。我的网站是通过domain.com托管的,我应该问他们还是这更多是ThreeJS问题,如果是的话还有其他选择吗?

最佳答案

Is there a solution how I can achieve a similar loading speed as seen on the website sketchfab.com because at the moment my simple pot model takes over a minute before it is displayed.

正如评论中提到的,您的 glTF 资源太大了。例如。 StraightPot_OrangePaintedIron.gltf 文件大小为 41 MB。有几种方法可以加快传输时间。

  • 您可以使用 DRACO 压缩资源的几何数据,并结合使用 THREE.DRACOLoaderTHREE.GLTFLoader 在客户端解压缩资源。以下live example演示了两个加载器的用法。使用类似 glTF Pipeline 的工具压缩现有的 glTF 资源。
  • 降低纹理的分辨率。还可以考虑使用纹理压缩来进一步减小文件大小。然而,通过 WebGL 使用平台无关的纹理压缩仍然有点不方便。 Basis将来可能会让事情变得更容易。
  • 通过简化几何形状,总体上降低 Assets 的复杂性。有时也可以减少 Material 数量并合并各自的纹理。

三.js R108

关于javascript - ThreeJS 我的 GLTF 在主机服务器上加载速度太慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57767065/

相关文章:

javascript - Three.js HTML 背景为clearColor

javascript - 旋转对象以匹配轨迹

java - 缩放和加载非常大的 TIFF 文件

javascript - 带有自定义服务器端的 bootstrap formvalidation.io 远程验证器返回错误消息

javascript - 事件监听器为什么我不能使用这个词

javascript - 当我在 WebStorm 中运行 JavaScript 文件时,显示无法在模块外部导入语句

javascript - AADSTS50058 : A silent sign-in request was sent but no user is signed in

javascript - 如何使用 Three.JS 通过单键按下制作动画

performance - Firebug net 选项卡报告的页面接收时间长(页面加载缓慢)

php - 如何在包含的 PHP 页面处理/加载时显示 Prelaoder/加载动画/gif/百分比?