WebGL は OpenGL ES 2.0 グラフィックスライブラリの機能を基本とした Webブラウザでグラフィックスを描画する API です。
Unity WebGL は Baked GI のみをサポートしています。 Realtime GI は WebGL では今のところサポートされていません。なお、Non-Directional ライトマップのみがサポートされています。
Unity WebGL は実行時の プロシージャルマテリアル をサポートしていません。ほかのサポートされていないプラットフォームと同様にプロシージャルマテリアルはビルド中に通常のマテリアルにベイクされます。
WebGL は リニア色空間レンダリング をサポートしていません。
WebGL は MovieTexture クラスを用いた動画再生をサポートしていません。しかし、HTML5 video 要素を用いて WebGL コンテンツで効率よく動画を再生することはできます。実践例については、こちらの Asset Store パッケージ をダウンロードしてください。
WebGL 1.0 の仕様により、GLSLS シェーダーコードは OpenGL ES 2.0 で実装できますが多くの制限があります。これは自作シェーダーを書く場合に最も関係してくることです。
特に WebGL は配列や行列のインデックス化に使用できる値に関して制限を受けます。具体的には、WebGL は定数式に動的インデックス、ループインデックスやそれらの組み合わせのみ可能です。頂点シェーダーの Uniform アクセスだけは例外で、すべての表現を用いてインデックスできます。
管理構造にも制限が課されます。ループの種類中使用できるのはイニシャライザーが変数を定数に初期化する場合、定数に変更が加えられた場合、変数から定数を引いた場合、継続テストが変数を定数と比べた場合の for ループのカウントのみです。この条件と合致しない for ループと while ループは使用できません。
Unity WebGL は他すべての Unity プラットフォームのようにダイナミックフォントレンダリングをサポートしています。しかし、ユーザーのマシンにインストールされているフォントにアクセスすることはできないため、使用されるすべてのフォントは(代替できるよう、多国に対応するフォントや太字・イタリックバージョンのフォントも含めて)プロジェクトフォルダーに配置し、予備フォント名を設定しましょう。
WebGL はアンチエイリアスを(すべてではありませんが)ほとんどのブラウザと GPU の組み合わせでサポートしています。この機能を使用するには WebGL プラットフォームのデフォルト クオリティー設定 の anti-aliasing を有効にしなくてはなりません。クオリティー設定の anti-aliasing を実行時に切り替えても有効、無効が切り替わることはありません。この設定はプレイヤーが起動した際に読み込まれるからです。 multi sampling level は WebGL では効果がないことに注意してください。
リフレクションプローブは WebGL でサポートされています。しかし、特定のミップマップへレンダリングする WebGL 仕様の制限により、滑らかなリアルタイムのリフレクションプローブはサポートされません (そのため、リアルタイムのリフレクションプローブは常に鋭いリフレクションを生成し、とても解像度が低く見えます。)。滑らかなリアルタイムのリフレクションプローブには WebGL 2.0 が必要です。
Unity は OpenGL ES 3.0 レベルのレンダリングが Web で可能となる WebGL 2.0 API のサポートを取り入れています。この機能は現在実験段階であり、デフォルトでは無効になっています。現在発表されているブラウザでは WebGL 2.0 をサポートしていないためです。しかし、最新版の Firefox では about:config で__webgl.enable-prototype-webgl2__ を有効にすればこの機能をテストできます。
Unity で WebGL 2.0 を有効にするには、WebGL Player Settings の Other Settings にある Automatic Graphics API をオフにして、Graphics API として WebGL 2.0 の項目を追加します。
WebGL 2.0 がブラウザでサポートされればコンテンツは Standard Shader の質がよくなる、Directional ライトマップサポート、シェーダーコードでのインデックス化やループでの制限がなくなりパフォーマンスが向上するなどの利益が得られます。