Table of Contents

Center mode AR Session

Center mode — это ключевое понятие Unity AR. Оно определяет, какой объект session выбирает как reference point, или center object, для всего AR tracking во время runtime, а также какие объекты в session могут свободно перемещаться. В следующем материале вы узнаете основные понятия center mode и его влияние на поведение движения объектов в scene.

Перед началом

  • Изучите основные понятия, состав и workflow session через Введение в AR Session.
  • Изучите роль camera в AR scenes через Camera, а также то, как session управляет свойствами camera для обеспечения корректного AR-опыта.
  • Изучите основные понятия, состав и lifecycle XR Origin через XR Origin.
  • Изучите основные понятия, states и lifecycle target через Target.

Center object и center mode

В одной session одновременно могут работать одна или несколько разных AR-функций. Эти AR-функции могут tracking разные объекты, а также одновременно использовать motion tracking для отслеживания position и orientation самого устройства.

Чтобы поведение движения объектов в scene соответствовало ожиданиям, session нужно выбрать reference point как центр всего AR tracking. Представлением этой reference point в Unity scene является center object (CenterObject). Center mode (CenterMode) — это правило, которое во время runtime session определяет, какой объект является этим center object.

Центром session может быть один из следующих объектов:

  • Отслеживаемый target
  • XR Origin
  • Camera

Center mode определяет, какой объект session выбирает как center object, и может ли этот объект свободно перемещаться. Объекты кроме него, включая non-center camera, XR Origin и target, управляются session и движутся относительно center object как reference point.

В Unity session поддерживает следующие четыре режима центра:

Имя Схема Описание
FirstTarget

SpecificTarget
alt text Использует target как центр, и этот target может свободно перемещаться. Среди них
  • FirstTarget использует первый отслеженный target как центр.
  • SpecificTarget использует указанный target как центр.
camera, XR Origin и другие target в session управляются session и движутся относительно центрального target.
SessionOrigin alt text Использует XR Origin как центр, и XR Origin может свободно перемещаться.
camera и target в session управляются session и движутся относительно центрального XR Origin.
Camera alt text Использует camera как центр, и camera может свободно перемещаться.
XR Origin и target в session управляются session и движутся относительно центральной camera.

На схемах есть три объекта: синяя сфера представляет XR Origin, синий конус представляет camera, а желтая картинка представляет target. В разных режимах центра session выбирает разные объекты как центральный объект. На рисунках показана локальная система координат соответствующего объекта.

Совет

Если у вас есть опыт использования AR Foundation, вы можете заметить, что в AR Foundation нет похожего понятия. На самом деле поведение AR Foundation согласуется с режимом центра SessionOrigin.

В session относительное движение target и camera управляется текущей session. Относительное движение XR Origin и camera управляется текущей session или сторонним framework, например AR Foundation. Наличие режимов центра гарантирует, что в разных средах выполнения session может правильно управлять движением объектов в сцене.

Например, если AR Foundation или SDK гарнитуры на базе Unity XR управляет относительным движением между XR Origin и camera, то XR Origin, согласно дизайну framework Unity XR, может перемещаться под управлением session, а camera — нет. В этот момент session ограничивает режим центра значениями FirstTarget, SpecificTarget или SessionOrigin. Так для session центром будет XR Origin или некоторый target, а для framework Unity XR центром по-прежнему будет XR Origin, и вся система сможет работать корректно.

Предупреждение

В Unity AR любой объект, который находится в мировой системе координат Unity и чей transform не настроен согласно компоненту session, может отображаться неправильно. Поскольку session настраивает положение и ориентацию других объектов в сцене по положению и ориентации центрального объекта, если некоторые объекты не управляются session, их положение и ориентация могут не совпадать с рассчитанными session значениями, что приведет к непредсказуемому поведению.

Например, если в мировой системе координат размещена модель панды, положение и ориентация этой модели могут не соответствовать никакому объекту в реальном мире, и она может выглядеть так, будто висит в воздухе или хаотично движется.

Правильный подход — всегда размещать отображаемый контент под определенным узлом target или под узлом XR Origin, если контент должен двигаться вместе с XR Origin. Тогда положение и ориентация контента будут корректироваться согласно результатам вычислений session, что гарантирует правильное наложение контента на реальный мир.

Можно вручную выровнять контент с положением и ориентацией target или XR Origin, но это нужно делать в правильный момент. См. выбор подходящего режима центра.

Действительные режимы центра

Не все режимы центра действительны при любых условиях. session определяет, какие режимы центра действительны, на основе текущей среды выполнения и выбранного frame source, чтобы правильно управлять движением объектов в сцене. Свойство ARSession.AvailableCenterMode можно использовать для получения списка действительных режимов центра текущей session.

В зависимости от окончательно выбранного frame source действительные режимы центра session имеют следующие варианты:

frame source camera управляется есть данные движения есть проект origin действительные режимы центра
  • CameraDeviceFrameSource
  • FramePlayer, где использованный при записи frame source не имел данных движения
  • ExternalImageStreamFrameSource
