Как стать автором
Обновить

Комментарии 24

А зачем? VRML (а это стандарт аж с 1997 года!) за столько лет так и не прижился, что означается лишь одно — неудобно с компьютера с 2D управлением пользоваться 3D интерфейсами. Кроме того, нет прямой нужны сделать 3D, кроме как для очень специальных задач. Тянуть поддержку 3D в браузеры… Зачем?

НЛО прилетело и опубликовало эту надпись здесь
WebGL уже прижился, в картах Google его уже давно используют.
DOM, между прочим, вполне себе является проекцией из 3D в 2D. Как следствие, никто не запрещает использовать аппаратное ускорение для расчета тяжелых анимаций. Google Maps, между прочим, уже года два этим пользуется, и текущие десктопные карты перенесены на WebGL.
Ну речь-то в статье идет про поддержку разработки полноценных 3D приложений и игр, а не просто про аппаратную поддержку вывода графики с трансформациями и прочими полезностями).
Да и в тысячах веб-игрушек вполне себе он прижился.
«А зачем ?» — что вы имели ввиду? Если речь идет об использовании трехмерной графики, то тут я с вами не соглашусь. Презентации, карты, виртуальные гиды высокой детализации, дополненная реальность в конце концов, браузерные игры. Примеров множество, вычислительные мощности растут, пользователь требует все более и более продвинутых интерфейсов.
НЛО прилетело и опубликовало эту надпись здесь
Для игр конечно.
Например мы разрабатываем видеослоты, и смотрим в сторону WEB — не на флеше же писать
У three.js на версиях r70 и ниже была не подробная документация, тогда это был минус этой библиотеки, сейчас к счастью очень хорошо ее подтянули, это радует.

Хабр предложил интересные публикации по похожим темам. Захожу в эту https://habrahabr.ru/post/247811/. Статья написана 2 года назад в 2015. В комментариях взрываются пуканы хомячья недовольных размером шапки в 400кб и общей тормознутостью сайта. Сейчас 2017 рок, захожу на сайт приведенный в примере https://www.phyramid.com/en/ из статьи. Есть ужасающий дизайн, кровоточиво-глазные сочетание цветов, но нет трехмерной шапки. Даже такие упоротые в плане дизайна, как создатели этого сайта (у них наверняка в каждом глазу по включенному миксеру), осознали за 2 года, как говорят на этих ваших оманьяченных лорах: "не нужно" и выпилили 3 мерную шапку к херам.
Веб игры? Ну если только всякие казино и прочие вулканы. Продвинутые геймеры ставят титаны и затариваются в стимах кризисами да батлами разными.

Почти невозможно сделать WebGL вставку, чтобы хипстерский какбы-ноутбук не шел на взлет, даже в 30 fps. Потому и убрали.
Не всегда десктопные (монолитные) решения могут полностью заменить мобильные (браузерные). Если брать те же игрушки и «геймеров тарящихся титанами» — это далеко не показатель. Крутая игра может быть и в пиксельной графике (миллионы успешных инди игр заслужили признание мировой общественности).
Так вот, если игра не требовательна к большему числу полигонов модели — то ресурсов компьютера и технологий современных браузеров вполне хватит, чтобы рендерить вполне себе крутые игрушки. Так что 3D в бразуерах — это скорее светлое будущее, чем утопия. Просто такие технологии надо применять с умом. Да и сами проекты должны привлекать геймера в первую очередь не красотой картинки, а качеством геймплея. А тут уж и браузер и десктоп и мобильное приложение — все равны. Вопрос на что хватит фантазии.
Статья чистая, красивая, мне в целом понравилась, только вот 2017 на дворе, уже WebGL 2.0) Даже с браузерами шаманить вроде не надо (хром поддерживает сразу)
Мозила вот не отстает https://hacks.mozilla.org/2017/01/webgl-2-lands-in-firefox/

Ну и вот потрогать немного
https://playcanv.as/e/p/44MRmJRU/
http://toji.github.io/webgl2-particles-2/
http://toji.github.io/webgl2-crowd/

