6

私は 2D HTML5 ゲーム エンジン ( www.scirra.com ) を使用しており、WebGL が Chrome 18 の「Swiftshader」ソフトウェア レンダラーでレンダリングされるかどうかを実際に検出したいと考えています。もしそうなら、他のブラウザで起こるように、通常のキャンバス 2D コンテキストにフォールバックすることを望みます。そこにいる人々の多くは、ソフトウェア レンダリング時にゲームをスライドショーに変える、弱い CPU を備えたローエンド マシンを使用しており、多くの場合、2D キャンバスはハードウェア アクセラレーションされていたと思います。ただし、WebGL コンテキストの作成は Chrome で失敗することはなく、SwiftShader を検出する明白な方法はありません。

私が試したこと:

// Always returns "WebKit WebGL" regardless of SwiftShader
gl.getParameter(gl.RENDERER)

// Always returns "WebKit" regardless of SwiftShader
gl.getParameter(gl.VENDOR)

最大テクスチャ サイズやその他の MAX_* プロパティなどを考慮に入れることもできますが、SwiftShader を使用してもマシン間でそれらが変わらないことをどのように確認できますか? また、SwiftShader は一般的なハードウェアを模倣することを目的としているので、そのアプローチを使用しても多くの誤検知が発生する可能性があります。

次の理由により、起動パフォーマンス テストを作成したくありません。

  • 特定のゲームではなく、エンジンを作成するだけなので、どのようなパフォーマンスプロファイルのゲームでも一般的に機能する公正なテストをどのように作成すればよいかわかりません。
  • 優れたテストでは、おそらく実行が完了するまでに 1 ~ 2 秒かかるでしょう。これにより、ユーザー エクスペリエンスが中断されたり、いくつかの四角形が移動するのを見たりする必要が生じる可能性があります。
  • 結果をキャッシュした場合、ユーザーがドライバーを更新して問題を修正した場合など、新たな複雑さが生じる可能性があります。

ハードウェア アクセラレーションを使用すると、WebGL のパフォーマンスがキャンバス 2D の 2 倍以上になる可能性があるため、Chrome で WebGL を完全に無効にすることはしたくありません。そんなことしたらみんな負ける。

ゲーム内スイッチやユーザー設定を追加する必要はありません。何人のユーザーがそれを気にかけているのでしょうか? ゲームが遅い場合、彼らはただやめてしまい、おそらく解決策を探しません。「このゲームは最悪だ、私はどこかへ行くだろう。」「ちなみに、このゲームが遅い場合は、この設定を「canvas 2D」に変更してみてください...

私の現在の最善の推測は、を使用することgl.getSupportedExtensions()です。SwiftShader が次の拡張機能を報告することがわかりました。

OES_texture_float,OES_standard_derivatives,WEBKIT_WEBGL_lose_context

...しかし、実際のハードウェア アクセラレーション コンテキスト レポート:

OES_texture_float,OES_standard_derivatives,WEBKIT_WEBGL_lose_context,WEBKIT_WEBGL_compressed_textures

の追加に注意してくださいWEBKIT_WEBGL_compressed_textures。いくつかの簡単な調査によると、これは広くサポートされている場合とそうでない場合があります。こちらのサポート表を参照してください -GL_EXT_texture_compression_s3tcとの両方GL_ARB_texture_compressionがデスクトップ カードで広くサポートされているようです。また、表にはかなり古いモデルのみがリストされているように見えるため、最新のデスクトップ グラフィックス カードはすべてサポートされていると推測できますWEBKIT_WEBGL_compressed_textures。したがって、SwiftShader の検出基準は次のようになります。

  • Windows OS
  • Google Chrome ブラウザ
  • WebGL コンテキストはサポートしていませWEBKIT_WEBGL_compressed_textures
  • 結果: Canvas 2D にフォールバック

もちろん、SwiftShader が将来的に圧縮テクスチャのサポートを追加すると、これは再び壊れます。しかし、ソフトウェア レンダラーを使用した圧縮テクスチャの利点がわかりません。また、実際に動作するビデオ カードがサポートされていない場合でも、多くの誤検知が発生しますWEBKIT_WEBGL_compressed_textures

SwiftShader を検出するより良い方法はありませんか?

4

4 に答える 4

2

「スタートアップパフォーマンステスト」を作成したくないとおっしゃっています。つまり、2DとWebGLの両方を使用して数フレームをレンダリングし、どちらか高速なものを測定してから、それを使用しますが、それでも最良のオプションだと思います。

利点:

  • 見かけの属性に関係なく、現在のハードウェアで実際に高速なレンダラーを選択します。

短所/警告:

  • 両方のレンダラーのリソースをロードする必要があります。これにより、ロード時間が長くなる可能性があります(ただし、選択を覚えておくと、一度だけ発生するようになります)。
  • システムが最初に遅い場合(たとえば、ページングが原因)、測定が間違っている可能性があります。
  • アクティブな冷却のないハードウェア(電話など)は、後で過熱してパフォーマンスを低下させる可能性があります。2つの方法の熱出力を直接測定することはできません。(新しいレベルのロード中に静的画面などのレンダリング方法を再測定して再選択する良い機会がある場合は、それを行うことができます。)

特定の懸念に対処する:

  • ゲームエンジンを作成しているため、テストで使用するサンプルコンテンツを指定する方法をゲーム開発者に提供する必要があります。
  • 特に(私が思うに)他の方法でレンダラーを区別する信頼できる方法がない場合は、1〜2秒は追加のロード時間の多くではありません。テスト中に、使用しているキャンバス要素をユーザーに表示する必要はありません。まったく関係のない読み込みアニメーションを表示できます。
于 2012-05-05T11:15:32.607 に答える
1

SwiftShader は、一部の統合グラフィックスよりも実際に高速です。そのため、GPU または CPU レンダリングを検出しても、実際のパフォーマンスが保証されるわけではありません。また、SwiftShader は最速のソフトウェア レンダラーであり、単純なゲームで非常に適切な仕事をするはずです。アプリケーションが適切に最適化されていると確信していますか?

于 2012-05-05T02:09:11.183 に答える
1

本当に知りたいのは、ゲームを WebGL ではなく Canvas2D で表示した方がよいかどうかです。それは、Swiftshader の上で実行されているかどうかと同じ問題ではありません。

正直なところ、なぜユーザーに尋ねることが受け入れられないのかわかりません。

史上最も売れたゲームの多くには、次のようなオプションがあります。

  • コールオブデューティモダン・ウォーフェア3
  • バトルフィールド3
  • アングリーバード (http://chrome.angrybirds.com/)
于 2012-05-04T23:40:04.493 に答える