17

この 1 か月間、私は WebGL をいじっていましたが、大きな頂点バッファーを作成して描画すると FPS が低下することがわかりました。C ++でOpenGLを使用した場合と同じかどうかは誰にもわかりますか?

それは使用言語(WebGLの場合はJavaScript)やGPUのボトルネックでしょうか?

このようなWebGLの例は、 1 つのバッファーを使用して 150,000 個のキューブを優れたパフォーマンスで描画できることを示していますが、これを超えると FPS が低下します。それは OpenGL でも同じでしょうか、それともより大きなバッファを処理できるでしょうか?

基本的に、WebGL の使用を継続し、コードによる最適化を試みるか、OpenGL のパフォーマンスが向上し、それが言語速度のボトルネックであると言う場合は、C++ に切り替えて OpenGL を使用するかを決定する必要があります。

4

4 に答える 4

15

drawArrays 呼び出しが 1 つしかない場合は、呼び出し自体に関して OpenGL と WebGL の間に大きな違いはないはずです。ただし、Javascript でのデータのセットアップは非常に遅くなる可能性があるため、問題によって異なります。データの大部分が静的 (風景、部屋) である場合、WebGL がうまく機能する可能性があります。そうしないと、JS でのデータのセットアップが目的に対して遅すぎる可能性があります。それは本当にあなたの問題に依存します。

ps やろうとしていることの詳細を含めると、おそらくより詳細で具体的な回答が得られるでしょう。

于 2013-07-07T22:05:31.507 に答える
3

余談ですが、私は 2000 年代の初めに、glVertex()完全にスムーズに動作する古いスタイルの API を使用してタイル ベースのゲームを作成しました。最近、WebGL への移植を開始しましglDrawArrays()たが、少なくとも 10 倍高速な最新の PC では、ひどいパフォーマンスが得られます。

glBegin(GL_QUADS); glVertex()*4; glEnd();理由は、 を使って呼び出し go を偽装していたようglDrawArrays()です。を使用glDrawArrays()して 1 つのポリゴンを描画すると、C++ で同じことを行うよりも WebGL ではるかに遅くなります。glVertex()

これがなぜなのかわかりません。おそらく、javascript が非常に遅いためです。おそらく、javascript のコンテキスト切り替えの問題が原因である可能性があります。glDrawArray()とにかく、60 FPS を取得しながら、約 500 の 1 ポリゴン コールしか実行できません。

GPU でできる限り多くのことを行い、glDrawArray()フレームごとの呼び出しをできるだけ少なくすることで、誰もがこれを回避しているようです。これができるかどうかは、何を描こうとしているかによって異なります。リンクした立方体の例では、立方体の移動を含め、GPU ですべてを実行できるため、高速です。基本的に彼らはだましました - 通常、WebGL アプリはそのようにはなりません。

Google は、この手法を説明する講演を行いました (GPU でオブジェクトの動きを非現実的に計算します): https://www.youtube.com/watch?v=rfQ8rKGTVlg

于 2015-01-06T08:33:37.917 に答える
1

OpenGL は、新しいバージョンの API が使用されているため、より柔軟で最適化されています。OpenGL の方が高速で機能が優れているというのは事実ですが、それはニーズにもよります。

テクスチャ付きの立方体メッシュが 1 つ必要な場合は、webGL で十分です。ただし、多くの頂点、後処理効果、およびさまざまなレンダリング手法 (およびディスプレイスメント、視差マッピング、頂点ごと、またはテッセレーションの種類) を使用して大規模なプロジェクトを構築する場合は、実際には OpenGL の方が適切で賢明な選択である可能性があります。

バッファーを単一の呼び出しに最適化し、それらの更新を最適化することはできますが、もちろん制限があり、とにかく OpenGL の方がパフォーマンスが優れている可能性があります。

答えを言うと、言語のボトルネックではなく、API バージョンを使用したボトルネックです。WebGL は OpenGL ES に基づいています。OpenGL ES にはいくつかの利点がありますが、実行速度が少し遅く、純粋な OpenGL よりもコード処理の抽象化レベルが高いため、パフォーマンスが低下します。より多くのコードを評価する必要があります。

プロジェクトが Web ベースのソリューションを必要とせず、どのデバイスがサポートされているかを気にしない場合、OpenGL がより適切でスマートな選択になります。

お役に立てれば。

于 2013-07-07T22:00:53.843 に答える