Showing posts with label Unity WebGL. Show all posts
Showing posts with label Unity WebGL. Show all posts

Unity WebGL Gzip vs Brotli Compression

 Gzip and Brotli are the two data compression programs that you can use when building for Unity WebGL. If you don't know how to convert your project to unity webgl then feel free to follow my unity webgl conversion guide. You have option in WebGL to choose specific compression format or you can even disable the compression too.

HTML Table

Gzip Brotli
Build files are bigger Build Files siz is smaller
Faster Build time Slow build time
Natively support on all browsers using HTTP/HTTPS Natively support on Firefox & Chrome only with HTTPS

You can check compatibility on caniuse


Read More: Unity WebGL technical Breakdown. 

Unity WebGL Conversion Guide - Steps to consider For Unity Webgl Conversion

 There are some common steps you need to repeat whenever you make Unity WebGL build or if you want to convert your project into WebGL. Beware I am not using Unity 2020.

Learn more: Unity WebGL Technical Breakdown

1. Convert to Latest Unity Version (if Possible):

Always try to use the latest Unity version if you are building for unity WebGL as unity WebGL has several issues. With each new unity release, we see different bug fixes but remember each new build brings it known issues. If you don't have any problem with the latest unity version then, you should adopt it for your WebGL project. Beware porting to your current project into the latest unity version can show significant compatibility issues, so make a backup before conversion.

2. Save Scripting Define Symbols 

Before converting to WebGL please save your scripting define symbol outside unity (separately). Scripting defines symbols will be available under player settings. Some of the symbols are lost during WebGL conversion.
Scripting define symbols in webgl


Unity WebGL Technical breakdown - How Unity WebGL Works

 A Glimpse of technical background of unity3d WebGL:

Unity support dozen of platform for application deployment and one of them is WebGL. WebGL allows you to run your content on a web. Technically, WebGL is an API that renders graphics in web browser.  Currently, it has two supported version of WebGL 1.0 and 2.0. Remember WebGL 1.0 roughly matches the functionally of OpenGL ES 2.0 while WebGL 2.0 roughly matches the functionally of OpenGL ES 3.0.

Unity WebGL Structure


Figure 1 Unity WebGL consist of these components.

Post Processing and Unity WebGL

 A common question asked several times about unity post-processing and WebGL, why post-processing is not working on my browser or some of post-processing features are not working in browser: The reason is that post-processing works with WebGL 2 (Unity Forum). Unity WebGL Post processing doesn't work on WebGL1. If your browser and GPU support WebGL 2.0 then PPS (Post Processing stack) should work within your browser. Unity Support graphics API WebGL 1 and WebGL 2 and if Graphic API settings are set to auto then WebGL 2 will try to run first (if supported in the browser) :


Webgl auto graphic api

Unity Webgl Issues and Solutions

During my extensive interaction with unity WebGL, I found different things that are difficult to handle in unity WebGL or Unity Webgl has some serious limitations (But nevertheless I have managed to stream large 3D area in unity WebGL with asset bundles). I have made this post in order to show you Unity3D WebGL issues sheet and if you are interested to see what technologies or toolchain Unity WebGL using behind the Scene then check this post. So, without a particular order here is the list of unity webgl limitations with relevant references for your further research. 



1. You cannot use Threads in unity WebGL. Here is the error that you will get when thread try to start:
SystemException: Thread creation failed.
UnityLoader.js:4   at System.Threading.Thread.StartInternal (System.Security.Principal.IPrincipal principal, System.Threading.StackCrawlMark& stackMark) [0x00000] in <00000000000000000000000000000000>:0
GameDev Question
Unity Forum
Unity Webgl Doc
Update: Unity claim that in Version 2019.1.0 they have added multiple Multithreading support but it was not working according to my test and now I also find this that there was bug with the problem which has fixed in Unity 2020.1.0 and Unity 2019.4.7 (untested)

2. If you are continuously pressing any keyboard input key and meanwhile you lost focus to WebGL canvas in the browser, the input will still work even after releasing the key. The situation may get worst in the Edge browser.
Ref:
SE Question
Maybe resolved in Unity 2019.3.0 but I have tested and still the same problem is happening.