События

Релиз Blend4Web 16.10

2016-10-27

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

Поиск пути и навигационные меши

Особенно полезной эта возможность будет для разработчиков виртуальных торговых центров, музеев, интерактивных карт, а также игр с открытым пространством. Был реализован классический алгоритм A*, предназначенный для эффективного поиска кратчайшего пути с учётом стен или других препятствий.

Поиск пути основывается на так называемых навигационных мешах (navmesh), определяющих, какие именно части территории доступны персонажам, управляемым игроком или самой программой. Создавать навигационные меши можно как вручную, так и с помощью специального генератора, позаимствованного из Blender Game Engine.

Инструмент для построения навигационных мешей.

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

Настройки навигационных мешей расположены на вкладке Physics.

Программирование включает получение ID фрагмента навигационного меша, к которому принадлежит объект (меш может состоять из нескольких независимых «островов»):

var island = m_phys.navmesh_get_island(navmesh_obj, pos); 

...а также расчёт пути (в форме массива координат) между начальной и конечной точками пути:

var path = m_phys.navmesh_find_path(navmesh_obj, start_pos, dest_pos, island); 

Кроме того, рассчитанная траектория дополнительно сглаживается при помощи так называемого метода натяжения струны (string pulling). Но возможно также использовать и чистый алгоритм А*, в котором траектория соединяет центры треугольников. С дополнительными параметрами можно ознакомиться в документации по API.

А полный код вы можете изучить в соответствующем образце — достаточно запустить этот пример!

Нодовый редактор логики

Новая логическая нода, Set Camera Move Style, добавляет очень полезную возможность, неоднократно запрашиваемую нашими пользователями. Типичный случай применения этой ноды — переход от вида сверху к виду внутри. Теперь художник может создать такой переход самостоятельно, без какого-либо программирования. Взгляните на пример ниже:

Ещё одно важное нововведение: серьёзно усовершенствована нода JS Callback, которая применяется для вызова программной JavaScript-функции из логического дерева. Теперь эта нода переключается в «режим ожидания», если callback-функция сразу же возвращает значение true. Нода останется в этом режиме и не передаст управление дальше по логическому дереву до тех пор, пока функция не вернёт значение false. Мы использовали эту возможность в демо нашей увлекательной приключенческой игры, которая будет впервые показана на Blender Conference 2016. Не пропустите!

Нода JS Callback вызывает функцию move_to_target() и передаёт объект на её вход.

Оптимизация

Вот уже третий месяц подряд мы сосредоточены на оптимизации. Во-первых, отсечение невидимых объектов стало работать эффективней, так как ограничивающие объёмы для повёрнутых объектов теперь рассчитываются точнее.

Кроме того, мы серьёзно переработали формат данных геометрии, используемый для хранения информации о вершинах как в .bin-файлах, так и в памяти GPU. Точность большей части данных (например, нормалей, касательных, вершинных цветов и др.) снижена до уровня, минимально достаточного для корректного отображения 3D-моделей. Это уменьшает потребление памяти, увеличивает быстродействие и снижает размеры файла сцены. Не забудьте переэкспортировать сцены ваших проектов после установки обновления (это можно сделать одним кликом в менеджере проектов).

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

Разумеется, все эти меры привели к существенному росту FPS, которые мы традиционно измеряем на демо «Ферма», самом требовательном из наших приложений.

Менеджер проектов

Постепенно это веб-приложение становится неотъемлемой частью рабочего процесса Blend4Web. Мы приняли решение удалить из просмотрщика сцен глобальный список сцен (а также файл assets.json, на основе которого создавался этот список), поскольку список проектов теперь содержится в менеджере проектов.

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

Команда compile project переименована в build project, поскольку её функции не ограничиваются только компиляцией программного кода.

Список доступных команд управления проектом.

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

Мастер создания проектов стал одновременно и мощнее, и проще в использовании. Появился новый тип связки с движком — None, при выборе которого менеджер проектов не будет изменять проект во время сборки. Кроме того, удалена опция Update — её возможности перекрываются опцией Copy и функцией публикации менеджера проектов.

Настройки создания проекта.

Прочие улучшения

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

Теперь Blend4Web поддерживает весь спектр типов смешивания текстур для Environment освещения.

Появилась поддержка опции Sphere для источников света типа Point и Spot. Этот параметр контролирует дистанцию, на которой интенсивность света становится равной нулю.

По просьбам наших пользователей, в модуль API scenes добавлены новые методы get_fog_params() и set_fog_params(). Эти функции позволяют управлять параметрами тумана в сцене, в том числе его интенсивностью, глубиной и распределением.

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

А для того, чтобы сделать работу ещё удобней, на панель World добавлены кнопки для включения и отключения окружающей среды (раньше это можно было сделать только с помощью правой дополнительной вкладки окна просмотра). С помощью этих кнопок цвета неба можно увидеть прямо в окне просмотра.

