WebGL はウェブブラウザーでグラフィックスをレンダリングするための API で、OpenGL ES グラフィックスライブラリの機能にもとづいています。WebGL 1.0 は OpenGL ES 2.0 の機能とほぼ一致し、WebGL 2.0 は OpenGL ES 3.0 の機能とほぼ一致します。
デフォルトでは、Unity WebGL は各フレームの後に描画バッファをクリアします。つまり、フレームバッファのコンテンツは Camera.clearFlags の設定に関係なくクリアされます。ただし、インスタンス生成時にこの動作を変更することができます。これを行うには、WebGL テンプレートでwebglContextAttributes.preserveDrawingBuffer
をtrue
に設定します。
script.onload = () => {
config['webglContextAttributes'] = {"preserveDrawingBuffer": true}; // Add this line to the index.html file in a WebGL Template
createUnityInstance(canvas, config, (progress) => }
WebGL2.0 が使用可能な場合、Unity WebGL は ディファードレンダリングパス のみをサポートします。WebGL1.0 では、Unity WebGL ランタイムは フォワードレンダリング にフォールバックします。
Unity WebGL は ベイクした GI のみをサポートします。リアルタイムグローバルイルミネーションは現在 WebGL ではサポートされていません。また、Unity WebGL は非指向性ライトマップのみをサポートしています。
Unity WebGL は WebGL 2.0 で リニア色空間レンダリング のみをサポートします。リニア色空間レンダリングで WebGL 1.0 のフォールバックサポートはありません。リニア色空間レンダリングを使用して WebGL プレイヤーをビルドするには、Player 設定で WebGL 1.0 API を削除し、Other Settings パネルを開き、Automatic Graphics API 設定を無効にします。
一部のウェブブラウザーは sRGB DXT テクスチャ圧縮 をサポートしていません。これにより、すべての DXT テクスチャをランタイムに解凍するため、リニアレンダリングを使用するときにレンダリングパフォーマンスの品質が低下します。
VideoClipImporter
を使用してビデオクリップを Unity プロジェクトにインポートすることはできません。初期アセットデータのダウンロードサイズが大きくなり、ネットワークストリーミングができなくなる可能性があるからです。動画の再生には、VideoPlayer コンポーネントの URL オプションを使用し、StreamingAssets/ ディレクトリにアセットを配置して、ブラウザのビルトインネットワークストリーミングを使用します。
WebGL 1.0 仕様 は GLSLS シェーダーコードにいくつかの制限を課しています。これらの制限は多くの OpenGL ES 2.0 実装よりもより厳しいものです。これは多くの場合、独自のシェーダーを作成する場合に関わってきます。
WebGL には配列や行列のインデックス化に使用できる値に関して特定の制限があります。具体的には、WebGL の動的インデックスは、定数式、ループインデックス、または、それらの組み合わせのときみ可能です。頂点シェーダーの Uniform アクセスだけは例外で、どんな式を用いてもインデックスを使えます。
WebGL 1.0 に関するノート: WebGL 1.0 では、制御構造に追加の制限が適用され、while
ループやほとんどのタイプの for
ループは使用できません。しかしフィールドイニシャライザーが変数を定数に設定し、更新が変数に定数を追加または変数から定数を減算し、継続テストが変数と定数を比較するような for
ループのカウントは可能です。
ノート: WebGL で使用可能なメモリには限りがあるため、不要なメモリ使用につながる不要なシェーダーバリアントを加えることは避ける必要があります。そのため、Unity では、シェーダーのバリアント と シェーダーのストリッピング をよく理解し、バリエーションが多すぎるシェーダー (例えば Unity の スタンダードシェーダー) を Graphics Settings の [Always-included Shaders] section(class-GraphicsSettings#Always) に加えないように特に注意してください。
Unity WebGL は他すべての Unity プラットフォームのようにダイナミックフォントレンダリングをサポートしています。ただし、ユーザーのマシンにインストールされているフォントにアクセスすることはできないため、使用するすべてのフォントは (多言語フォントに対応するフォントや、太字やイタリックのフォントの代替フォントも含めて) プロジェクトフォルダーに置き、代替として使うため、Font Names にリストする 必要があります。
WebGL は、ブラウザーと GPU のほとんどすべて (ただし、すべてではない) の組み合わせでアンチエイリアスをサポートします。これを使用するには、WebGL プラットフォームのデフォルトの Quality 設定でアンチエイリアスを有効にする必要があります。
Unity WebGL はすべてのリフレクションプローブをサポートしています。ノート: WebGL 1.0 は Smooth リアルタイムリフレクションプローブをサポートしていません。
Unity には WebGL 2.0 API のサポートが含まれており、ウェブに対する OpenGL ES 3.0 レベルのレンダリング機能を提供します。
デフォルトでは、Unity WebGL ビルドは WebGL 2.0 API をサポートしています。これは WebGL Player 設定 > Other Settings パネルに移動し、Automatic Graphics API プロパティを無効にすると設定できます。
WebGL 2.0 をサポートするブラウザーには、次のような利点があります。
ランタイムに SystemInfo.graphicsDeviceType を使用すると、Unity インスタンスが OpenGLES3 (WebGL2.0) と OpenGLES2 (WebGL1.0)、どちらでレンダリングしているかを判断できます。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.