Без сомнения WebGL 2.0 вкусная технология и со временем она возьмет свое, однако на данный момент суммарная поддержка по браузерам менее 30% и это печально. Я даже не беру в расчет «любимый» всеми фронтэндщиками IE, все печально и со стороны Apple, а это приличная доля пользователей.
НЛО прилетело и опубликовало эту надпись здесь
Перейдите в chrome://settings
Нажмите кнопку + Показать дополнительные настройки
В разделе Система, найдите пункт Использование аппаратного ускорение включите кликнув на флажок ( и далее вам необходимо перезапустить Chrome для того чтобы изменения вступили в силу)
Затем включите WebGL:
Перейти в chrome://flags
Найдите пункт Включить прототип WebGL 2.0
Убедитесь в том, что WebGL активирован (вам необходимо перезапустить Chrome чтобы любые изменения вступили в силу)
Затем проверьте состояние WebGL:
Перейти в chrome://gpu
Найдите элемент WebGL: Hardware accelerated в списке Graphics Feature Status. Надпись Hardware accelerated должна гореть зеленым


Вот такой есть мануал

Ну судя по тому что сафари не поддерживает WebGl 2.0 Apple не сильно торопиться с внедрением стандарта, так что могут быть проблемы на аппаратном уровне. Хром на эпловских осях иногда выдает такие финты что волосы дыбом становятся.
НЛО прилетело и опубликовало эту надпись здесь
Было бы интересно почитать сравнение с существующими и давно работающими решениями в области браузерной трёхмерки.

Расскажу об этом в следующих статьях ;)

не требует установки специализированных расширений или библиотек


без драйверов видеокарты, а в случае Линукса ещё и правильно настроенных тех самых библиотек, ничего не взлетит.

втоматическое управление памятью. В отличие от OpenGL, в WebGL не надо выполнять специальные действия для выделения и очистки памяти.


если прошлое замечание больше похоже на придирку, то в этом случае всё серьёзно — это уже откровенная ложь. Лучше уберите этот пункт. Все данные, которые будут отображаться с помощью WebGL выделяются в памяти видеокарты. Соответственно, их также надо вручную освобождать, никакой сборщик мусора не поможет.
Касательно замечания по управлению памятью, для WebGL родным языком является JavaScript.
В данном языке конкретных функций ручного управления памятью не предусмотрено, значение переменной в памяти остается до тех пор пока есть хотя бы одна ссылка на переменную далее вступает в действие сборщик мусора.
Понятно, что если бездумно плодить переменные и оставлять их висеть в памяти ничего хорошего не будет, но это уже вопрос оптимизации программы.Так как WebGL программируется в JavaScript эти принципы так же применимы.
Тезис об автоматическом управлении памятью подтверждается и печатными источниками. Однако я не буду утверждать, что вы не правы в своем высказывании, если у вас есть информация или конкретное руководство по ручному управлению памятью при разработке WebGL приложений прошу поделиться. Очень интересно будет почитать и применить на практике для создания качественных, оптимизированных приложений.

вот на примере буфера: https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/deleteBuffer


Да, когда переменная buffer выйдет из блока (т.е. попадёт к сборщику в руки), он что-то связанное с ней подчистит, однако deleteBuffer вызывать не будет (Конечно, может в обозревателях и реализовали такую возможность, но я сильно сомневаюсь), произойдёт потеря идентификатора, с помощью которого адресуются данные и освободить их в данном процессе уже никак не получится. Происходит это из-за того, что buffer "держит" данные непосредственно в памяти видеоускорителя.


Конечно, если речь идёт о какой-нибудь демке, то там всё равно, вызывать дилит объектам или нет — при закрытии вкладки/обозревателя ОС всё подчистит — кстати также, как и при закрытии родного приложения.
Однако для долгоиграющих приложений (игры, 2Д/3Д-редакторы графики, редакторы видео, ПО для моделирования) это должно учитываться. И выглядеть этот код будет один-в-один, как на C++. =)


И для каждого GL-ного объекта такая пара методов есть:


  1. текстуры — https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/deleteTexture
  2. шейдеры — https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/deleteShader, https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/deleteProgram
  3. буфер отображения — https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/deleteRenderbuffer
  4. буфер кадра — https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/deleteFramebuffer

Развивая тему, хотелось бы отметить, что это не проблема JavaScript/WebGL в частности. Это вообще проблема сборщиков мусора — все думают, что они могут всё и ни за чем следить не нужно. Самое большое заблуждение! В общем случае приходится управлять ресурсами (память же — лишь частный её случай) и тут сборщики мусора никак не облегчают задачу, но даже мешают.

Очень интересные примеры, получается, что присутствует только частичная автоматизация управления ресурсами на уровне JavaScript, однако чтобы освободить ресурсы железа, придется чистить руками. Большое спасибо за разъяснение, учтем этот аспект в будущем.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации