Cesium for Unity: Создавайте 3D-геопространственные приложения для веб-сайта

Брендан Дункан — инженер компании Unity Technologies, специализирующийся на веб-графике, внедряющий графический драйвер WebGL и WebGPU, используемый веб-плеером Unity.
Что такое Cesium для Unity?
Cesium для Unity — это мощный плагин, который интегрирует геопространственную платформу Cesium в движок Unity. Это позволяет разработчикам передавать в потоковой форме трехмерные модели рельефа, изображения и здания с высоким разрешением из Cesium ion или других источников. В результате появляется возможность создавать фотореалистичные виртуальные глобусы и подробные географические визуализации в проекте Unity.
Разработчики могут создавать и развертывать свои геопространственные 3D-приложения непосредственно в Интернете. Это крупное обновление, начиная с Cesium for Unity 1.20.0, объединяет мощь глобального 3D-контента Cesium с доступностью веб-развертывания Unity, устраняя необходимость в магазинах приложений или установках пользователя.
В своей основе плагин использует 3D-плитки Стандарт сообщества OGC, разработанный компанией Cesium. Этот открытый стандарт специально разработан для потоковой передачи огромных 3D геопространственных наборов данных. С его помощью можно визуализировать целые города, страны или даже полномасштабный цифровой двойник Земли, не перегружая память вашей системы или пропускную способность вашего пользователя.
Сочетание Cesium для Unity с веб-развертыванием открывает замечательные возможности. Пользователи могут исследовать сложные 3D-среды реального мира, имея всего лишь URL, что снижает барьер для широкого использования приложений и впечатлений. Это делает его идеальным решением для обучающих инструментов, визуализации городского планирования, интерактивных картографических впечатлений и многого другого.

