Представляем новый релиз 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 октября.