Камера Unity в AR-сценах
AR-опыт в Unity зависит от камеры. В этой статье объясняется роль камеры в AR-сценах и то, как session управляет свойствами камеры, чтобы обеспечить корректный AR-опыт.
Перед началом
- Изучите базовые понятия, компоненты и рабочий процесс session в Введении в ARSession.
Роль камеры в AR-сценах
В Unity камера используется для отображения игрового мира игроку, но в AR-сценах ее роль еще важнее. Она не только рендерит виртуальный контент, но и должна выравниваться с реальным миром, чтобы виртуальные объекты корректно накладывались на реальную сцену.
Это видео показывает простую AR-сцену. Слева находится вид
Scene, справа - видGame. Видео было записано в режимеPlayв Unity Editor с использованием simulation data. Содержимое в видеGameтакое же, как видит пользователь на телефоне в реальном мире.В этом видео камера, представляющая пользователя (значок камеры), движется в соответствии с движением пользователя в реальном мире. Белый конус показывает положение и ориентацию камеры за прошедший период. В виде
Gameкамера не только показывает виртуальный контент из видаScene, но и накладывает изображение реального мира в нижней части виртуального контента. Это типичное поведение камеры в AR-сцене.
Чтобы виртуальные объекты корректно накладывались на реальную сцену, некоторые свойства камеры нужно настраивать в соответствии с состоянием выполнения AR. Эти свойства включают:
- transform камеры (позиция и ориентация)
- field of view (FOV), aspect ratio и projection matrix камеры
- настройки culling камеры (
<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>)
Предупреждение
При разработке приложения изменять эти свойства на session camera не поддерживается, потому что это может привести к некорректному выравниванию виртуального контента с реальным миром и повлиять на пользовательский опыт. Даже если эти свойства будут изменены каким-либо способом, AR-система перезапишет эти изменения во время выполнения, либо может возникнуть непредсказуемое поведение из-за несоответствия между отрисованными и вычисленными данными.
В зависимости от объекта, который управляет этими свойствами, камера, используемая session, может быть двух типов: камера под управлением session и камера не под управлением session.
Камеры под управлением session
Если session camera не принадлежит какой-либо внешней системе, например гарнитуре или AR Foundation, session автоматически управляет указанными выше свойствами камеры, чтобы она была правильно выровнена с реальным миром.
transform
Transform камеры (позиция и ориентация) session корректирует в соответствии с состоянием выполнения AR-функции. Обычно session обновляет позицию и ориентацию камеры на основе данных motion tracking и/или данных tracking target, чтобы контент, видимый пользователю, соответствовал реальному миру.
В Unity центральная точка отсчета для всего AR-tracking называется session origin, а правило, определяющее этот origin во время выполнения session, называется center mode. Поведение transform камеры различается в разных center mode:
В center mode
<xref:u:easyar.ARSession.ARCenterMode.Camera>камера может свободно перемещаться.Обычно mode
<xref:u:easyar.ARSession.ARCenterMode.Camera>редко используется приложениями.В других center mode, например
<xref:u:easyar.ARSession.ARCenterMode.FirstTarget>, камера не может свободно перемещаться.<xref:u:easyar.ARSession.ARCenterMode.FirstTarget>- это режим, используемый большинством AR-приложений.
Предупреждение
Масштаб transform камеры всегда должен оставаться (1, 1, 1). Изменение масштаба камеры может привести к непредсказуемому поведению.
Projection matrix
Projection matrix камеры обновляется каждый кадр session в соответствии с intrinsics физической камеры, чтобы виртуальный контент корректно накладывался на реальную сцену.
Настройки culling
Настройки culling камеры (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>) корректируются в соответствии с настройками mirror session, чтобы виртуальный контент правильно рендерился в реальной сцене.
Когда параметр, соответствующий текущей камере в <xref:u:easyar.ARSession.HorizontalFlip>, равен <xref:u:easyar.ARSession.ARHorizontalFlipMode.World>, <xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType> устанавливается в true. Это конфигурация по умолчанию для front camera.
Фоновый видеопоток AR
В AR-сценах камера обычно рендерит видеопоток с физической камеры в качестве фона для усиления эффекта погружения. Session автоматически обрабатывает получение и рендеринг видеопотока и обеспечивает его правильное выравнивание с виртуальным контентом.
Камеры не под управлением session
При использовании гарнитуры или AR Foundation, а также когда в реализации для <xref:u:easyar.FrameSource> указано <xref:u:easyar.FrameSource.IsCameraUnderControl> как false, session не управляет указанными выше свойствами камеры. Вместо этого ими управляет внешняя система.
Предупреждение
Хотя в этом случае session не управляет свойствами камеры, ими все равно управляет сторонняя система, например SDK гарнитуры или AR Foundation, поэтому изменять эти свойства во время разработки по-прежнему не поддерживается.
Что учитывать при копировании камер
Иногда может потребоваться скопировать параметры session camera на другую камеру. В этом случае обратите особое внимание на два момента:
- Время получения свойств: при использовании управляемой камеры см. Получение результата session, чтобы получить эти параметры в нужный момент; при использовании камеры, не управляемой session, см. документацию сторонней системы, чтобы получить их в нужный момент.
- Field of view (FOV), aspect ratio и projection matrix камеры: используйте
<xref:UnityEngine.Camera.projectionMatrix?displayProperty=nameWithType>, чтобы получить projection matrix камеры и скопировать ее в другую камеру.<xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType>и<xref:UnityEngine.Camera.aspect?displayProperty=nameWithType>математически являются частью projection matrix, поэтому одного использования<xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType>и<xref:UnityEngine.Camera.aspect?displayProperty=nameWithType>недостаточно.
Следующие шаги
- Прочитайте Конфигурация камеры, чтобы узнать, как настроить камеру для лучшего AR-опыта