为什么在另一个渲染器中的THREE.js镀金面克隆会降低帧速率?

时间:2018-11-16 20:37:34

标签: three.js cloning gltf

我在主渲染器中添加了gltf场景:

loader.load( 'models/model.gltf', function ( gltf ) {
    ...
    scenes['game'].add( gltf.scene );
}

这工作正常,我能够进行克隆而没有任何问题:

loader.load( 'models/model.gltf', function ( gltf ) {
    ...
    scenes['game'].add( gltf.scene );
    var myClone = gltf.scene.clone();
    scenes['game'].add( myClone );
}

但是当我尝试将克隆添加到第二个渲染器时,事情开始变得棘手:

loader.load( 'models/model.gltf', function ( gltf ) {
    ...
    scenes['game'].add( gltf.scene );
    var myClone = gltf.scene.clone();
    scenes['inventory'].add( myClone );
}

当两个镀金场景都在两个渲染器的相机视图内时,帧速率会急剧下降。我检查了两个对象,并且在各个方面看起来都很独特。 有人知道发生了什么吗?

1 个答案:

答案 0 :(得分:0)

在性能方面,拥有两个渲染器是非常差的做法。它生成两个WebGL上下文,消耗大量内存,并且实质上抵消了GPU可能想要实现的任何效率。您可以具有多个场景和多个摄影机,但不要使用多个渲染器。您应该共享一个渲染器,如下所示:

var renderer = new THREE.WebGLRenderer();
var scene1 = new THREE.Scene();
var scene2 = new THREE.Scene();
var cam1 = new THREE.PerspectiveCamera();
var cam2 = new THREE.PerspectiveCamera();

update() {
    renderer.render(scene1, cam1);
    renderer.render(scene2, cam2);
}