Полгода работы с Blend4Web. А стоит ли оно этого?

027c79a7860d4a6090fa03c512972101.jpg

В августе прошлого года я обратил внимание на интересный 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 и некоторые другие.

9afb9bd760f746b0a330d8d68806d50d.jpg

Это и есть пример внедренных опций 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 в массы и развитие движка пойдет еще быстрее.

© Habrahabr.ru