Генерация Земли в Unreal Engine
Введение
Всем добрый день!
В этом блоге мы хотели бы рассказать о нашем плагине SynTerra для генерации Земли в Unreal Engine. Но перед тем как начать, стоит немного рассказать о предыстории создания этого проекта.
Изначально наша команда сформировалась на базе проектов по созданию авиационных тренажёров и симуляторов — ещё задолго до появления таких терминов, как «цифровые двойники», «цифровые тени» и других. В начале нулевых мы были сильно ограничены в выборе программных инструментов, в том числе и 3D-движков. Unreal Engine и Unity тогда ещё не поддерживали 64-битные координатные системы, что, в свою очередь, серьёзно ограничивало возможности создания больших территорий в масштабах стран, континентов и даже всей планеты. На рынке существовали только нишевые продукты, такие как Presagis, VBS, MAK VR Forces и Prepar3D.
Однако как только в популярных движках Unity и Unreal Engine появилась поддержка создания больших территорий, вместе с этой технологией рынок поделили два гиганта из индустрии ГИС: ESRI ArcGIS и Cesium (ныне часть Bentley Systems).
Несмотря на возможность плагинов ArcGIS и Cesium загружать в проект всю Землю, многие пользователи столкнулись с рядом проблем. Ниже перечислены основные недостатки:
- Земля всегда подгружается в формате online, и, соответственно, её нельзя редактировать непосредственно в проекте.
С одной стороны, это логичный подход к решению задачи, так как загрузить всю планету в проект действительно невозможно.
Однако далеко не всем пользователям это требуется: большинство работают только с определённой областью. - Следующий недостаток напрямую вытекает из предыдущего: отсутствие возможности хранить выбранную область Земли непосредственно в проекте не позволяет полноценно добавлять контент на ландшафт — такие как материалы поверхностей, растительность, здания, городскую инфраструктуру и другие элементы.
- Проекты на базе Cesium и ArcGIS зависят от скорости подключения к интернету и не могут быть запущены без доступа к сети.
Это ограничение особенно критично для организаций с высокими требованиями к кибербезопасности, где корпоративная сеть изолирована от глобальной. - Загрузка всей планеты в проект требует привязки нуля координат к центру Земли и использования смещений относительно абсолютной и относительной координатных систем. Это, в свою очередь, накладывает ряд ограничений на перемещение обозревателя между локациями на больших дистанциях — более одного геодезического градуса (ориентировочно 111 км, в зависимости от географического положения).
- Постоянное переключение между уровнями детализации (LOD) поверхности Земли на больших расстояниях между игроками не позволяет полноценно реализовать многопользовательский режим в проекте.
- Несмотря на различия в бизнес-моделях, и Cesium, и ArcGIS являются платными сервисами.
При необходимости создать проект формата White Label (без логотипов) и без дополнительных ограничений, стоимость решений достигает нескольких тысяч долларов за лицензию.
В случае, если пользователи захотят самостоятельно создать проект без применения перечисленных выше плагинов, с ландшафтом на основе реальных геоинформационных данных и реальной локацией, им потребуется знание в области ГИС, доступ к спутниковым данным, а также настройка множества параметров как в самих данных, так и в проекте. В результате для выполнения такой задачи потребуются значительные ресурсы: нишевые специалисты в области ГИС, большое количество часов на разработку, оптимизацию и настройку. На основе нашего опыта, для создания подобного проекта требовались месяцы работы команды из минимум пяти человек и существенный бюджет на закупку спутниковых данных.
Понимая, что этот процесс можно автоматизировать и предоставить пользователям возможность сгенерировать ландшафт по выбранной локации нажатием одной кнопки, мы решили создать плагин SynTerra.
Применение плагина SynTerra
Далее приведем описание по интеграции SynTerra в проект Unreal Engine. На момент публикации статьи, плагин SynTerra поддерживает Unreal Engine версии 5.5. После того как сам плагин уже скачан с маркетплейса FAB (https://fab.com/s/bb8df9b2a6ab), рекомендуется при создании проекта использовать шаблон Simulation, т.к. в нем по умолчанию применяются уже все необходимые ассеты:
В созданном проекте добавляем плагин обычным способом через меню Settings / Plugins и перезагружаем Unreal Engine:
В результате в горизонтальном меню появится кнопка вызова плагина SynTerra:
В окне необходимо пройти регистрацию нового пользователя с указанием почты и пароля:
В появившемся новом окне SynTerra можно увидеть всю карту Мира (отображается на основе OpenStreetMap):
При приближении карты появляется синия сетка разбивающая Землю на отдельные локации (далее тайлы):
Размер каждого тайла составляет 30x30 км. Размер тайла обсуловлен разрешением спутниковых снимков Sentinel 2 применяющихся в SynTerra в 10 метров на пиксель и разрешением цифровой модели Земли (Digital Elevation Model) в 30 метров на пиксель (полигон).
Выбор тайла осуществляется путем нажатия левой кнопкой мыши, также, левой кнопкой мыши можно и отменить выбор тайла. Выбранные тайлы подсвечены оранжевым цветом:
Описание выбора настроек плагина
- User name: имя пользователя при регистрации.
- EMail: почтовый адрес указанный при регистрации.
- Current limit: количество оставшихся тайлов Земли. На текущий момент лимит в три тайла обусловлен ограничениями со стороны использования облака на AWS S3 где мы храним все данные на планету (архитектуру SynTerra мы опишем в следующей публикации).
- Geodetic: начало координат (XYZ) проекта совпадает с центром Земли и совместим со стандартом WGS84 (World Geodetic Standard 1984). Эта опция делает плагин SynTerra полностью совместимым с такими плагинами как Cesium и ArcGIS.
- Local: начало координат (XYZ) проекта совпадает с левым нижним углом выбранного тайла (выбранного набора тайлов).
- Number of tiles: количество выбранных тайлов.
- Automatically add tiles to scene: автоматически загружает mesh и текстуры выбранного ландшафта Земли в проект.
- Add microtextures: добавляет микротектуру, при приближении к поверхности Земли можно наблюдать типовую текстуру Земли на основе спутниковых данных классификации Land Cover Sentinel 2. Всего 8 типов поверхности Земли: трава, болотистая местность, тундра, застроенная территория (асфальт/бетон), песок, лес, снег/лед, поле.
- Generate tiles: кнопка для генерации выбранных тайлов.
Далее нажимаем кнопку Generate tiles и начинается процесс скачивания выбранной локации с облака и генерация ландшафта с текстурированием на стороне клиента (пользователя):
В результате в проекте создается локация из выбранных тайлов с учетом предварительно выбранных настроек:
В случае выбранной опции Add microtextures можно наблюдать плавное переключение между спутниковыми снимками и типовой текстурой при приближении к поверхности земли. Это помогает избегать "пиксельности" поверхностей, типичных для ландшафтов с применением спутниковых данных:
Дальнейшее развитие проекта
Как видно из данной публикации, мы стремились создать инструмент для генерации ландшафта Земли с максимально простым подходом в формате «одной кнопки». Плагин доступен для бесплатного скачивания на официальной странице маркетплейса FAB по ссылке ниже:
https://fab.com/s/bb8df9b2a6ab
Мы надеемся что SynTerra поможет разработчикам в создании новых проектов по таким направлениям как:
- Симуляторы и тренажеры
- Геймдев
- Цифровые двойники
- ГИС приложения
- И многие другие направления где требуется ландшафт Земли
В следующих публикациях нашего блога мы расскажем об архитектуре инструмента и его дальнейшем развитии.