J'ai une scène qui contient 15-20 objets, 4 lumières. Et les propriétés de mon moteur de rendu sontOptimiser le temps de rendu Three.JS pour une scène statique
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;
}
Ma boucle de rendu restitue la scène toutes les secondes.
function renderLoop() {
this.renderer.render(this.scene, this.camera);
setTimeout(function() {
renderLoop();
}, 1000);
}
Le problème que je suis confronté est this.renderer.render(this.scene, this.camera)
est de prendre environ 100 ms pour rendre la scène mais je veux que ce soit ci-dessous 33ms pour que je puisse avoir la fréquence d'images d'au moins 30 images par seconde.
Existe-t-il un moyen d'optimiser les performances du moteur de rendu par n'importe quel moyen (comme changer des propriétés ou quelque chose)?
Je ne veux pas utiliser worker.js car ma scène est statique et ne contient aucun calcul complexe.
d'abord toute utilisation [ requestAnimationFrame] (https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) au lieu de setTimeout. Deuxièmement, utilisez [BufferGeometry] (http://threejs.org/docs/#Reference/Core/BufferGeometry) au lieu de [Geometry] (http://threejs.org/docs/#Reference/Core/Geometry) –
Un autre conseil est de fusionner vos géométries. –
Peut-être que vous pouvez essayer de rendre uniquement ce qui est visible. Check this out: [ThreeJS désactiver le rendu des visages derrière la caméra] (http://stackoverflow.com/questions/26056352/threejs-disable-rendering-of-faces-behind-the-camera) – leota