Выбор подходящего режима центра
Выбор подходящего режима центра очень важен для создания контента. В этой статье вы узнаете, как получать и изменять режим центра, а также получите рекомендации по его выбору.
Перед началом
- Изучите Введение в AR Session, чтобы понять основные понятия, состав и рабочий процесс session.
- Изучите Режим центра AR Session, чтобы понять концепцию режима центра и его влияние на поведение объектов в сцене.
Получение доступных режимов центра
Когда session работает, в выпадающем списке Center в панели Inspector отображаются только доступные для этой session режимы центра. Если session не запущена, отображаются все режимы центра.

На изображении показаны доступные режимы центра для session, использующей CameraDeviceFrameSource в редакторе.
В скриптах после успешного assemble session список доступных режимов центра можно получить через свойство ARSession.AvailableCenterMode.
Например, следующий код показывает, как проверить, доступен ли некоторый режим центра в текущей session:
if (Session.AvailableCenterMode.Contains(mode))
{
// mode доступен в текущей session
}
Изменение режима центра
Откройте панель Inspector и выберите нужный режим центра в выпадающем списке Center.

В скриптах режим центра можно изменить через свойство ARSession.CenterMode.
Например, следующий код показывает, как циклически переключаться между доступными режимами центра:
while (true)
{
Session.CenterMode = (ARSession.ARCenterMode)(((int)Session.CenterMode + 1) % Enum.GetValues(typeof(ARSession.ARCenterMode)).Length);
if (Session.AvailableCenterMode.Contains(Session.CenterMode)) { break; }
}
При каждом обновлении session проверяет, является ли текущий режим центра допустимым. Если да, session сразу пытается использовать новый режим.
В видео выше сначала используется режим FirstTarget, а центральным объектом является рождественская ёлка (светло-голубое облако точек). Затем мы вручную меняем режим центра на Camera, и центральным объектом становится камера (синий конус). Подробное описание видео см. в Режим центра AR Session.
Если изменённый режим центра недоступен в текущей session, свойство CenterMode автоматически переключается на первый доступный режим центра (обычно FirstTarget или SessionOrigin), и в лог выводится одна строка предупреждения:
Center mode {Value} is unavailable in this session, reset to {NewValue}.
Как выбирать режим центра
Согласование с объектами реального мира лежит в основе создания AR-контента, а режим центра определяет, какой объект служит опорной точкой для расчёта позиции и ориентации остальных объектов сцены. Поэтому выбор подходящего режима центра очень важен.
Общие рекомендации
Во многих случаях удобнее использовать FirstTarget или SpecificTarget, делая target центром контента. Тогда опорные точки содержимого под target остаются неподвижными и не получают лишнего влияния от движения XR Origin или camera (например, на расчёт физической системы). Но это не абсолютное правило.
Если вы не знаете, что выбрать, используйте значение по умолчанию, то есть центр FirstTarget.
Поскольку большинство AR-функций имеют погрешность и постоянно её корректируют во время работы, объекты, которые кажутся неподвижными в реальном мире (напримерtargetв sparse spatial map иXR Originв motion tracking), в виртуальном пространстве могут иметь относительное движение. В таком случае использованиеtargetкак центра лучше соответствует задачам создания контента.Случай одновременного отслеживания нескольких
target
В этом случае из-за погрешностей вычисления даже неподвижные относительно реального мира объекты могут иметь относительное движение между собой. Выбор центра зависит от реальных требований; обычно режим FirstTarget подходит лучше.Когда использовать SessionOrigin
SessionOrigin подходит для сцен, где работает только motion tracking. В этом случаеXR Originявляется единственной опорной точкой. Этот режим также подходит для особых случаев, если производитель гарнитуры некорректно реализовал опорную точку motion tracking. Тогда нужно использовать центр мира Unity, чтобы принудительно включить SessionOrigin.Сценарии использования Camera
Camera лучше подходит для сцен, где физическая камера неподвижна (например, AR-игры с фиксированной камерой). В этом случае такой режим облегчает создание контента.
Обычные режимы центра для разных AR-функций
При отдельном использовании некоторых AR-функций чаще применяются определённые режимы центра. В таблице ниже приведены типичные варианты.
| Функция | Типичный режим центра |
|---|---|
| Mega | FirstTarget или SpecificTarget |
| Motion tracking | SessionOrigin |
| Plane detection | SessionOrigin |
| Sparse spatial map | FirstTarget или SpecificTarget |
| Dense spatial map | SessionOrigin |
| Surface tracking | FirstTarget или SpecificTarget |
| Image tracking | FirstTarget, SpecificTarget или Camera |
| Cloud image recognition | FirstTarget, SpecificTarget или Camera |
| Object tracking | FirstTarget, SpecificTarget или Camera |
Что учитывать при мультиустройственном развитии
При разработке AR-приложения для разных устройств нужно учитывать поддержку режимов центра на каждом устройстве.
- Если речь идёт только о телефонах и планшетах, обычно проблем не возникает. Если нужен SessionOrigin, убедитесь, что motion tracking может работать.
- Если нужно использовать гарнитуры, нужно быть особенно внимательным:
- Смотрите Доступные режимы центра, чтобы понять, какие режимы поддерживаются устройствами. Если используется стороннее расширение, проверьте также его OriginType.
- На устройствах Rokid старайтесь не использовать UXR. XRI позволяет сделать доступными большинство режимов центра.
- На гарнитурах, которые не поддерживают FirstTarget и SpecificTarget, нужно учитывать, что большая часть контента, например Mega или image tracking, не сможет оставаться неподвижной относительно системы координат мира Unity.
Контент, который корректно отображается при любом режиме центра
Предупреждение
В Unity AR любой объект в системе координат мира Unity, чей transform не был скорректирован согласно компонентам session, может отображаться некорректно.
Если разместить модели в системе координат мира, их положение и ориентация могут не соответствовать ни одному реальному объекту. В результате всё может случайно выглядеть нормально, а может казаться, что объекты парят или хаотично двигаются.
Чтобы контент правильно отображался при любом режиме центра, нужно:
- всегда помещать отображаемый контент под соответствующий узел
target, либо под узелXR Origin, если контент должен следовать за XR Origin - либо вручную выравнивать контент с
targetилиXR Origin, но делать это после события ARSession.PostSessionUpdate
Примечание
Это не гарантирует идеальную работу всех элементов, потому что некоторые функции Unity работают только в системе координат мира (например, физическая система). Правильный выбор режима центра по-прежнему важен.