2

太陽系の周りを回る小惑星のシミュレーションを実行しています。ここで初期実装を見ることができます。

周回オブジェクトのセット全体を 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 ワーカー内から頂点を更新することは可能ですか?

4

1 に答える 1

3

ParticleSystem への切り替えに加えて、他の 2 つの手法を使用してパフォーマンスを向上させました。Three.js に固​​有のものはありません。Web ワーカーを使用し、ループをチャンクに分割しsetTimeoutて、Three.js にレンダリングを更新する機会を与えました。

より技術的な詳細を記載したブログ投稿をここに書きました。

于 2012-11-07T19:27:54.907 に答える