В августе прошлого года я обратил внимание на интересный WebGL-движок для разработки своих браузерных проектов. Меня подкупила его тесная интеграция с Blender и русская команда разработчиков. И вот совсем недавно на официальном сайте появился своеобразный отчет о прошедшем годе и планах на будущее. Я подумал, а почему бы и мне не высказаться на это тему, но с точки зрения своего опыта и времени работы с этим фреймворком. На хабре уже есть немало обучающих статей написанных мною о Blend4Web. Помимо всего прочего я рассказывал и о текущих проблемах. Теперь я хочу суммировать накопленные положительные и отрицательные оценки в нечто целое. Учтите, что это только личное мнение.

Мне часто задавали вопрос: “Почему именно Blend4Web?”. В то время была проблема с Unity WebGL, которого практически не существовало. Я был вынужден искать что-то иное. Blender — это моя рабочая лошадка. Модели для игр, композитинг для ТВ (где я работаю), 3D-видео на заказ и все это делалось только в Blender. К тому же я большое внимание обращал на популяризацию этого замечательного редактора. Вобщем, с Blender меня очень многое связывает. Неудивительно, что случайно прочтенная статья на хабре о Blend4Web меня заинтересовала и я решил попробовать.

Blend4Web — это интересный фреймворк со своими положительными и отрицательными сторонами. С одной стороны, активная разработка, ежемесячные релизы, внимательность разработчиков к пользователям, с другой стороны — отсутствие примеров в документации API, частая замена текущих функций, постоянная перекройка настроек в Blender, лицензирование. Но обо всем, как говорится, по порядку.

Сильнейшей стороной фреймворка является тесная взаимосвязь с Blender. И это очень удобно. Моделирование, настройка сцены и физики — все делается в редакторе. Да я знаю, что многие успешно работают с чистыми движками, не имеющих нормального редактора сцен, но я к таким не отношусь. Наверное, долгое использование Unity наложило отпечаток на мое мнение о том, каким должен быть фреймворк для разработки игр — в первую очередь, удобным для использования.

И действительно, вся работа происходит в Blender. Причем это не ограничивается простой установкой объектов на сцене. Разработчики Blend4Web внедрили кучу своих функций на панелях редактора. Они как бы дополняют стандартные опции. Например, настройка материала происходит обычным способом и ничем не отличается от того, как если бы вы работали просто в Blender (кстати, это сильная сторона движка, практически любую модель созданную в Blender можно без проблем использовать в Blend4Web). Но вот, если присмотреться внимательнее к панели материалов, то можно увидеть дополнительные окошки: Terrain Dynamic Grass, Water, Collision и некоторые другие.



Это и есть пример внедренных опций b4w. Разработчики движка стараются по максимуму использовать стандартные настройки Blender, а те которые неприменимы для реалтайм — просто скрываются. Поэтому особых проблем с построением сцены у знающего Blender просто не возникнут.

Еще одной крупной, но неоднозначной фишкой Blend4Web являются заготовки. Разработчики добавили немало глобальных возможностей прямиком в редактор. Я не имею в виду постэффекты, различные световые эффекты, настройки окружения — все это есть и активируются несколькими галочками в соответствующих опциях, разговор идет о другом. Например, есть панель Wind Blending. Это потрясающая штука, позволяющая создавать реалистичную анимацию деревьев, травы под воздействием ветра. И она логически закончена. Но есть и те, которые вызывают сомнения, например Character. По сути, это физические настройки поведения человекообразного персонажа: скорость ходьбы, силы прыжка, бег и… Waterline. Догадываюсь, для чего последняя опция нужна, но ведь необходимы и другие, так почему именно Waterline?

Я так понимаю, что “ларчик просто открывается”. Разработчики внедряют только те функции, которые им необходимы для решения текущих задач. Тот же Character, скорее появился из-за разрабатываемой в недрах компании игры “Сказ о Пятигоре”. Безусловно, данная заготовка очень полезна для персонажа-человека, но непригодна для персонажа-рыбки. Я общался с одним из программистов Blend4Web на эту тему и получил закономерный ответ: “Мы не ожидали такого использования заготовки Character”. А если не рыбка, а птичка, или космический корабль, или робот-многоножка?

В статье “Цели разработки на 2016 год” на официальном сайте, есть пункт (здесь и далее цитаты выделяются курсивом): “… планируется появление возможности задавать параметры персонажей и NPC непосредственно в Blender, без необходимости написания кода”. Я так понимаю, что имеющийся Character будет значительно расширен и это хорошо. Но может стоит разработчикам собрать данные, что же нужно конечным пользователям в таких заготовках, путем опросов на форуме или поднятием специальной темы. Конечно, много будет шлака, равно как и некоторых полезных замечаний.

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

