Камера unity в ar-сценах
Камера в Unity играет ключевую роль в отображении AR-эффектов. Ниже вы узнаете о функции камеры в AR-сценах и о том, как сессия управляет её свойствами для обеспечения корректного AR-опыта.
Перед началом
- Ознакомьтесь с основными концепциями, компонентами и рабочим процессом сессии через Введение в ARSession.
Роль камеры в ar-сценах
Камера в Unity используется для демонстрации игрового мира игроку, а в AR-сценах её роль становится ещё важнее. Она отвечает не только за рендеринг виртуального контента, но и должна быть выровнена относительно реального мира, чтобы виртуальные объекты правильно накладывались на реальные сцены.
Это видео демонстрирует простую AR-сцену. Слева представление
Scene, справа -Game. Видео записано в режимеPlayредактора Unity с использованием данных симуляции. СодержимоеGameвида идентично тому, что пользователь видит в реальном мире на телефоне.Видно, что камера, представляющая пользователя (иконка камеры), перемещается в соответствии с его движением в реальном мире. Белый конус отображает траекторию положения и ориентации камеры за прошедший период времени. В
Gameвиде камера не только показывает виртуальный контент изSceneвида, но и накладывает изображение реального мира под виртуальным контентом. Это типичный способ работы камеры в AR-сценах.
Для правильного наложения виртуальных объектов на реальные сцены некоторые свойства камеры должны корректироваться в соответствии с состоянием работы AR. Эти свойства включают:
- Трансформ камеры (положение и ориентация)
- Поле зрения камеры (FOV), соотношение сторон (aspect ratio) и матрица проекции
- Настройки отсечения (GL.invertCulling)
Предупреждение
При разработке приложений изменение этих свойств камеры сессии не поддерживается, так как это может привести к неправильному выравниванию виртуального контента с реальным миром и ухудшить пользовательский опыт. Даже если эти свойства удастся изменить, AR-система перезапишет изменения во время работы или непредсказуемое поведение возникнет из-за несоответствия данных рендеринга и вычислений.
В зависимости от того, какой объект управляет этими свойствами, камеры, используемые сессией, делятся на два типа: управляемые сессией и неуправляемые сессией.
Камеры, управляемые сессией
Если камера сессии не принадлежит какой-либо внешней системе (например, гарнитуре или AR Foundation), то сессия автоматически управляет указанными свойствами камеры, чтобы обеспечить её правильное выравнивание с реальным миром.
Трансформ
Трансформ камеры (положение и ориентация) регулируется сессией на основе состояния работы AR-функций. Как правило, сессия обновляет положение и ориентацию камеры на основе данных отслеживания движения и/или данных отслеживания target, чтобы обеспечить соответствие видимого пользователем контента реальному миру.
В Unity центральная точка отсчета для всего AR-отслеживания называется центром сессии (session center), а правило, определяющее этот центр во время работы сессии, называется режимом центра (center mode). В разных режимах центра поведение трансформа камеры различается:
- В режиме центра Camera камера может свободно перемещаться. Режим Camera редко используется приложениями.
- В других режимах центра (например, FirstTarget) камера не может свободно перемещаться. FirstTarget - это режим, используемый большинством AR-приложений.
Предупреждение
Значение масштаба (scale) трансформа камеры всегда должно оставаться (1, 1, 1). Изменение масштаба камеры может привести к непредсказуемому поведению.
Матрица проекции
Матрица проекции камеры обновляется сессией каждый кадр на основе внутренних параметров физической камеры, чтобы обеспечить правильное наложение виртуального контента на реальные сцены.
Настройки отсечения
Настройки отсечения камеры (GL.invertCulling) регулируются в соответствии с настройками зеркального отображения сессии, чтобы обеспечить корректный рендеринг виртуального контента в реальных сценах.
Когда для текущей используемой камеры в HorizontalFlip установлено значение World, GL.invertCulling устанавливается в true. Это конфигурация по умолчанию для фронтальной камеры.
AR-видеопоток фона
В AR-сценах камера обычно рендерит видеопоток с физической камеры в качестве фона для усиления погружения пользователя. Сессия автоматически обрабатывает получение и рендеринг видеопотока, обеспечивая его правильное выравнивание с виртуальным контентом.
Камеры, не управляемые сессией
При использовании гарнитур, AR Foundation, а также при реализации FrameSource с указанием IsCameraUnderControl как false, сессия не управляет указанными свойствами камеры. Вместо этого за их контроль отвечает внешняя система.
Предупреждение
Хотя в этом случае сессия не контролирует свойства камеры, они управляются сторонними системами (например, SDK гарнитуры или AR Foundation). Изменение этих свойств во время разработки приложения по-прежнему не поддерживается.
Важные моменты при копировании камеры
Иногда может потребоваться скопировать параметры камеры сессии на другую камеру. При этом необходимо уделить особое внимание двум аспектам:
- Время получения свойств:
- При использовании управляемой камеры необходимо ссылаться на Получение результатов работы сессии, чтобы получить параметры в правильное время.
- При использовании камеры, не управляемой сессией, необходимо ссылаться на документацию сторонней системы, чтобы получить параметры в правильное время.
- Поле зрения (FOV), соотношение сторон (aspect ratio) и матрица проекции: Необходимо использовать Camera.projectionMatrix для получения матрицы проекции камеры и скопировать её на другую камеру. Использование Camera.fieldOfView и Camera.aspect математически является частью матрицы проекции и недостаточно.
Следующие шаги
- Прочтите Конфигурация камеры, чтобы узнать, как настроить камеру для получения наилучшего AR-опыта.