Отображение фона можно включать и выключать с помощью этих кнопок.

Заключение

В соответствии с пожеланиями наших пользователей, начиная с этого релиза мы предлагаем "lite"-версии PRO и CE-пакетов наряду с обычными. "Lite"-версии не включают демо и обучающих примеров, а также в них отсутствуют исходные файлы документации и физического движка Bullet. Эти версии занимают гораздо меньше места, чем полноценный SDK, но при этом сохраняют почти все его функции (если только вы не вносите изменения в Bullet или собираете документацию) и хорошо подходят для быстрого обновления ваших проектов.

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

А тех, кто собирается посетить Blender Conference в Амстердаме (или смотреть её в онлайне), мы приглашаем на познавательную презентацию и семинар по разработке игр, которые наши разработчики проведут в эту cубботу, 29 октября.

Комментарии
27 окт. 2016 21:29
Хочется крикнуть вау, но и вроде как не совсем.

Спасибо, что добавили ноду изменения типа камеры.
Спасибо, что сделали лайт версию.
Спасибо за поправленную ноду Normal Map с ошибкой нееденичных значений.
Спасибо за услышанную просьбу о NLA для вертексной анимации.

Чем World Background не угодил в N панели? Вроде и под рукой и даже на той же стороне экрана, если юзать стандартную расстановку окон.
Поиск пути наверное очень редко юзаемая фишка будет.

По свету больше интересует наоборот равномерное незатухание, чем затухание. Как допустим равномерно осветить цех в две стороны? Спот так сильно не раскроешь, а если и выставить 178 градусов, то он будет светить перед собой очень сильно, по краям цеха слабо. Меш лайтов нет. Даже не знаю как выкручиваться. Пример ниже.


В цехе прожектор висит на каждой колонне, но поддерживается только 4 источника включая SSAO. Если учесть что лампа находится на каждой колонне, то свет можно считать равномерным на всем протяжении. Но сделать тени в обе стороны из центра на всю протяженность цеха не получится. Может лучше в эту сторону вдарить?

Менеджер проектов вообще темная лошадка. В руководстве так непонятно расписано, а тут еще и нововведения к нему. Особенно по типам собираемого проекта. Сейчас вроде чуть поправили в руководстве, мне понятней, но это наверное потому что уже перетыкал все варианты несколько раз и посмотрел что, куда и зачем копируется. Для первопроходцев будет "оххх".

С новой иерархией тоже непонятно как-то. "Все проекты теперь используют стандартную иерархие" это какую? Какая считается стандартной? Я в этом месяце освоил менеджер для меня там все нестандартно, все в куче папок по разным папкам. Привык вроде, закладок наделал, натестил типы собираемого проекта. Почему нельзя допустим Blend файлы хранить рядом с текстурами и ассетами? Зачем отдельная подпапка в соседней папке? Вроде с apps_dev нормально сделали, лежат скрипты, стили и после билда все прыгает в новую папку, где все сформировано. Может и ассетами сделать так же? Или вообще все сделать в одной папке, генерируется [project_name] внутри него blend файлы, папка скриптов, папка текстур, папка чего то еще и после компиляции все собирается другую папку. Так допустим это избавит от лишних бубнов при внедрении файла. Сейчас получается, что ты либо сразу создаешь проект под иерархию b4w, либо сидишь перекидываешь текстуры, переделываешь ссылки на линки и обновляешь все и просто так свой проект не внедришь. А с линками ой беда, особенно с прокси, на форуме несколько записей оставил и еще несколько не писал, все равно там не отвечают, что хотя бы увидели.

и т.д. и т.п
Спасибо что дочитали до этой строки.
27 окт. 2016 21:41
Нода камеры это круто, давно ждал. Теперь еще бы добавку в виде поддержки нескольких камер.

Поиск пути наверное очень редко юзаемая фишка будет.
Для игр самое то.
Думаю они впервую очереди под себя ее делали. Может нас ждет новая игра или продолжение Пятигора.

Меш лайтов нет. Даже не знаю как выкручиваться. Пример ниже.
ЛайтМапы? Или вам нужна фулл динамика?

Почему нельзя допустим Blend файлы хранить рядом с текстурами и ассетами?
Галочка Bundled Project и все файлы проекта будут в одной директории, Самое то для мини проектов и экспериментов.
27 окт. 2016 21:45
Или вообще все сделать в одной папке, генерируется [project_name] внутри него blend файлы, папка скриптов, папка текстур, папка чего то еще и после компиляции все собирается другую папку. Так допустим это избавит от лишних бубнов при внедрении файла.
Сам не понимаю от куда вечные сложности с путями…. Обеими руками за!
27 окт. 2016 21:51
А где кнопочка "обновить" в блендере?
27 окт. 2016 22:16
Для игр самое то.
Думаю они впервую очереди под себя ее делали. Может нас ждет новая игра или продолжение Пятигора.
Да я давно подразумеваю, что разработчики делают свои проекты и функциональность добавляют чисто под себя. Как Blender со сборкой гусбери.

