2012-09-21 59 views
2

我正在模擬運行在我們太陽系周圍的小行星的小行星。你可以看到一個初始實現here在Three.js中改善粒子系統性能

我將整套軌道對象轉換爲單個ParticleSystem,我可以在我的家用機器上以60fps的速度運行10,000個軌道(筆記本電腦的速度約爲30fps)。 15-20k將我的機器降至30fps。

我運行一個網絡工作者來計算位置的新列表,然後我更新每個對象的位置在主線程像這樣:

for (var j=0; j < positions.length; j++) { 
     myobjects[j].MoveParticleToPosition(positions[j]); 
    } 
    particle_geometry.__dirtyVertices = true; 

MoveParticleToPosition:

var vertex_particle = this.particle_geometry.vertices[this.vertex_pos]; 
    vertex_particle.x = pos[0]; 
    vertex_particle.y = pos[1]; 
    vertex_particle.z = pos[2]; 

我問題是:我如何從這裏提高績效?

例如,是否有更快的方法來更新幾何頂點?有沒有可以應用於粒子系統的優化?是否有可能更新網絡工作者內的頂點?

+0

不再支持__dirty標誌。您可以更新到three.js的當前版本,並查看wiki:https://github.com/mrdoob/three.js/wiki/Updates。 – WestLangley

回答

3

除了切換到ParticleSystem之外,我還使用了其他兩種技術來提高性能。沒有一個是Three.js特有的。他們涉及使用網絡工作者和分割循環塊setTimeout爲Three.js提供更新渲染的機會。

我寫了一個博客帖子有更多的技術細節here