2017-05-22 34 views
0

私は実際にサイトの3つの異なるエリアに3つの異なるシーンを読み込んでレンダリングするプロジェクトを持っています。 現時点では、シーンを変更する必要があるたびに、キャンバス(すべてのThreejsリスナーとイテレータ)を削除し、新しいシーンを最初からレンダリングします。Threejsの切り替えシーン

レンダラを使用して独自のシーンを作成し、その中に異なる3つのシーンの異なるメッシュ、ライト、カメラをロードすると、パフォーマンスが向上しますか?

誰もがすでに同様のシナリオをテストしていますか?

+0

「サイトの3つの異なる領域に3つの異なるシーンがある」ということについて、いくつかの詳細を教えてください。 3つの異なるキャンバスを3つの異なるシーンに表示しようとしているようですが、間違っている可能性があります。 – TheJim01

+0

シーンは一緒に表示されず、1つのシーンのみが表示されます。 3つのシーンを持つ3つのサイトページがあるとします(ただし、ブラウザはリロードされません) –

+0

その場合、「page1」データのシーンを空にするだけで、「page2」データを再入力してください。 (メモリが許せば、複数のシーンを保持し、ページが変わるとレンダラーに個別に渡すのですか?) – TheJim01

答えて

0

thisのようなものをお探しですか?

時間に1つのシーンを表示する場合は、シーンを作成して選択したものだけをレンダリングすることをお勧めします。 THREE.WebGLRenderer.render()を参照してください。

+0

あなたは、レンダラーだけを作成し、メソッドは、シーン、メッシュ、ライト、eccを含む他の3つのクラスをロードします。 シーンがレンダラーに渡されるスイッチよりも?? シーンをレンダリングせずにメモリに保持しても、演奏に影響はありませんか? thnx –

+0

はい、これは考えやすいアプローチの1つです。シーンをメモリに保持しても、パフォーマンスには影響しません(レンダリングでは、FPSなど)。これはアプリのメモリ使用量にのみ影響します。 –

0

単一のレンダラーインスタンスと異なるシーン/カメラオブジェクトを使用して、render() -callと(必要に応じて)renderer.domElementをサイトに再配置するほうが、パフォーマンスが向上する可能性があります。そうすれば、複数のキャンバスやレンダリングコンテキストを用意する必要がなくなり、レンダラがwebgl関連のものをキャッシュできるようになります。この方法はまた、場面間のマテリアルのようなものを再利用する可能性もあります。

ただし、パフォーマンスの差は最小で、最小(少なくともほとんど)の初期化コストが最大である必要があります。 100ms(正確に何をしているかによって異なりますが、これは私の推測です)。

すべてを分離したほうが良いと感じたら(アプリの作り方によってはそれも良い理由があるかもしれません):それをそのままにして、マイナスの影響があるかどうかを測定してください(私の推測:それはおそらくないでしょう)。

関連する問題