Да Нет -
  • FirstTarget
  • SpecificTarget
  • Camera
  • ARCoreFrameSource
  • AREngineFrameSource
  • ARKitFrameSource
  • InertialCameraDeviceFrameSource
  • MotionTrackerFrameSource
  • ThreeDofCameraDeviceFrameSource
  • FramePlayer, где использованный при записи frame source имел данные движения
Да Да Да
  • FirstTarget
  • SpecificTarget
  • SessionOrigin
  • Camera (*)
* Действительно только когда camera не является
дочерним узлом XR Origin
  • ARCoreARFoundationFrameSource
  • ARKitARFoundationFrameSource
  • VisionOSARKitFrameSource
  • XREALFrameSource
  • ExternalDeviceFrameSource где OriginType is XROrigin or Custom, and Origin можно свободно управлять
    • PicoFrameSource
    • RokidFrameSource без UXR
Нет Да Да
  • FirstTarget
  • SpecificTarget
  • SessionOrigin
Нет Да Да
  • SessionOrigin
  • ExternalDeviceFrameSource, где OriginType является None
    • RokidFrameSource с UXR
Нет Да Нет
  • SessionOrigin

За исключением использования FramePlayer, действительные режимы центра определяются при сборке session. При использовании FramePlayer действительные режимы центра динамически определяются во время выполнения session при выводе данных каждого кадра, в зависимости от того, содержит ли этот кадр информацию о движении.

Характеристики разных center modes

Далее мы с помощью серии sample videos покажем поведение движения объектов при разных center modes.

Содержание видео следующее:

В реальном мире есть два разных типа trackable objects:

  • Один — рождественская елка, она неподвижна. Она отслеживается с помощью функции sparse spatial map.
  • Другой — лист A4, на котором заранее напечатано изображение. Он может двигаться. Он отслеживается с помощью функции image tracking.

При записи видео observer, то есть телефон, начинает с правой задней стороны рождественской елки и движется вокруг нее. Лист A4 качается влево и вправо перед observer.

Для удобства наблюдения мы добавили в scene некоторые markers к разным объектам.

  • Рождественская елка: когда она находится в состоянии tracking, в занимаемом ею пространстве накладывается ярко-синее point cloud. Эти markers исчезают при потере tracking.
  • Лист A4: когда он находится в состоянии tracking, над ним накладывается панда. В view Game дополнительно отображается изображение, полностью совпадающее с содержимым и размером листа A4. Эти markers исчезают при потере tracking.
  • XR Origin: в его позиции размещена синяя сфера
  • Camera: в ее позиции размещен синий конус, и главная ось конуса совпадает с направлением взгляда camera.

Все эти видео записаны в режиме Play Unity editor с использованием simulated runtime data. Слева в видео находится view Scene, справа — view Game. Содержимое view Game совпадает с тем, что пользователь видит на телефоне в реальном мире.

Center modes FirstTarget и SpecificTarget

Режимы центра FirstTarget и SpecificTarget используют некоторый target как центральный объект. В этих двух режимах, кроме центрального target, camera, XR Origin и другие target в session управляются session и движутся относительно центрального target как точки отсчета.

Некоторые targets могут двигаться в реальном мире, например лист A4 в видео.

В видео выше центральный объект — лист A4, отслеживаемый с помощью image tracking. Видно, что без внешних действий лист A4 (панда) остается неподвижным, а camera (синий конус), XR Origin (синяя сфера) и елка (ярко-синее облако точек) движутся.

Некоторые targets неподвижны в реальном мире, например елка в видео.

В видео выше центральный объект — елка, отслеживаемая с помощью sparse spatial map. Видно, что без внешних действий елка (ярко-синее облако точек) неподвижна, а camera (синий конус) и лист A4 (панда) движутся. XR Origin (синяя сфера) также не движется, но это потому, что он неподвижен относительно елки.

В этих двух режимах центральный target, используемый как точка отсчета, может свободно перемещаться. При этом camera, XR Origin и другие target в session будут двигаться вместе с ним, а их transform не может управляться извне.

В видео выше центральный объект — лист A4, отслеживаемый с помощью image tracking. Видно, что из-за ручного перемещения листа A4 (панда) camera (синий конус), XR Origin (синяя сфера) и елка (ярко-синее облако точек) двигаются вместе с ним. Следует отметить, что содержимое, отображаемое во view Game, при этом не меняется, поскольку положение и ориентация camera относительно листа A4 и других объектов не меняются.

Разница между режимами FirstTarget и SpecificTarget заключается в том, что во время runtime центральный target может измениться, но при изменении способ выбора центра отличается. Чтобы объяснить это, нужно учитывать процесс успешного tracking и потери tracking.

Когда центральный объект в session изменяется, ARSession.CenterObject всегда отражает текущий центральный объект, но ARSession.CenterMode не изменяется.

Изменения center в center mode FirstTarget

