Страница 1 из 1

Разные способы сбилдить в WebGL

СообщениеДобавлено: 13 янв 2021, 16:49
Shekn
Написал про небольшое сравнение разных способов сформировать WebGL-приложение средствами Unity. Вот ссылка: https://github.com/Tugcga/WebGLCompare

Если коротко, то для создания одного и того же небольшого приложения про скачущие шарики использовалось три подхода. Первый - это на основе MonoBehaviour. Ну то есть стандартный инструментарий Unity. И билд в WebGL тоже стандартный. Второй подход - это по максимум использовать DOTS вместе с гибридным рендером. При таком подходе используется URP, а не сущностями остаются только камера, свет и UI. Третий подход - это использовать так называемый Project Tiny. С помощью этого пакета можно делать приложение вообще без использования MonoBehaviour, а используя исключительно принципы ECS. Билд в этом случае делается специальным средством, а не стандартным. Цель сравнения - выяснить, при каком подходе удаётся добиться большего показателя FPS на одном и том же оборудовании.

Краткие результаты: Tiny лучше всего, потом MonoBehaviour, хуже всего показывается себя проект на основе DOTS. Подробнее про замеры и полученные цифры - по ссылке выше. Для standalone билдов ситуация кардинально другая: DOTS лучше всех, потом Tiny, в конце MonoBehaviour.

Re: Разные способы сбилдить в WebGL

СообщениеДобавлено: 13 янв 2021, 19:38
Jarico
В WebGL вроде не поддерживается многопоток т.к. JavaScript не имеет средств для создания потоков, да и System.Threading недоступен вот и результаты DOTS такие плохие

Re: Разные способы сбилдить в WebGL

СообщениеДобавлено: 14 янв 2021, 10:32
Shekn
Но ведь с другой стороны, при билде в WebGL весь код преобразуется в WebAssembly. А он, вроде как, умеет в многопоточность.

Re: Разные способы сбилдить в WebGL

СообщениеДобавлено: 14 янв 2021, 13:11
Jarico
Shekn писал(а):Но ведь с другой стороны, при билде в WebGL весь код преобразуется в WebAssembly. А он, вроде как, умеет в многопоточность.


Видимо не включен параметр перед билдингом в WebGL
https://docs.unity3d.com/2019.1/Documen ... pport.html

Re: Разные способы сбилдить в WebGL

СообщениеДобавлено: 15 янв 2021, 10:48
Shekn
Вот ведь, я даже и не знал, что есть какие-то параметры для билда, к которым нет доступа через интерфейс. Но, к сожалению, не удалось сбилдить ни один проект с включенным параметром многопоточности. Даже не пустом проекте выдаёт какие-то ошибки сложные. Жалко, конечно.

Re: Разные способы сбилдить в WebGL

СообщениеДобавлено: 15 янв 2021, 16:46
Shekn
Добавил ещё сравнение с Three.JS в том же репозитории. Ну то есть та же самая сцена, но собранная исключительно на JavaScript-е и чистом WebGL-е без всяких промежуточных преобразований. Этот подход по производительности приближается (хоть немного и не дотягивет) к Standalone билдам. Получается, что Unity не очень подходит для создания WebGL-игр. То же самое можно сделать гораздо эффективнее в плане производительности другими средствами. А у Unity только один плюс - если уже есть проект под другую платформу, то можно задёшево сделать ещё и плохую WebGL версию. В которую всё равно играть невозможно. Ну да, зато программист быстро всё сделал и пошел отдыхать.

Re: Разные способы сбилдить в WebGL

СообщениеДобавлено: 15 янв 2021, 17:35
Tolking
Ну на Юнити будет плохая WebGL версия, а на Three.JS, возможно, никакой версии не будет... Если бы средства разработки сравнивались в лоб по производительности, то сейчас кроме си не было-бы ничего... А может и на ассемблере остановились...

Re: Разные способы сбилдить в WebGL

СообщениеДобавлено: 16 янв 2021, 10:21
Shekn
Это да, никто не спорит. Кажется, что это нормально, когда за работу игрового движка приходится платить какую-то цену производительности. Вопрос только какую. Вот в этом конкретном случае кажется, что цена слишком уж высокая. Хотя Unity как инструмент, мне, например, все равно очень нравится.