Основные возможности для веб-развертывания
Cesium для Unity включает в себя возможности, которые особенно эффективны в веб-средах:
- Потоковая архитектура означает, что пользователям не нужно загружать все наборы данных сразу. Вместо этого, плитки изображений местности загружаются по мере навигации пользователя по сцене. Такой подход позволяет сократить время первоначальной загрузки и обеспечить плавную работу.
- Легкий доступ к отобранному 3D геопространственному контенту и 3D-плиточной системе, через интеграцию с облачными службами Cesium ion. Пользователи могут использовать глобальные данные о местности, включая Cesium World Terrain и Google Photorealistic 3D Tiles, а также изображения, здания и наборы данных фотограмметрии. Все это доступно одним щелчком с помощью встроенного интерфейса Cesium ion в редакторе Unity и может быть напрямую развернуто для пользователей в сети.
Приложения в реальном мире
Сочетание Cesium для Unity и Web открывает возможности для многих геопространственных приложений, таких как:
- Градостроители могут делиться интерактивными 3D-моделями городов с заинтересованными сторонами через простые веб-ссылки.
- Образователи могут создавать географические уроки, доступные для изучения, к которым ученики могут получить доступ с любого устройства.
- Команды по управлению чрезвычайными ситуациями можно визуализировать сценарии катастроф на точной местности без установки специализированного программного обеспечения.
- Туристические приложения пользователи могут виртуально исследовать места в фотореалистичном 3D.
- Застройщики могут демонстрировать свойства в географическом контексте.
- Исследователи можно создавать интерактивные визуализации данных, которые объединяют научные наборы данных с точным географическим представлением.
Начало работы с Cesium для Unity для веб-сайта
Если вы впервые знакомитесь с Cesium для Unity, следуйте инструкциям Краткое руководство по началу работы. После установки плагина настройте свой токен доступа к Cesium ion, добавьте компонент CesiumGeoreference для определения системы координат вашего мира и начните добавлять наборы плиток.
Для публикации в Интернете выполните следующие важные шаги:
Обновление до v1.20.0+: Убедитесь, что у вас установлена последняя версия пакета Cesium для Unity.
Используйте Unity 6+: Эти версии оптимизированы для современных стандартов WebGL и WebGPU.
Включение многопоточности: В настройках плеера для веб-сборки необходимо включить многопоточность нативного C/C++.
Увеличение лимитов памяти: Наборы плиток Cesium могут требовать много памяти. Возможно, потребуется увеличить лимит памяти веб-плеера, который можно установить до 4 ГБ.
Настройка заголовков сервера: При развертывании вашего проекта на веб-сервере ваш сервер должен включать в себя определенные заголовки COOP и COEP для включения многопоточности. Это требование безопасности.
Важно отметить, что поддержка веб-браузера в настоящее время классифицируется как «экспериментальная». Некоторые расширенные функции или наборы плиток с большим объемом памяти могут потребовать тщательной оптимизации для обеспечения хорошей производительности в рамках ограничений памяти браузера.
Техническое погружение: Перенос на веб
Компиляция для WebAssembly
Ядро Cesium Native написано на C++. Чтобы запустить этот код в браузере, его необходимо скомпилировать в WebAssembly с использованием инструментальной цепочки под названием Emscripten. Основная проблема заключается в том, что код Cesium обычно ориентирован на 64-битные платформы, в то время как поддержка WebAssembly в Unity в настоящее время является 32-битной. Это требует изменения кода, чтобы сделать его независимым от архитектуры. Кроме того, некоторые сторонние библиотеки, используемые в Cesium, требуют исправлений для обеспечения совместимости.
Реинжиниринг для многопоточности
Cesium для Unity в значительной степени зависит от многопоточности для потоковой передачи 3D-плиток без влияния на основную нить приложения. Однако веб-платформа Unity поддерживает многопоточность только для нативного кода C++, а не для управляемого кода C#. Специально для веб-версий был реализован пользовательский пул потоков C++, чтобы обойти это ограничение. Работа, требующая взаимодействия с Unity, например создание сеток, добавляется в очередь и выполняется в основном потоке, чтобы избежать ошибок памяти, сохраняя фоновую работу в нативном C++ и минимизируя влияние на основной поток.
Графические API: WebGL и WebGPU
Браузеры предлагают два основных API графики 3D: устоявшееся WebGL и более новое WebGPU. Cesium для Unity работает, создавая стандартные объекты Unity Mesh и Texture, оставляя работу по рендерингу на движок. Хотя они в значительной степени эквивалентны для рендеринга Cesium, существуют незначительные различия. Например, шейдер точки Cesium использует функции, доступные только в WebGPU, что означает, что для рендеринга облака точек требуется WebGPU. WebGPU также открывает доступ к другим продвинутым функциям Unity, таким как VFX Graph.
Особенности производительности в сети
Веб-версии, естественно, имеют другие характеристики производительности, чем нативные приложения. Cesium уже хорошо подходит для этих ограничений, с системами уровней детализации, которые автоматически регулируют качество для поддержания плавной частоты кадров. Его подход к потоковой передаче также является большим преимуществом, поскольку загружаются только видимые данные.
Однако разработчики должны учитывать ограничения WebAssembly. Скорость выполнения близка к скорости выполнения нативного приложения, но не идентична ей из-за использования изолированной среды выполнения. Веб-версии не могут напрямую обращаться к файловой системе, а объем памяти в настоящее время ограничен 32-битным значением (4 ГБ). Проекту, который хорошо работает на настольном компьютере, может потребоваться оптимизация, например, снижение качества или объема, чтобы он корректно работал в сети.

Будущее геопространственной информации в сети
По мере того, как технологии браузеров и WebAssembly продолжают развиваться, разрыв между производительностью веб-приложений и нативных приложений будет сокращаться. Cesium для Unity находится на передовой этой эволюции, позволяя разработчикам создавать геопространственные приложения, которые одновременно мощны и универсально доступны.
Эта комбинация креативного набора Unity, геопространственной платформы Cesium и возможностей Интернета открывает новые захватывающие возможности для разработчиков. От профессиональных инструментов визуализации до захватывающих образовательных материалов — это создает основу для создания точных и красивых 3D-миров в браузерах по всему миру.