Есть еще одно положительное качество — быстрая реакция разработчиков на ошибки и требуемые фичи. Я уже замечал, что мои статьи на Хабре читают и создатели Blend4Web. В одной из них я жаловался на неудобную функцию отключения и включения объекта в сцене. До этого она реагировала только на один объект, а если он имел иерархию, то приходилось перебирать всю цепочку в цикле и по отдельности их отключать. Удивительное дело, буквально в ближайшем релизе разработчики улучшили функцию Show и теперь она может управлять всей иерархией в целом. Похожих примеров множество. В одной из ветки форума поднялся разговор о необходимой ноде Transform (перемещение, вращение и масштабирование объекта без написания кода). В текущем релизе (16.01) эта нода уже есть.

Все это происходит благодаря не только отзывчивости разработчиков, но и уникальным релиз-планам компании. Каждый месяц — новый билд. Хорошо это или плохо?

Вообще вопрос не однозначный. Мы все привыкли к размеренному появлению релизов различных игровых движков. Раз в квартал, в полгода или даже год, но ни как не ежемесячно. С одной стороны буксует полученный опыт работы. Ты привык видеть данную опцию в этой панели, а она прыг и появилась уже в другой. Или используемая функция API вдруг объявлена deprecated. К чести разработчиков, они стараются минимизировать возможные проблемы. Так движок в консоли предупредит об использовании deprecated-функций, а сами они физически будут удалены только через несколько месяцев. С другой стороны, происходит стремительное развитие фреймворка. Пользователи получают то, что им нужно буквально в следующим релизе.

Такая система публикации билдов сначала настораживала. Откровенно бесили переносы проектов из старой версии SDK в новую. Это достаточно трудоемкая операция, так как файлы проектов разбросаны по разным папкам (такие требования SDK), Был вполне реальный шанс что-нибудь забыть скопировать. Однако в одном из осенних релизов появился веб-менеджер, который не только решил эту проблему при обновлении движка, но и добавил множество удобных функций в управлении проектами.

Так что политика частых релизов имеет свои несомненные преимущества в виде быстроты ввода новых функций и закрытия ошибок, но нужно проявлять определенную осторожность и тестировать проект после обновления.

Больной вопрос Blend4Web — это лицензирование. Мы все уже привыкли, что популярные игровые движки стали бесплатными, а их разработчики зарабатывают на обслуживании и облачных решениях. В наше время выглядит странным разделение лицензии на Free и Pro. Но опять-таки всё неоднозначно.

Если вспомнить лицензионные политики разработчиков игровых движков прошлых лет, то наиболее массовыми были два подхода: Free/Pro, где бесплатная версия была сильно урезана по сравнению с платной и модель роялти. Потом произошло невообразимое — главные игроки на этом поле, Unity и UE вдруг стали полностью бесплатными. Понятное дело, разработчики тоже есть хотят, поэтому расчет был на массовость и доход на сопутствующих опциях. Так для Unity появились подписка на версию Professional Edition с ее плюшками, а также масса сервисов. Но в целом можно скачать бесплатную версию и создать полноценную игру. Хотя в дальнейшем скорее всего придется платить деньги за подписку, ведь со временем аппетит только возрастает при работе. Всегда хочется больших удобств или свобод.

С Blend4Web все проще и сложнее одновременно. Есть четкая Open Source лицензия, которая позволяет разрабатывать некоммерческие приложения или коммерческие, но с открытием исходников. Собственно, Blend4Web позиционируется, как Open Source решение, а значит код движка доступен и во free. Это плюс и значительный, ведь можно быстро подправить нужную часть кода под свои нужды. С другой стороны, для коммерческих проектов как-то не принято раскрывать свои исходники, в том числе и файлы Blender. Разработчики оставили одну поблажку для тех, кто-бы хотел использовать бесплатную версию движка, но и не желает раскрывать исходники. На официальном сайте четко написано: “В случае воспроизведения экспортированных файлов стандартным веб-плеером Blend4Web ..., распространение исходных файлов сцен по GPL не обязательно.

Выход? Но не совсем. Плеер Blend4Web — это законченное программное решение и больше ориентировано для показа несложных презентаций. Создать игру на основе его будет весьма проблематично.

А теперь посмотрим на коммерческую лицензию. За нее требуют 36000 рублей. При ее покупке вы вольны делать все, что угодно, в том числе закрывать свои исходники. Плюс есть дополнительный набор демо-туториалов и техническая поддержка.

С одной стороны, сумма приличная, с другой стороны — она однократная. К тому же сейчас с рублем творится черте-что. И полторы тысячи зеленых на лицензию того же Unity Pro сейчас выльется почти в 120000 рублей. Разработчики Blend4Web базируются в России и привязаны к отечественной валюте — это серьезный аргумент. Лично меня беспокоит политическая ситуация и возможные последствия. Может я и параноик, но уже задумываюсь о переносе своего сервера из зарубежья в родные пенаты (да и дорого становится оплата в долларах в пересчете на рубли).

А теперь о главном вопросе, который наверняка интересует многих: “Насколько Blend4Web готов для разработки игр?”.

