太陽系の周りを回る小惑星のシミュレーションを実行しています。ここで初期実装を見ることができます。
周回オブジェクトのセット全体を 1 つの ParticleSystem に変換し、自宅のマシンで 60 fps で 10,000 周回を実行できました (ラップトップでは約 30 fps)。15-20k でマシンが 30fps に低下します。
位置の新しいリストを計算するために Web ワーカーを実行しています。次に、メイン スレッドで各オブジェクトの位置を次のように更新します。
for (var j=0; j < positions.length; j++) {
myobjects[j].MoveParticleToPosition(positions[j]);
}
particle_geometry.__dirtyVertices = true;
パーティクルを位置に移動:
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];
私の質問は次のとおりです。ここからパフォーマンスを向上させるにはどうすればよいですか?
たとえば、ジオメトリの頂点を更新するより迅速な方法はありますか? ParticleSystem に適用できる最適化はありますか? Web ワーカー内から頂点を更新することは可能ですか?