Javascript 优化静态场景的Three.JS渲染时间

Javascript 优化静态场景的Three.JS渲染时间,javascript,three.js,renderer,Javascript,Three.js,Renderer,我有一个场景,包含15-20个对象,4个灯光。我的渲染器的属性是 function getRenderer(container, width, height) { var renderer; renderer = new THREE.WebGLRenderer({ alpha: false, antialias: true, preserveDrawingBuffer: false }); renderer.setPixelRatio(window.devicePixe

我有一个场景,包含15-20个对象,4个灯光。我的渲染器的属性是

function getRenderer(container, width, height) {
    var renderer;

    renderer = new THREE.WebGLRenderer({ alpha: false, antialias: true, preserveDrawingBuffer: false });
    renderer.setPixelRatio(window.devicePixelRatio);
    renderer.setSize(width, height);
    container.appendChild(renderer.domElement);
    renderer.shadowMapEnabled = true;
    renderer.shadowMapType = THREE.PCFSoftShadowMap;
    renderer.setClearColor(new THREE.Color(0xCCE0FF), 1);
    renderer.gammaInput = true;
    renderer.gammaOutput = true;
    renderer.clear();

    return renderer;
}
我的渲染循环每秒渲染一次场景

    function renderLoop() {
    this.renderer.render(this.scene, this.camera);
    setTimeout(function () {
        renderLoop();
    }, 1000);
}
我面临的问题是
this.renderer.render(this.scene,this.camera)
渲染场景大约需要100毫秒,但我希望它低于33毫秒,这样我的帧速率至少可以达到30 fps

有没有一种方法可以通过任何方式(如更改任何属性或其他)优化渲染器性能


我不想使用worker.js,因为我的场景是静态的,不包含任何复杂的计算。

如果有静态场景,没有理由有动画循环。加载场景和所有资源后,只需渲染一次

这就是为什么有加载器函数的回调。这就是为什么有一个
3.LoadingManager

有许多可能的用例。研究这三个.js示例,为您的特定用例找到解决方案

如果使用
OrbitControls
控制摄影机,则可以在摄影机移动时强制重新渲染,如下所示:

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.addEventListener( 'change', render ); // use if there is no animation loop

three.js r.75

如果您有一个静态场景,则没有理由有动画循环。加载场景和所有资源后,只需渲染一次

这就是为什么有加载器函数的回调。这就是为什么有一个
3.LoadingManager

有许多可能的用例。研究这三个.js示例,为您的特定用例找到解决方案

如果使用
OrbitControls
控制摄影机,则可以在摄影机移动时强制重新渲染,如下所示:

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.addEventListener( 'change', render ); // use if there is no animation loop

three.js r.75

首先使用,而不是setTimeout。第二,使用而不是另一个技巧是合并几何体。也许你可以尝试只渲染可见的几何体。检查:将setTimeOut更改为requestAnimationFrame,我已经在合并几何体,但它们对渲染时间影响不大。@AlexanderPopovrendering only visible objects将渲染时间从100ms减少到85ms。感谢您的建议。但我想首先使用它,而不是setTimeout。第二,使用而不是另一个技巧是合并几何体。也许你可以尝试只渲染可见的几何体。检查:将setTimeOut更改为requestAnimationFrame,我已经在合并几何体,但它们对渲染时间影响不大。@AlexanderPopovrendering only visible objects将渲染时间从100ms减少到85ms。感谢您的建议。但我想让它现在处于静止状态,但我以后必须向它添加运动,如果静态场景需要更多的时间来渲染,那么带有运动的场景将需要更多的时间,所以我尝试先修复静态场景的渲染时间。有意义吗?当前我的场景是静止的,但我以后必须向其添加运动,如果静态场景需要更多的时间来渲染,那么带有运动的场景将需要更多的时间,所以我尝试先修复静态场景的渲染时间。有意义吗?