Сейчас у меня в работе два проекта с использованием Blend4Web: двухмерный космосим и трехмерная аркада. Сложности есть, как в первом случае, так и во втором. Я не гуру программирования и все изучал самостоятельно, а начинал, как и многие с Бейсика и ассемблера для ZХ Spectrum. Поэтому пропущу свои потуги при изучении особенностей JavaScript — в них ничего интересного нет. Чтобы было понятнее, я суммирую плюсы и минусы создания игр в отдельных списках.

Плюсы разработки игры:
  • Вся сцена собирается в редакторе, включая настройки физики и частиц.
  • Быстрый и легкий предпросмотр сцены в браузере нажатием одной кнопки.
  • Отличная событийная модель.
  • Поддержка билбордов.
  • Заготовки на уровне сцены: вода, окружение, атмосфера, динамическая смена дня и ночи, и все в таком роде.
  • Большое количество готовых функций-заготовок в API (например, прелоадер, движение персонажа и т.д.).
  • Кто бы что не говорил, но проблем с производительности, как первой игры, так и второй я не наблюдаю. Это касается и мобильных систем.

Минусы разработки игры:
  • Абсолютно нет поддержки спрайтовой анимации. Ее можно сделать, только воспользовавшись нодами Blender, но этот подход трудоемкий и не всегда оправдан.
  • Не всегда ты видишь в окне Blender, то, что получится. Приходится конечный результат просматривать в браузере. Это касается, например, частиц или некоторых настроек материалов.
  • Несоответствие координат в сцене Blender и в WebGl. Правда с этим похоже придется смириться. Такова уж особенность системы координат Blender.
  • Отсутствие взаимосвязи объектов в Blender и скриптами. Я вот как-то привык, что каждый объект обслуживается своим скриптом (это можно сделать вручную в коде). Но хотелось бы создать объект в Blender, присоединить к нему скрипт в панели и спокойно вызвать его на редактирование нажатием кнопки.


Опять-таки учтите, что все это применительно к индивидуальным проектам и основывается на моем личном мнении.

В начале своей статьи я упоминал о публикации планов на 2016 год на официальном сайте разработчиков. Среди прочего есть несколько интересных моментов: разработка библиотеки материалов, существенная корректировка документации про API и, разумеется, новые функции. Однако, куда интереснее звучит заявление: “Мы намерены существенно пересмотреть нашу политику в части взаимодействия с аудиторией… принять участие в большом количестве конференций и выставок, а также организовать свою собственную...”. Это показывает, что ребята решили выйти из тени и всерьёз заняться продвижением Blend4Web в массы и развитие движка пойдет еще быстрее.

Комментарии (7)


  1. gfxdevrus
    29.01.2016 11:22
    +3

    Хорошая статья, спасибо. Хочу добавить по поводу цены лицензии — нас ругают за то, что дорого — 36000 руб., но это для стран ЕАЭС (Россия, Белоруссия, Казахстан...). Мы не повышали цену с момента релиза в марте 2014 года. Для прочих стран лицензия стоит 990 долларов — получается более чем в два раза дороже.


  1. lllypyn
    29.01.2016 12:49

    На сколько я помню в Blender есть свой игровой движок, игровая логика и даже редактор скриптов. Планируется ли как то использовать это?


    1. gfxdevrus
      29.01.2016 14:25

      Сложный вопрос. В самом начале, когда решалось, на какую из систем блендера опираться — вьюпорт или игровой движок, мы выбрали вьюпорт. Сейчас нам кажется, что выбор был правильным. Встроенный игровой движок маломощный, тормознутый, скриптится на питоне (а нам нужен javascript), слишком «классический» для веба. Так что мы пошли своим путем.


      1. lllypyn
        29.01.2016 15:16
        +1

        я когда пытался изучать ваш движок чисто интуитивно указывал все движения персонажа как раз через инструмент игровой логики, сенсоры и всё такое :) был уверен что будет работать. Но увы, всё оказалось сложнее для меня. Кстати, а текстовый редактор в самом блендере разве не позволит писать и сохранять в нём javascript?


        1. gfxdevrus
          29.01.2016 15:23

          Конечно, во встроенном редакторе можно писать текст программы на любом языке. Но сейчас разработчики блендера склоняются к мысли объединения возможностей игрового движка с вьюпортом. Разработка самостоятельного игрового движка признана малоперспективным делом — нет ресурсов для этого. Blend4Web по возможностям уже превзошел BGE, например, узловой редактор логики позволяет программировать достаточно серьезные вещи без единой строчки кода.


          1. lllypyn
            29.01.2016 15:32

            Подскажите где можно почитать/посмотреть на тему этого самого узлового редактора. Я как непрограммист заинтригован.


            1. Prand
              29.01.2016 16:04
              +2

              Вот видео по началу работы с нодами: www.youtube.com/watch?v=3PJmTQ_jAB8
              А вот документация по нодам: www.blend4web.com/doc/ru/logic_editor.html

              А так мне кажется, что большая часть официальных демо на сайте сделана с использованием логических нод.