Search Unity

Вчера инженеры из Google, Microsoft и Mozilla (создатели Chrome, Edge и Firefox) объявили о том, что они работают над новой кросс-браузерной технологией под названием WebAssembly. Это очень радостная новость, так как это в значительной мере поспособствует улучшению Unity WebGL.

Хотя технически это определяется как новый независимый стандарт, с нашей точки зрения WebAssembly — это формат байт-кода для asm.js (asm.js используется для развертывания кода Unity на WebGL). По сравнению с используемыми в настоящее время текстовыми форматами, байт-код значительно снижает размер кода, составленный на asm.js. Это приводит к более быстрой загрузке кода, и, что более важно, дает возможность разобрать и скомпилировать код гораздо быстрее с меньшими затратами памяти. Это позволит улучшить время запуска крупного кода JavaScript и уменьшить его требования к памяти — два аспекта, о которых наиболее часто спрашивают разработчики, ориентированные на WebGL.

Мы планируем переключить Unity WebGL на вывод байт-кода сразу, как только будут выпущены браузеры с поддержкой WebAssembly. В браузерах, которые изначально не поддерживают эту функцию, байт-код может быть очень эффективно переведен в текстовый код asm.js, используя технологию JavaScript. Это в большинстве случаев по-прежнему способствует быстрой загрузке содержимого из-за улучшения времени загрузки.

Экспериментируя с прототип WebAssembly на сборке нашей демки AngryBots, мы увидели, что размер генерируемого кода JavaScript уменьшился с 19,0 Мб asm.js кода (при gzip-сжатии 4,1 Мб) до 6,3 Мб WebAssembly кода (при gzip-сжатии 3,0 Мб). Это означает, что объем данных, который браузер должен обработать, снизился в 3 раза, а при gzip-сжатии снизился в 1,4 раза. Результаты могут изменяться в зависимости от проекта, но мы ожидаем увидеть очень существенные улучшения, поэтому никому не придется беспокоиться о развертывании WebGL в Unity.

Для получения более подробной информации о WebAssembly см. FAQ здесь.

В свете этого заявления мы хотели бы дать дальнейшие обновления о текущем состоянии нашей работы над WebGL, изменениях в экосистеме, которые мы ожидаем в течение следующего года, и о том, над чем мы сейчас работаем, что включают в себя дальнейшее улучшение размера сборки, SIMD.js, Shared Array Buffers (которые добавляют поддержку потоков в JavaScript) и WebGL 2.0. Итак, я хотел бы пригласить вас обсудить наш роадмап WebGL в форуме этого поста, где имеется много дополнительной информации.

Если вы будете на Unite Europe в Амстердаме на следующей неделе, посмотрите мой доклад о WebGL в среду, или можете встретиться со мной, чтобы задать вопросы.

Комментарии закрыты.

  1. As excited as I am about WebGL, it’s just not a viable platform to export to at the moment for web playable games. I will continue to use Unity Web Player as my weapon of choice because I’ve had TONNES of issues with WebGL builds that I just don’t get when using the unity web player.

    A short list of problems I experienced while building last night.

    – Not all the usual post effects are supported (ambient occlusion).
    – Generally slower frame rate for NO bloody reason.
    – Alpha is handled HORRIBLY, almost would have to cut the use of particle effects. or fade-in tweens.
    – I get an uninvited doppler effect on all my sound even when i make damn sure that doppler is disabled!
    – I had to download a special media package from microsoft just so my sound files wouldnt get lost when compiling for WebGL.
    – Bump sliders are ignored, if you have a normal or bump map, your only choice is to have it at FULL BUMP!

    So I decided to build to Unity Web Player instead and just deal with the fact that ppl cant play the game on chrome.

    I’m really looking forward to the future of WebGL, but right now I’m scratching it from my list of options.

  2. Do you guys and gals envision a webassembly based plugin architecture? I think that could add so many possibilities. Maybe it would be neat if you could get a bunch of players using the Oculus Rift inside of a sound studio where everyone is playing an instrument. You wouldn’t need to worry if everyone has the right platform and you wouldn’t be limited to managed code. I imagine Webassembly Plugins could connect Unity3D to a vast ecosystem of webassembly code that the rest of the web has access to, and that could make Unity3D more «web like».

  3. Our game was exporting a file so large for WebGL, it crashed the browser while loading. Anything that can reduce file size is a huge step forward for the WebGL compiler.

  4. That’s awesome! I hope this could improve anyway the compilation time for Unity editor too. It takes ages to produce a WebGL build nowadays…

  5. How long will take to have WebAssemblies usable in practice, easy to work with, and effectively working at least on Chrome and Firefox ? I need this solution yesterday. I have planned and developed on last few months a complex project Unity WebPlayer based. My project looks completely unusable on the light of recent NPAPI changes. I am forced to switch to WebGL or to a similar solution in terms of 2-3 weeks.

  6. please no microsoft. they first have to fix IE :D

  7. please no microsoft. they first hafe to fix IE :D

  8. This is great news! Well done to everyone working on this fantastic technology.

    Are there any plans to support UnityAds / Everyplay in WebGL to be run within your game rather than having to run ads within the page?

  9. Hm.. WebAssemblies as byte code.. Is it possible then even to skip JavaScript (C# -> C++ -> JavaScript) and go directly .NET -> WebAssemblies ? Should be possible with new .NET Core and Roslyn being fully open, right

    1. I expect that eventually, emscripten will directly output WebAssembly, and not emit JS first and convert that.

      1. I need a cut scene so what can I do

  10. Impressive! Looking forward to those WebAssemblies!!!

    Big thanks!!!!

  11. That’s awesome news. It’s great that all the vendors came together (for once) to adopt this standard and decided to put developers first instead of their egos! Did’t see apple & opera listed though, but then again I’m not surprised.

    The last post about NPAPI’s exit the the way forward with WebGL sounded more grim than promising. But with this new announcement, most of the issues regarding WebGL will be sorted!

    Timelines? When do we get to preview this? Unity 5.2?

    1. As for Apple: Apple typically does not openly communicate their plans. WebKit does have an open bug on it filed by an Apple engineer. Interpret into that what you will:

      As for timelines: For WebAssembly, definitely not 5.2, or 5.3 for that matter. It is already very hard to predict when we get our own stuff ready to ship. It’s much harder for multiple third party vendors.

  12. Does anyone know if this includes Internet Explorer? I know Edge and the other browsers are the future, but it’d be nice if IE was supported for a unified experience when developing for the browsers.

    1. I wonder if MS is a bit in limbo with this since they’re working on Spartan. Maybe they won’t be adding new features to IE after W10 release.

      1. microsoft is not supporting explorer and in development of Edge (formaly known as spartan), as written in the first paragraph of this article.

    2. IE is dead. IE11 will receive security fixes for a looong time but that’s about it. All new development goes into Edge, IE is frozen for eternity.

  13. Awesome!!!!!! +10

  14. Well this is super-exciting news! One big question : what’s the ETA? Are we looking at months or years for WebAssembly to roll out in browsers/Unity?

  15. I love that Unity continues to adopt and implement the latest web features. Makes the life of us web devs much easier, but also forces the browser creators to continue to evolve.

    As much as 3x improvement in size? That’s incredible. And the power you get from WebGL (and specifically asm) is staggering. With WebGL 2.0 in the future I’m confident we’ll continue to close the game between native vs. web performance.

    Keep doing what you’re doing Unity, love it.

  16. Impressive! Looking forward to those WebAssemblies!!!