SafariとApple Vision ProにおけるWebGLのパフォーマンス
Safari–特にiOSでは–は常に3Dウェブで構築する開発者にとってのパフォーマンス上の挑戦の頂点と見なされてきました。 WebGLのMetalベースの実装とWebKitのユニークなパフォーマンス特性が、この作業を特に興味深いものにしています。
この記事では、SafariでのWebGLアプリのパフォーマンスを向上させる方法についての洞察を提供します。
Apple Vision Pro
最近のApple Vision Proの発売により、SafariでのWebGLのパフォーマンスはさらに重要になっています。これは、Apple Vision版のSafariが、MacOSおよびiOSのSafariのすべてのパフォーマンス特性を継承しているためです。
近いうちに、Apple Vision ProでのWebXRに関する完全な記事を投稿する予定です。通知を受け取るために、ニュースレターを購読 してください。
Wonderland Engine on Apple Vision Pro
もしすでにWonderland Engineを使用している場合、良いニュースがあります。私たちの0.9.0リリースのために行ったすべての最適化が、Apple Vision Proに適用されます。
Apple Vision Proにアクセス可能な開発者から、Wonderland Engineベースのアプリにおける素晴らしいパフォーマンスの報告が届いています:
Safari向けの最適化
別のフレームワークを使用している場合は、私たちのWebGLパフォーマンスプロファイリングブログ記事をぜひご覧ください。 このブログ記事には、アプリケーションのボトルネックを見つけ出し、どの部分を最適化するかを発見するためのヒントが含まれています。
さらに、プロファイリングの際にSafariで見られる可能性のある点についていくつかの注意事項を以下に示します。これらは万能策ではないため、アプリケーションをプロファイリングして、どれが問題を引き起こしているかを見つけてください。
ボトルネック
SafariでWebGLを使用する際に遭遇する可能性のある特定の問題をいくつか紹介します:
Uniform Buffers
AppleのグラフィックスAPI Metal とWebGLの違いにより、SafariではWebGLスタイルのユニフォームバッファを内部的にエミュレートする必要があります。このエミュレーションにより、UBOsのパフォーマンスを予測するのは困難で、一部の用途では問題ない一方で、データを不適切なタイミングでアップロードしようとすると150msの遅れが生じる場合があります。
このコードスニペットは、WebKitがWebGL2 APIを実装するために使用しているMetalの実装からGLESに相当するWebGLのbufferSubData
の実装を指しています。
ブラウザ開発者が私たちに一貫したグラフィックスAPIを提供するためにどのような努力をしているかを知る手助けとなります。
また、Wonderland Engineのチームがブラウザのパフォーマンスを理解し最適化するためにどのような努力をしているかも示しています。
SafariがWebGL2のサポートをリリースするまでに時間がかかったことに対して多くの不満がありました。サポートされることはないという憶測にもかかわらず、Safari 15で2021年9月にWebGL2サポートをリリースしました。 WebKitとAngleのコードを読むと、それが簡単ではない作業だった理由にある程度の同情を抱くことができます。
WebGLの状態アクセス
WebGLのgetParameter
関数にはパフォーマンスの驚きが待ち受けています。一見無害な関数に思えても、パフォーマンス予算に多大な影響を与える可能性があります。
WebGLエラー
getError
でエラーをチェックするのは一般に良い考えですが、この操作をフレームコールバックの外で行うのは避けるべきです。思った以上にコストが高くなることがあります。
メモリと制限
WebGL Safariは、テクスチャサイズ、レイヤー、ユニフォームバッファサイズなどの制限を報告します。 これらの制限を確認するための良いツールはwebglreport.comです。
Safariは理論的にはこれらの制限までメモリを割り当てることを許可しますが、ページのクラッシュを引き起こす可能性があります。
iOSでメモリリソースをより効率的に使用するために、Wonderland Engineは_テクスチャストリーミング_と呼ばれる機能を提供し、フレーム内で現在必要なものに基づいてテクスチャの一部を動的にメモリに入れたり出したりします。これはデフォルトで有効になっています。
閉じの言葉
Apple Vision ProでのWebXRに関する詳細なブログ記事を近日中に公開する予定です。 公開時に通知を受け取るために、ニュースレターを購読してください。
それまでの間、Wonderland Engineを試してみてください。 特にUnityから移行する際には、Wonderland Engineは学びやすいです。
Discordサーバーに参加 して、始めるための適切なリソースを指摘することを喜んでお手伝いします。