В этом примере демонстрируется использование сцены в Unreal Engine. Основная функция примера связана со сценой, однако в нем также используется слой прямоугольников для рендеринга внутриигрового меню с высоким качеством, она работает с аудио и предоставляет стереоскопический слой сквозной камеры.
Пример см. на GitHub. Также можно ознакомиться с проектом Phanto, в котором демонстрируется использование Scene API в игровом процессе смешанной реальности.
При запуске примера на гарнитуре Quest для создания захваченной модели сцены используются привязки сцены. Если пользователь ещё не создал модель сцены, приложение автоматически запускает процесс захвата и предлагает пользователю это сделать. Пользователи также могут вручную запустить процесс захвата из внутриигрового меню, которое предоставляет доступ к различным функциям актора сцены. Кроме того, пользователи могут создавать и бросать мячи, которые взаимодействуют с моделью сцены. Приложение включает стереоскопический слой сквозной камеры, позволяющий объединить виртуальные объекты сцены с физическим игровым пространством.
Элементы управления
Правая кнопка B — переключение внутриигрового меню
Правый курок — взаимодействие с внутриигровым меню.
Левая кнопка на рукоятке — создает мяч в позиции левого контроллера. Отпустите ее, чтобы бросить мяч.
Правая кнопка на рукоятке — создает мяч в позиции правого контроллера. Отпустите ее, чтобы бросить мяч.
Внутриигровое меню
Нажатие кнопки B на правом контроллере открывает или закрывает внутриигровое меню. В меню представлены различные опции.
В верхней части меню отображается статус модели сцены:
Is Scene Populated (Заполнена ли сцена) — загружен ли актор сцены моделью сцены;
Is Room Layout Valid (Корректен ли макет комнаты) — имеет ли захваченная модель сцены корректный макет комнаты (минимум четыре стены, потолок и пол).
Вы можете взаимодействовать с виджетами меню следующими способами:
Launch Scene Capture (Запуск захвата сцены) — запускает процесс захвата сцены. После выхода из него система повторно загружает актор сцены, чтобы отобразить изменения, выполненные при захвате сцены.
Populate Scene (Заполнить сцену) — заполняет актор сцены моделью сцены. Эта опция недоступна, если актор сцены уже заполнен.
Clear Scene (Очистить сцену) — очищает текущую загруженную модель сцены в акторе сцены. Если заполненного актора сцены нет, эта опция недоступна.
Hide/Show All (Скрыть/показать все) — переключает видимость всех элементов, составляющих модель сцены.
Вы можете создать физически симулируемый мяч, нажав и удерживая кнопку на рукоятке контроллера. Мяч отпускается, когда вы отпускаете кнопку. Система воспроизводит уникальные звуковые эффекты при создании мяча, его отскоке и уничтожении. Акторы мяча отслеживают линию от их текущей позиции до позиции гарнитуры в игровом мире. Если актор мяча обнаруживает, что другой актор из модели сцены его перекрывает, его цвет изменяется за счет использования динамического материала. Эта функция служит полезной визуальной подсказкой, указывая, что мячи находятся за скрытыми элементами сцены.
Акторы мячей, перекрытые столом (красные) и акторы мячей, находящиеся на столе (серые).
Детали реализации
Актор сцены
Система добавляет актор сцены на уровень. На следующем скриншоте показаны сведения о нем.
К актору сцены добавляется компонент OculusXRSceneGlobalMesh. Он отвечает за управление сеткой сцены.
Большинство взаимодействий с актором сцены происходит через UMG внутриигрового меню в разделе Click on Content Browser/Content Drawer (Нажмите на каталог контента/панель контента) > Content (Контент) > Blueprints > HUD. Например, следующий Blueprint вызывает актор сцены, чтобы запустить захват сцены, когда пользователь нажимает на кнопку Launch Scene Capture (Запустить захват сцены) в меню:
Система может отключать некоторые кнопки меню в зависимости от текущего состояния актора сцены. Например, кнопка Populate Scene (Заполнить сцену) становится неактивной, если актор сцены уже заполнен.
Внутриигровой пользовательский интерфейс использует слой прямоугольников, который компоновщик гарнитуры Quest объединяет с изображением. Это важно для обеспечения высокого качества отображения в гарнитуре; иначе интерфейс будет сильно "зазубренным” из-за сглаживания (подробнее см. в документации по стереоскопическим слоям). Кроме того, это позволяет отображать пользовательский интерфейс перед виртуальной сценой.
Эта логика реализована в объекте HUDActor (расположен в Content > Blueprints > HUDActor). Этот актор использует стереоскопический слой с фиксацией к миру. Он также использует компонент виджета, который отрисовывает интерфейс в стереоскопическом слое.
Переключение пользовательского интерфейса
Нажатие кнопки B на правом контроллере включает и выключает меню. Когда меню включается, система перемещает его перед пользователем. Логика реализована в функции Toggle Hud (Переключение индикаторной панели) в Blueprint уровня.
Взаимодействие с пользовательским интерфейсом
VR Character Actor (актор VR-персонажа) в Content > Blueprints > VRCharacter) имеет компонент Widget Interaction (Взаимодействие с виджетами) для взаимодействия с меню. Он также содержит статический актор сетки с цилиндрической сеткой, представляющей лазерный указатель контроллера. Этот лазерный указатель отображается, если меню активно и компонент Widget Interaction (Взаимодействие с виджетами) в данный момент не пересекается с меню. VR-персонаж делает это во время "тика события".
Когда компонент пересекает меню, логика UMG переносит значок курсора на меню. "Тик события" в UMG обрабатывает эту логику (Content > Blueprints > HUD).
Создание и уничтожение мячей
Нажатие курка на контроллере создает актор мяча. Логика создания реализована в функции Blueprint SpawnBall VR-персонажа. Система использует целочисленную переменную MaxNumBalls для ограничения количества создаваемых мячей. Если лимит достигнут, самый старый мяч уничтожается. Система также будет уничтожать мячи, которые падают за пределы игрового мира. Это регулируется настройкой Kill Z в параметрах игрового мира.
Функция SpawnBall также обрабатывает логику броска, срабатывающую при отпускании кнопки на рукоятке. После броска актор мяча начинает симулировать физику.
Окклюзия актора мяча
"Тик события" актора мяча отвечает за трассировку для обнаружения окклюзии и изменения свойств динамического материала (Content > Blueprints > BallActor).
Звуковые эффекты
Система воспроизводит звуковые эффекты при создании мяча, его уничтожении и столкновении с окружающей средой. Логика обработки звуков находится в акторе мяча.
Примечание. Убедитесь, что в настройках проекта задана правильная частота дискретизации, иначе возможны серьезные задержки звука. Для настройки перейдите в Project Settings (Настройки проекта) > Platform (Платформа) > Android > Audio (Аудио) и установите для параметра Audio Mixer Sample Rate (Частота дискретизации аудиомикшера) значение 48 000.
Слой сквозной камеры
Актор VR-персонажа содержит компонент Passthrough Layer (Слой сквозной камеры). Такая компоновка позволяет объединить модель сцены с реальным миром. Подробнее о слое сквозной камеры см. в обзоре сквозной камеры в Unreal.
Во внутриигровом меню имеется ползунок для регулировки прозрачности слоя сквозной камеры. Логика реализована в акторе HUD (находится в Content/Blueprints/HUD).