В режиме центра FirstTarget session всегда использует первый отслеженный target как центр. Если отслеживание этого target потеряно, session повторно выбирает центр. Когда session отслеживает или заново начинает отслеживать другой target, этот другой target выбирается как новый центральный объект.

Повторный выбор центра происходит в следующих случаях:

  • В текущем кадре ни один target не находится в состоянии отслеживания
    В этот момент, если режим SessionOrigin действителен, session переходит к режиму SessionOrigin и выбирает XR Origin как центральный объект; иначе session переходит к режиму Camera и выбирает camera как центральный объект.

  • В текущем кадре есть target в состоянии отслеживания, а в предыдущем кадре ни один target не находился в состоянии отслеживания
    В этот момент session выбирает один из отслеживаемых объектов target как центральный объект.

  • В текущем кадре есть target в состоянии отслеживания, а центральный target из предыдущего кадра потерял отслеживание в текущем кадре
    В этот момент session выбирает один из отслеживаемых объектов target как новый центральный объект.

В приведенном выше видео начальным центральным объектом является лист A4, отслеженный функцией image tracking. Видно, что когда отслеживание листа A4 (панда) теряется, session повторно выбирает центральный объект. В этот момент рождественская елка (ярко-синее point cloud) становится новым центральным объектом. В конце видео лист A4 снова отслеживается, но не становится центральным объектом, потому что рождественская елка уже является центральным объектом.

Изменение центра в режиме центра SpecificTarget

В режиме центра SpecificTarget session всегда использует указанный target как центр. Если отслеживание этого target потеряно, session повторно выбирает центр, но не выбирает другой target как новый центральный объект. Когда session снова начинает отслеживать этот указанный target, он по-прежнему выбирается как центральный объект.

Повторный выбор центра происходит в следующих случаях:

  • Указанный target не отслеживается в текущем кадре
    В этот момент, если режим SessionOrigin действителен, session переходит к режиму SessionOrigin и выбирает XR Origin как центральный объект; иначе session переходит к режиму Camera и выбирает camera как центральный объект.

  • Указанный target находится в состоянии отслеживания в текущем кадре, а в предыдущем кадре указанный target не отслеживался
    В этот момент session выбирает указанный target как центральный объект.

В приведенном выше видео центральным объектом указан лист A4, отслеженный функцией image tracking. Видно, что когда отслеживание листа A4 (панда) теряется, session не выбирает другой target как новый центральный объект. В этот момент рождественская елка (ярко-синее point cloud) не становится центральным объектом. В конце видео лист A4 снова отслеживается и вновь становится центральным объектом.

Режим центра SessionOrigin

Режим центра SessionOrigin использует XR Origin как центральный объект. В этом режиме camera и target в session управляются session и движутся с центральным XR Origin как точкой отсчета.

В приведенном выше видео центральным объектом является XR Origin. Видно, что из-за отсутствия внешних операций XR Origin (синяя сфера) остается неподвижным, а camera (синий конус) и лист A4 (панда) движутся. Рождественская елка (ярко-синее point cloud) также не движется, но это потому, что она неподвижна относительно XR Origin.

В этом режиме центральный XR Origin, используемый как точка отсчета, может свободно перемещаться. В этот момент camera и target в session будут двигаться вместе с ним, а их transform не может управляться извне.

В приведенном выше видео центральным объектом является XR Origin. Видно, что поскольку мы вручную переместили XR Origin (синяя сфера), camera (синий конус), рождественская елка (ярко-синее point cloud) и лист A4 (панда) также переместились вместе с ним. Обратите внимание, что содержимое, отображаемое во view Game, в этот момент не меняется, потому что положение и ориентация camera относительно XR Origin и других объектов не изменились.

В режиме SessionOrigin XR Origin должен быть действительным, поэтому центральный объект в этом режиме не меняется.

Режим центра Camera

Режим центра camera использует camera как центральный объект. В этом режиме XR Origin и target в session управляются session и движутся с центральной camera как точкой отсчета.

В приведенном выше видео центральным объектом является camera. Видно, что из-за отсутствия внешних операций camera (синий конус) остается неподвижной, а XR Origin (синяя сфера), рождественская елка (ярко-синее point cloud) и лист A4 (панда) движутся.

В этом режиме центральная camera, используемая как точка отсчета, может свободно перемещаться. В этот момент XR Origin и target в session будут двигаться вместе с ней, а их transform не может управляться извне.

В приведенном выше видео центральным объектом является camera. Видно, что поскольку мы вручную переместили camera (синий конус), XR Origin (синяя сфера), рождественская елка (ярко-синее point cloud) и лист A4 (панда) также переместились вместе с ней. Обратите внимание, что содержимое, отображаемое во view Game, в этот момент не меняется, потому что положение и ориентация camera относительно XR Origin и других объектов не изменились.

В режиме Camera camera должна быть действительной, поэтому центральный объект в этом режиме не меняется.

Следующие шаги

Связанные темы