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 |
![]() |
Использует target как центр, и этот target может свободно перемещаться. Среди них
|
| SessionOrigin | ![]() |
Использует XR Origin как центр, и XR Origin может свободно перемещаться. camera и target в session управляются session и движутся относительно центрального XR Origin. |
| Camera | ![]() |
Использует 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 | действительные режимы центра |
|---|---|---|---|---|
|
Да | Нет | - |
|
|
Да | Да | Да |
camera не являетсядочерним узлом XR Origin |
|
Нет | Да | Да |
|
|
Нет | Да | Да |
|
|
Нет | Да | Нет |
|
За исключением использования 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 должна быть действительной, поэтому центральный объект в этом режиме не меняется.
Следующие шаги
- Попробуйте выбрать подходящий center mode