ЛайтМапы? Или вам нужна фулл динамика?
Ну в идеале полная динамика нужна, краны ездят. Запечь слишком тяжело будет. У меня оптимизация там неплохая, что 10 инструкций анимированных весят 20мб и крутятся с телефона 58fps. А карта света на весь цех будет весить наверное больше всего проекта.



Галочка Bundled Project и все файлы проекта будут в одной директории, Самое то для мини проектов и экспериментов.
Да вот так и юзаю, сам свою иерахию замутил.


Но тогда непонятна надобность остальных вариантов и некой "стандартной иерархии", которая толком не пояснена, как многие вещи для разработчика логичны, а для пользователя половина кажется одинаковым.
Вот допустим стандартные вопросы:
External вариант используюет файлы движка из каталога deploy/apps/common/, при сборке копируется.
Copy - файлы движка прямо копируются в папку приложения из каталога deploy/apps/common/
Не одно ли и тоже? Причем хочу сказать, что к этому релизу дописали несколько строк, которые все равно ясности не внесли.
Compile вот тут я вообще затупил, зачем компилить движок, если он уже скомпилен, но мне пояснили, что это для мега программистов, которые решили сами дописать свои фичи в движок.
None нормально теперь и выглядит и описан, а Update у меня ассоциировался с Copy и я так же не понимал разницу.
И вот получается вроде написано в документации, а вроде как и нет.

С оптимизацией тоже, удобно иногда без обфускации работать, чтобы после передачи проекта можно было легко поправить, а не лезть в изначальный код и компилить заново. И хотелось бы вариант, ничего не трогать.

В итоге получается что юзать менеджер полезно для автоматического реекспорта сцен, но если у меня 10 инструкций, а я поменял что-то в одной, то я вручную эту одну и переэкспортирую. Да когда в главном файле линка что-то меняешь, то удобно сразу все переэкспоритровать.
27 окт. 2016 23:07
А карта света на весь цех будет весить наверное больше всего проекта.
Думаю если использовать ч/б карту не слишком большого разрешения будет норм или несколько карт. А если еще эти ч/б карты запаковать в каналы))).
Да и для мобилок можно часть эффектов отключать если не тянут.

Copy - файлы движка прямо копируются в папку приложения из каталога deploy/apps/common/
Не одно ли и тоже? Причем хочу сказать, что к этому релизу дописали несколько строк, которые все равно ясности не внесли.
Copy - это для экспериментов с движком. Можно создать локальную его копию и что угодно делать не трогая оригинал. Чисто для программистов.

В итоге получается что юзать менеджер полезно для автоматического реекспорта сцен, но если у меня 10 инструкций, а я поменял что-то в одной, то я вручную эту одну и переэкспортирую. Да когда в главном файле линка что-то меняешь, то удобно сразу все переэкспоритровать.
Самая удобная фишка для меня это простой способ переезда с старой версии sdk на новую.)
27 окт. 2016 23:56
Да и для мобилок можно часть эффектов отключать если не тянут.
Ну сейчас с такой графикой мобильник выдает 50-60fps
В каналы упаковывать не к чему т.к. для света нужна будет 8к текстура, у меня таких нет.
Да и опять же, весь кран тот что на скринах он перемещается, площадка двигается, все это дело подъезжает к месту работы, так что смысла в запекании не будет.


Copy - это для экспериментов с движком. Можно создать локальную его копию и что угодно делать не трогая оригинал.
Это наверное самый адекватный вариант. Зачем в принципе трогать оригинал?


Самая удобная фишка для меня это простой способ переезда с старой версии sdk на новую.)
И мне её сейчас обломали.
У меня проект был создан как Update, теперь после импорта в новую версию при нажатии на Info выдает ошибку.

Попытался создать новый проект, но при попытке создать проект "в одной папке", но нет варианта None или Copy. т.е. теперь нужно создавать проект типо Web Player Json и запихивать свои файлы, без возможности автообновлять движок при переезде на новую версию. Либо сидеть с ошибкой и обновлять движок вручную.
28 окт. 2016 12:35
Попытался создать новый проект, но при попытке создать проект "в одной папке", но нет варианта None или Copy. т.е. теперь нужно создавать проект типо Web Player Json и запихивать свои файлы, без возможности автообновлять движок при переезде на новую версию. Либо сидеть с ошибкой и обновлять движок вручную.

Наилучший способ решить данную проблему:

1. Создать новый проект (например, "copy").
2. Перенести туда все файлы за исключением скомпиленного движка (b4w.min.js).
3. Отредактировать все html файлы, т.е убрать ссылку на скомпиленный движок (<script type='text/javascript' src='b4w.min.js'></script>), и добавить ссылки на исходники (<script type="text/javascript" src="../../src/b4w.js"></script> и т.д.).
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.