WebGL でオーディオの使用
Memory in WebGL

WebGL のパフォーマンスについて

WebGL のパフォーマンスと聞いてどの分野のパフォーマンスを想像しましたか?

これは多くの要素が絡み合い、答えるのが少し難しいです。

一般的に、GPU 側では、ハードウェア・アクセラレーションを利用したレンダリングに GPU を使用しているので WebGL のグラフィックス API はネイティブアプリに近いパフォーマンスを得ることができます。

CPU 側では、すべてのコードは JavaScript の asm.js に変換されます。よって使用しているブラウザの Javascript エンジンに多くのものが依存しているため、パフォーマンスは使用するブラウザによって違いが出ます。現在(2015年11月)では、多数のプログラミングベンチマークによるとネイティブコードと比べてスピードの遅さを2倍未満に抑え、JavaScript コードの AOT コンパイルに asm.js を使用しているのは、現在だと Microsoft Edge と Mozilla Firefox のみです。Unity のコードも 2つのブラウザで一番のパフォーマンスを発揮します。また Unity で作成したベンチマークでも Microsoft Edge と Mozilla Firefox 上で計測した所、同様の結果となりました。

その他に考慮することはあります。ですが現在、JavaScript はマルチスレッドも SIMD もサポートしていません。ですのでこれらの機能が役立っているコードはすべて他のコードに比べ、大幅に減速するように見えます。WebGL のスクリプトでスレッドや SIMD のコードを書くことはできませんが、いくつかのエンジン部分はマルチスレッドや SIMD 用に最適化されているので、WebGL 上でパフォーマンスが悪いように見えます。例としては、スキニングコードで、これにはマルチスレッドと SIMD の最適化両方が使われています。Unity の新しいタイムライン プロファイラー を使うと、WebGL 以外のプラットフォームに関しては、Unity が 異なるスレッドにどのように作業の配分をしているかを見ることができます。将来、この機能が WebGL でも同様に使えるようになることを期待しています。

パフォーマンスに影響する WebGL の設定

For best performance, set the optimization level to Fastest in the Build Player dialog, and set Exception support to None in the Player settings for WebGL.

WebGL のプロファイリング

Unity プロファイラーは WebGL でサポートされています。設定の仕方に関しては こちら を参照してください。

バックグラウンドタブでの WebGL コンテンツの挙動

If Run in background is enabled in the Player settings for the WebGL platform, or if you enable Application.runInBackground, your content continues to run when the canvas or the browser window loses focus.

However, it should be noted that browsers may throttle content running in background tabs. If the tab with your content is not visible, your content will only be updated once a second in most browsers. Note that this will cause Time.time to progress slower than usual with the default settings, as the default value of Time.maximumDeltaTime is lower than one second.

WebGL パフォーマンスの減速

ある状況では、CPU の使用を減らすために低いフレームレートで WebGL コンテンツを実行したい場合があります。他のプラットフォームと同様に、 Application.targetFrameRate API を使ってそれを行うことができます。

パフォーマンスを減速したくない場合、この API に高い値を置くよりもむしろ、デフォルト値 –1 を設定します。こうすることにより、ブラウザーのレンダリングループでもっとも滑らかなアニメーションにフレームレートが調整され、Unity がそのメインループでターゲットフレームレートを調整するよりもよい結果が得られる場合があります。

WebGL でオーディオの使用
Memory in WebGL