多くの個々のオブジェクトを持つ大きなThree.jsシーンを扱います。 25kから50kのシーンで終わるのは簡単です。Object3D
インスタンス。はい、これは大変ですが、現在のところ、この番号を簡単に減らす方法はありません。すべてのオブジェクトを削除してそのようなシーンを消去するには、通常約2分かかります。これは、それぞれの要素を個別にで削除し、すべての要素を最初に収集してscene.remove(element1, element2, ...);
を呼び出す場合です。我々はまた、シーン全体のインスタンスを置き換えようとしましたが、役に立たなかった:それはまだ遅かったです。Three.jsシーンから多くのオブジェクトを削除するslow
異なるグラフィックスカード間にいくつかの違いがあり、これはグラフィックスカードから削除する必要があると思われるバッファジオメトリを多く使用していることが原因であると思われます。
オブジェクトの削除中にブラウザがブロックされているため、この期間はウェブサイトが使用できなくなります。オブジェクトの削除のパフォーマンスを向上させる方法や、非ブロック化する方法がありますか(個々の要素を削除する場合はsetTimeout()
はありません)。
これが簡略化で問題(最初のフレームの後に除去50Kキューブを使用して、私たちのオブジェクトのいくつかははるかに複雑です)を示しています。単一のメッシュをマージし、削除メッシュ試してみてくださいhttp://jsfiddle.net/ua2mg5ty/
む〜。おそらく 'InstancedBufferGeometry'を使用しているはずです。たとえば、[this](http://threejs.org/examples/webgl_buffergeometry_instancing.html)および[this](http://threejs.org/examples/webgl_buffergeometry_instancing_dynamic.html)を参照してください。 – WestLangley
ポインタありがとう!私が間違っていない場合、 'InstanceBufferGeometry'を使うことは、個々のオブジェクトインスタンスが似ていることを意味します。私たちは、互いに非常に異なる多くの大きなニューロンを表示します。それらは現在、通常の 'Geometry'インスタンスを使って' LineSegments'に基づいています。私は 'InstanceBufferGeometry'を使って1つの線分だけを保存し、正しい位置に個々の線分をインスタンス化するためにオフセット配列を使うことができると思います。これは理にかなっていますか? – tomka
おそらく。または 'BufferGeometry'を使用してください。通常のジオメトリを避けます。オブジェクトを削除するときは 'dispose()'を呼び出すように注意してください。 – WestLangley