Когда вы носите гарнитуру смешанной реальности, она становится центром голографического мира. Компонент камеры Unity автоматически обрабатывает стереоскопическую отрисовку и следует за движением головы и поворотом. Однако для полной оптимизации качества визуализации и стабильности голограммы необходимо задать параметры камеры, описанные ниже.
HoloLens и иммерсивные гарнитуры VR
Параметры по умолчанию для компонента камеры Unity предназначены для традиционных трехмерных приложений, которые нуждаются в фоновом режиме, так как они не имеют реального мира.
При запуске на иммерсивной гарнитуре вы отрисовываете все, что видит пользователь, и поэтому, скорее всего, вы хотите сохранить небо.
Тем не менее, при запуске на голографической гарнитуре, как HoloLens, реальный мир должен отображаться за всем, что камера отрисовывает. Задайте фон камеры прозрачным (в HoloLens, черный отрисовывается как прозрачный) вместо текстуры Skybox:
Выбор основной камеры на панели иерархии
На панели инспектора найдите компонент камеры и измените раскрывающийся список "Очистить флаги" с Skybox на "Сплошной цвет"
Выберите средство выбора цвета фона и измените значения RGBA на (0, 0, 0, 0, 0)
Если этот параметр задан из кода, можно использовать Unity Color.clear
MRTK автоматически обрабатывает определенные параметры камеры на основе конфигурации в профиле системы камеры.
Пространство имен:Microsoft.MixedReality.Toolkit.CameraSystem Тип:MixedRealityCameraSystem
Чтобы проверить непрозрачность камеры, система MixedRealityCamera имеет IsOpaque свойство.
CoreServices.CameraSystem.IsOpaque;
Пространство имен:UnityEngine.XR Тип:XRDisplaySubsystem
С помощью кода скрипта можно определить, является ли гарнитура иммерсивной или голографической, проверив displayOpaque в активно работающей системе XRDisplaySubsystem.
Пространство имен:UnityEngine.XR.WSA Тип:HolographicSettings
С помощью кода скрипта можно определить, является ли гарнитура иммерсивной или голографической, проверив HolographicSettings.IsDisplayOpaque.
Настройка камеры
Независимо от того, какой интерфейс вы разрабатываете, основная камера всегда является основным компонентом стереорисовки, подключенным к головному экрану устройства. Вам будет проще выложить приложение, если вы представляете начальную позицию пользователя как (X: 0, Y: 0, Z: 0). Так как основная камера отслеживает перемещение головы пользователя, начальная позиция пользователя может быть задана, задав начальную позицию основной камеры.
Главный выбор, который необходимо сделать, заключается в том, разрабатываете ли вы для HoloLens или vr иммерсивные гарнитуры. После этого перейдите к каждому разделу установки.
Настройка камеры HoloLens
Для приложений HoloLens необходимо использовать привязки для любых объектов, которые необходимо заблокировать в среде сцены. Рекомендуется использовать неограниченное пространство для максимальной стабильности и создания привязок в нескольких комнатах.
Выполните этот пошаговый учебник, чтобы добавить и автоматически настроить набор средств Смешанная реальность в проекте Unity. Кроме того, можно работать непосредственно с классом MixedRealityPlayspace из MRTK для Unity и задать целевой масштаб в мире:
MRTK должен автоматически обрабатывать положение пространства воспроизведения и камеры, но это хорошо, чтобы дважды проверить:
На панели "Иерархия" разверните объект MixedRealityPlayspace GameObject и найдите дочерний объект основной камеры
На панели инспекторанайдите компонент преобразования и измените положениена (X: 0, Y: 0, Z: 0)
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
Вы можете использовать ARSession для приложений HoloLens, что лучше работает с привязками и ARKit/ARCore.
Внимание
Для сеанса AR и связанных функций требуется установка AR Foundation.
Кроме того, можно вручную применить изменения камеры без использования ARSession:
Выбор основной камеры на панели "Иерархия"
На панели инспекторанайдите компонент преобразования и измените положениена (X: 0, Y: 0, Z: 0)
Камера в области инспектора в Unity
Добавление TrackedPoseDriver в основную камеру
Выбор основной камеры на панели "Иерархия"
На панели инспекторанайдите компонент преобразования и измените положениена (X: 0, Y: 0, Z: 0)
Камера в области инспектора в Unity
Перейдите в раздел "Другие параметры" в разделе "Параметры проигрывателя Магазина Windows"
Выберите Windows Смешанная реальность в качестве устройства, которое может быть указано как Windows Holographic в более ранних версиях Unity
Выбор поддерживаемой виртуальной реальности
Так как объект Main Camera автоматически помечен как камера, Unity выполняет все перемещение и перевод.
Примечание.
Эти параметры необходимо применить к камере в каждой сцене приложения.
По умолчанию при создании новой сцены в Unity он будет содержать main Camera GameObject в иерархии, которая включает компонент камеры, но может не применять параметры должным образом.
Настройка камеры VR
Windows Смешанная реальность поддерживает приложения в широком диапазоне масштабируемых возможностей, от приложений только для ориентации и масштабируемых приложений до масштабируемых приложений. На HoloLens вы можете идти дальше и создавать мировые приложения, которые позволяют пользователям пройти более 5 метров, изучая весь этаж здания и за ее пределами.
Первый шаг в создании интерфейса смешанной реальности в Unity — определить, какой опыт масштабируется ваше приложение:
Возможности масштабирования помещений или стоячих возможностей
Примечание.
Если вы строите для HL2, мы рекомендуем создать интерфейс на уровне глаз или рассмотреть возможность использования службы "Понимание сцены", чтобы понять пол сцены.
Перейдите в раздел "Другие параметры" в разделе "Параметры проигрывателя Магазина Windows"
Выберите Windows Смешанная реальность в качестве устройства, которое может быть указано как Windows Holographic в более ранних версиях Unity
Выбор поддерживаемой виртуальной реальности
Так как объект Main Camera автоматически помечен как камера, Unity выполняет все перемещение и перевод.
Примечание.
Эти параметры необходимо применить к камере в каждой сцене приложения.
По умолчанию при создании новой сцены в Unity он будет содержать main camera GameObject в иерархии, которая включает компонент камеры, но не имеет параметров, приведенных ниже.
Пространство имен:UnityEngine.XR Тип:XRDevice
Для постоянного или горизонтального масштабирования помещений вам потребуется разместить содержимое относительно пола. Причина в этаже пользователя с помощью пространственного этапа, представляющего определенный пользователем источник уровня пола и необязательную границу комнаты, настроенную во время первого запуска.
Чтобы убедиться, что Unity работает со своей системой координат мира на уровне этажа, можно установить и проверить, что Unity использует тип пространства отслеживания RoomScale:
if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
// RoomScale mode was set successfully. App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
// RoomScale mode was not set successfully. App cannot make assumptions about where the floor plane is.
}
Если SetTrackingSpaceType возвращает значение true, Unity успешно переключила свою систему координат мира для отслеживания эталонной рамки этапа.
Если SetTrackingSpaceType возвращает значение false, Unity не удалось переключиться на промежуточный кадр ссылок, скорее всего, потому что пользователь не настроил пол в своей среде. Хотя ложное возвращаемое значение не является общим, это может произойти, если этап настроен в другой комнате, и устройство перемещается в текущую комнату без настройки пользователем нового этапа.
После успешного установки типа пространства отслеживания RoomScale содержимое, размещенное на плоскости y=0, появится на полу. Источник от 0, 0, 0 будет конкретное место на полу, где пользователь стоял во время настройки комнаты, с -Z, представляющее направление вперед, которое они сталкиваются во время установки.
Перейдите в раздел "Другие параметры" в разделе "Параметры проигрывателя Магазина Windows"
Выберите Windows Смешанная реальность в качестве устройства, которое может быть указано как Windows Holographic в более ранних версиях Unity
Выбор поддерживаемой виртуальной реальности
Так как объект Main Camera автоматически помечен как камера, Unity выполняет все перемещение и перевод.
Примечание.
Эти параметры необходимо применить к камере в каждой сцене приложения.
По умолчанию при создании новой сцены в Unity он будет содержать main camera GameObject в иерархии, которая включает компонент камеры, но не имеет параметров, приведенных ниже.
Пространство имен:UnityEngine.XR Тип:XRDevice
Чтобы создать интерфейс только для ориентации или горизонтального масштабирования, необходимо задать для Unity тип пространства для отслеживания на станции. Неустанное пространство отслеживания задает мировую систему координат Unity для отслеживания неподвижного кадра ссылок. В режиме отслеживания на станции содержимое, размещенное в редакторе, непосредственно перед расположением камеры по умолчанию (вперед — -Z), появится перед пользователем при запуске приложения.
Пространство имен:UnityEngine.XR Тип:InputTracking
Для чистого интерфейса только для ориентации, например 360-градусного видеозрителя (где позиционные обновления головы разрушают иллюзию), можно затем задать XR. InputTracking.disablePositionalTracking to true:
InputTracking.disablePositionalTracking = true;
Для взаимодействия с масштабируемым масштабированием, чтобы разрешить пользователю позже более поздний источник места, можно вызвать XR. Метод InputTracking.Recenter:
Если вы используете MRTK, фон камеры автоматически настраивается и управляется. Для пакетов SDK XR или устаревших проектов WSA рекомендуется установить фон камеры на твердый черный цвет на HoloLens и сохранить небо для виртуальной реальности.
Использование нескольких камер
При наличии нескольких компонентов камеры в сцене Unity знает, какую камеру следует использовать для стереоскопической отрисовки на основе того, какой тег GameObject имеет тег MainCamera. В устаревшем XR этот тег также используется для синхронизации отслеживания головы. В пакете SDK XR отслеживание головы управляется скриптом TrackedPoseDriver, подключенным к камере.
Общий доступ к буферам глубины
Общий доступ к буферу глубины приложения в Windows каждый кадр даст вашему приложению один из двух повышений стабильности голограммы на основе типа отрисовки гарнитуры:
Иммерсивные гарнитуры VR могут заботиться о позиционной повторной подготовке при предоставлении буфера глубины, корректируя голограммы для неправильного представления как в позиции, так и в ориентации.
Гарнитуры HoloLens имеют несколько различных методов. HoloLens 1 автоматически выбирает точку фокуса при предоставлении буфера глубины, оптимизируя стабильность голограммы вдоль плоскости, которая пересекает наибольшее содержимое. HoloLens 2 стабилизирует содержимое с помощью глубины LSR (см. примечания).
Диалоговое окно конфигурации MRTK попытается задать параметры буфера глубины для пакета SDK XR и устаревшей версии WSA, но это хорошо, чтобы проверить эти вкладки и проверить параметры в Unity.
Чтобы задать, будет ли приложение Unity предоставлять буфер глубины в Windows:
Перейдите к разделу "Изменить>параметры>проекта XR Plug-in Management" и убедитесь, что элемент меню развернут.
Щелкните пункт меню, соответствующий выбранной среде выполнения XR, либо Windows Смешанная реальность или OpenXR. Кроме того, убедитесь, что выбрана правильная платформа сборки, так как доступны вкладки для автономного и универсальная платформа Windows Windows.
Включение и настройка:
Для OpenXR выберите формат глубины или "Нет" в раскрывающемся списке "Режим отправки глубины".
Для Windows Смешанная реальность установите или снимите флажок "Общий буфер глубины". Затем выберите формат в раскрывающемся списке "Формат буфера глубины".
Примечание.
Обычно рекомендуется использовать 16-разрядные буферы глубины для повышения производительности. Однако если используется 16-разрядный формат глубины, буфер наборов необходимых эффектов (например, некоторые панели прокрутки пользовательского интерфейса Unity) не будет работать, так как Unity не создает буфер наборов элементов в этом параметре. При выборе 24-разрядного формата глубины обычно создается 8-разрядный буфер элементов, если применимо к графической платформе конечной точки.
Чтобы задать, будет ли приложение Unity предоставлять буфер глубины в Windows:
Перейдите к разделу "Изменить>параметры>проекта">универсальная платформа Windows вкладка>"Параметры XR".
Разверните элемент пакета SDK для Windows Смешанная реальность.
Установите или снимите флажок "Включить общий доступ к буферу глубины". Включение общего доступа к буферу глубины по умолчанию проверяется в новых проектах, но может быть снято по умолчанию в старых проектах.
Буфер глубины может улучшить качество визуального отображения до тех пор, пока Windows может точно сопоставить нормализованные значения глубины на пиксель в буфере глубины обратно к расстояниям в метрах, используя ближайшие и дальние плоскости, которые вы установили в Unity на главной камере. Если отрисовка передает значения глубины обработки типичными способами, вы должны быть хорошо здесь, хотя полупрозрачный отрисовка передает данные в буфер глубины, показывая через существующие цветовые пиксели, могут запутать повторное создание. Если вы знаете, что проходы отрисовки будут оставлять многие из конечных пикселей глубины с неточными значениями глубины, скорее всего, вы получите лучшее визуальное качество, снимите флажок "Включить общий доступ к буферу глубины".
Примечание.
Обычно рекомендуется использовать 16-разрядные буферы глубины для повышения производительности. Однако если используется 16-разрядный формат глубины, буфер наборов необходимых эффектов (например, некоторые панели прокрутки пользовательского интерфейса Unity) не будет работать, так как Unity не создает буфер наборов элементов в этом параметре. При выборе 24-разрядного формата глубины обычно создается 8-разрядный буфер элементов, если применимо к графической платформе конечной точки.
Использование отрезки плоскостей
Содержимое отрисовки слишком близко к пользователю может быть неудобно в смешанной реальности. Вы можете настроить ближайшие и дальние плоскости клипов на компоненте камеры.
Выбор основной камеры на панели иерархии
На панели инспекторанайдите компонент камеры, вырезая плоскости, и измените текстовое поле "Рядом" с 0,3 на 0,85. Содержимое, отрисованное еще ближе, может привести к дискомфорту пользователя и следует избежать для рекомендаций по расстоянию отрисовки.
MRTK предоставляет встроенную систему телепорта, которая автоматически работает между сформулированными руками и контроллерами.
Рекомендуется использовать реализацию телепортации MRTK.
Если вы решили не использовать MRTK, Unity предоставляет реализацию телепортации в наборе средств взаимодействия XR.
Если вы решили реализовать собственный, хорошо помнить, что вы не можете перемещать камеру напрямую. Из-за управления камерой Unity для отслеживания головы вам потребуется дать камере родитель в иерархии и переместить этот GameObject вместо этого. Это эквивалент пространства Playspace MRTK.
Рекомендуется использовать реализацию телепортации MRTK.
Если вы решили реализовать собственный, хорошо помнить, что вы не можете перемещать камеру напрямую. Из-за управления камерой Unity для отслеживания головы вам потребуется дать камере родитель в иерархии и переместить этот GameObject вместо этого. Это эквивалент пространства Playspace MRTK.
Режимы повторной подготовки
Как HoloLens, так и иммерсивные гарнитуры будут повторно проецировать каждый кадр, отрисовываемый приложением, чтобы настроить любое неправильное представление фактической позиции головы пользователя при создании фотонов.
По умолчанию:
Иммерсивные гарнитуры виртуальной реальности будут заботиться о позиционной повторной подготовке, если приложение предоставляет буфер глубины для заданного кадра. Иммерсивные гарнитуры также будут настраивать голограммы для неправильного прогнозирования в позиции и ориентации. Если буфер глубины не указан, система исправит только неправильные представления в ориентации.
Голографические гарнитуры , такие как HoloLens 2, будут заботиться о позиционной повторной подготовке, независимо от того, предоставляет ли приложение буфер глубины или нет. Позиционный перепроектирование возможно без буферов глубины в HoloLens, так как отрисовка часто разрежена с стабильным фоном, предоставляемым реальным миром.
Например, если вы создаете интерфейс только для ориентации с жестко заблокированным содержимым (например, 360-градусное видеоконтентное содержимое), можно явно задать режим повторной подготовки только для ориентации, задав его для reprojectionMode.OrientationOnly.
Например, если вы создаете интерфейс только для ориентации с жестко заблокированным содержимым (например, 360-градусное видеоконтентное содержимое), можно явно задать режим повторной подготовки только для ориентации, задав его в HolographicReprojectionMode.OrientationOnly.
Следующий этап разработки
Если вы следите за процессом разработки Unity, который мы изложили, вы находитесь в разгар изучения основных стандартных блоков MRTK. Отсюда вы можете перейти к следующему стандартному блоку: