WebGLA JavaScript API that renders 2D and 3D graphics in a web browser. The Unity WebGL build option allows Unity to publish content as JavaScript programs which use HTML5 technologies and the WebGL rendering API to run Unity content in a web browser. More info
See in Glossary 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. This page provides an overview of the graphics features supported by Unity WebGL.
On Unity WebGL, the content of the frame buffer clears regardless of the Camera.clearFlags setting. However, you can change this behavior at instantiation time. To do this, set webglContextAttributes.preserveDrawingBuffer
to true
in the index.html
file of the WebGL template.
Note: If you set any WebGL context attributes, you must also add a line to preserve the Power Preference Player setting.
script.onload = () => {
config['webglContextAttributes'] = {
preserveDrawingBuffer: true, //Add this line to preserve the Camera.clearFlags setting
powerPreference: {{{ WEBGL_POWER_PREFERENCE }}} //Add this line to preserve the Power Preference Player setting
};
createUnityInstance(canvas, config, (progress) => {
Unity WebGL supports Deferred Rendering Path only if WebGL 2.0 is available. On WebGL 1.0, Unity WebGL runtime will fallback to Forward RenderingA rendering path that renders each object in one or more passes, depending on lights that affect the object. Lights themselves are also treated differently by Forward Rendering, depending on their settings and intensity. More info
See in Glossary.
Unity WebGL supports baked GI and Non-Directional lightmapsA pre-rendered texture that contains the effects of light sources on static objects in the scene. Lightmaps are overlaid on top of scene geometry to create the effect of lighting. More info
See in Glossary only. It doesn’t support Enlighten Realtime Global IlluminationA lighting system by Geomerics used in Unity for lightmapping and for Enlighten Realtime Global Illumination. More info
See in Glossary yet.
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 the Player settings, open the Other Settings panel, disable the Automatic Graphics API setting.
Some web browsers don’t support sRGB DXT texture compression. This can decrease the quality of rendering performance when using linear rendering, due to runtime decompression of all the DXT textures.
WebGL platform doesn’t support video clips. Therefore, you can’t import it in the Unity project using VideoClipImporter, as it might increase the initial asset data download size and prevent network streaming. For video playback, use the URL option in the VideoPlayer component and place the asset in the StreamingAssets/ directory to use the built-in network streaming of your browser.
The WebGL 1.0 specification imposes limitations on GLSLS shaderA program that runs on the GPU. More info
See in Glossary code, which is more restrictive than other OpenGL ES 2.0 implementations. These restrictions are relevant only when you write your own shaders. For example, WebGL has restriction on which values to use for index arrays or matrices, and allows only dynamic indexing with constant expressions, loop indices or a combination of both. The only exception is for uniform access in vertex shadersA program that runs on each vertex of a 3D model when the model is being rendered. More info
See in Glossary, which can be indexed using any expression.
WebGL has additional restrictions on control structures. For example, it allows counting for
loops only if the initializer initiates a variable to a constant, or the update adds a constant to or subtracts a constant from the variable, and the continuation test compares the variable to a constant. It restricts for
loops which don’t match this criteria and restricts while
loops altogether.
Unity WebGL supports dynamic font rendering like all Unity platforms. However, it doesn’t have access to the fonts installed on the user’s machine, so any fonts used must be included in the project folder (including any fallback fonts for international characters, or bold/italic versions of fonts), and set up as fallback 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.
WebGL 1.0 has following limitations:
Switching Quality settings at runtime won’t enable or disable anti-aliasing. It has to be set up in the default Quality setting loaded at player start up.
The different multi sampling levels (2x, 4x, etc..) have no effect in WebGL, it’s either on or off.
Any post-processing effect applied to the cameraA component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info
See in Glossary disables the built-in Anti-Aliasing.
HDRhigh dynamic range
See in Glossary isn’t compatible with anti-aliasing so make sure the Allow HDR camera option is disabled.
There are no such limitations on WebGL2.0.
WebGL supports reflection probesA rendering component that captures a spherical view of its surroundings in all directions, rather like a camera. The captured image is then stored as a Cubemap that can be used by objects with reflective materials. More info
See in Glossary, but due to limitations in the WebGL specification about rendering to specific mipmaps, WebGL 1.0 doesn’t support smooth realtime reflection probes. To use smooth realtime reflection probes, upgrade to WebGL 2.0.
Unity includes support for the WebGL 2.0 API, which brings OpenGL ES 3.0-level rendering capabilities to the web. You can use SystemInfo.graphicsDeviceType at runtime to determine whether the Unity instance is rendering with OpenGLES3 (WebGL2.0) or OpenGLES2 (WebGL1.0).
By default, Unity WebGL builds support both WebGL 1.0 and WebGL 2.0 APIs. You can configure WebGL APIs from the WebGL Player settings > Other Settings panel by disabling the Automatic Graphics API property. This allows you to choose which WebGL API to use. If you disable WebGL 1.0 API, Unity will use WebGL 2.0 API only.
Browsers with WebGL 2.0 support have the following advantages: