WebGL is an API for rendering graphics in web browsers, which is based on the functionality of the OpenGL ES graphics library. WebGL 1.0 roughly matches OpenGL ES 2.0 functionality, and WebGL 2.0 roughly matches OpenGL ES 3.0 functionality.
WebGL2.0 が使用可能な場合、Unity WebGL は ディファードレンダリングパス のみをサポートします。WebGL1.0 では、Unity WebGL ランタイムは フォワードレンダリング にフォールバックします。
Unity WebGL は Baked GI のみをサポートしています。 Realtime GI は WebGL では今のところサポートされていません。なお、Non-Directional ライトマップのみがサポートされています。
Unity WebGL は実行時の プロシージャルマテリアル をサポートしていません。ほかのサポートされていないプラットフォームと同様にプロシージャルマテリアルはビルド中に通常のマテリアルにベイクされます。
Unity WebGL only supports linear color space rendering with WebGL 2.0. Linear color space rendering doesn’t have fallback support for WebGL 1.0. To build a WebGL player using linear color space rendering, you need to remove WebGL 1.0 API in Player Settings > Other Settings; uncheck Automatic Graphics API.
一部のウェブブラウザーは sRGB DXT テクスチャ圧縮 をサポートしていません。これにより、すべての DXT テクスチャをランタイムに解凍するため、リニアレンダリングを使用するときにレンダリングパフォーマンスの品質が低下します。
WebGL は MovieTexture クラスを用いた動画再生をサポートしていません。ただし、HTML5 video 要素を用いて WebGL コンテンツの動画を効率よく再生することはできます。実践例については、こちらの Asset Store パッケージ をダウンロードしてください。
WebGL 1.0 の仕様により、GLSLS シェーダーコードは OpenGL ES 2.0 で実装できますが多くの制限があります。これは自作シェーダーを書く場合に最も関係してくることです。
特に WebGL は配列や行列のインデックス化に使用できる値に関して制限を受けます。具体的には、WebGL は定数式に動的インデックス、ループインデックスやそれらの組み合わせのみ可能です。頂点シェーダーの Uniform アクセスだけは例外で、すべての表現を用いてインデックスできます。
管理構造にも制限が課されます。使用できるループのタイプは、数えるための for ループのみです。このループでは、イニシャライザーが変数を初期化して定数にしたり、更新によって定数を変数に加算/変数から定数を減算したり、継続テストで変数を定数と比較することなどを行います。この条件と合致しない for ループと while ループは使用できません。
Unity WebGL は他すべての Unity プラットフォームのようにダイナミックフォントレンダリングをサポートしています。ただし、ユーザーのマシンにインストールされているフォントにアクセスすることはできないため、使用されるすべてのフォントは (多言語フォントに対応するフォントや、太字やイタリックのフォントの代替フォントも含めて) プロジェクトフォルダーに置き、代替として使うため、Font Names にリストする 必要があります。
WebGL supports anti-aliasing on most (but not on all) combinations of browsers and GPUs. To use it, anti-aliasing must be enabled in the default Quality Setting for the WebGL platform.
WebGL1.0 にはいくつかの制限があることに注意してください。
Switching quality settings at runtime will not enable or disable anti-aliasing - it has to be set up in the default Quality Setting loaded at player start up.
異なるマルチサンプリングレベル (2x、4x など) は WebGL では効力がありません。オンとオフのどちらかです。
カメラに適用された ポストプロセスエフェクト は、ビルトインのアンチエイリアスを無効にします。
HDR is not compatible with anti-aliasing so make sure “Allow HDR” camera option is disabled.
WebGL2.0 にはこのような制限はありません。
リフレクションプローブは WebGL でサポートされています。しかし、特定のミップマップへのレンダリングに関する WebGL 仕様の制限により、滑らかなリアルタイムのリフレクションプローブはサポートされません (そのため、リアルタイムのリフレクションプローブは常に鋭いリフレクションを生成し、とても解像度が低く見えます)。滑らかなリアルタイムのリフレクションプローブには WebGL 2.0 が必要です。
Unity includes support for the WebGL 2.0 API, which brings OpenGL ES 3.0-level rendering capabilities to the web.
By default, Unity WebGL builds support both WebGL 1.0 and WebGL 2.0 APIs, This can be configured in the WebGL Player Settings > Other Settings; to do this, uncheck Automatic Graphics API.
WebGL 2.0 がブラウザーでサポートされている場合、コンテンツは以下のような利点を得られます。スタンダードシェーダーの品質向上、GPU インスタンス のサポート、指向性ライトマップのサポート、シェーダーコードのインデックスやループの制限がないこと、パフォーマンスの向上。