Table of Contents

Выбор подходящего режима центра

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

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

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

Получение доступных режимов центра

Когда session работает, в выпадающем списке Center в панели Inspector отображаются только доступные для этой session режимы центра. Если session не запущена, отображаются все режимы центра.

alt text

На изображении показаны доступные режимы центра для session, использующей CameraDeviceFrameSource в редакторе.

В скриптах после успешного assemble session список доступных режимов центра можно получить через свойство ARSession.AvailableCenterMode.

Например, следующий код показывает, как проверить, доступен ли некоторый режим центра в текущей session:

if (Session.AvailableCenterMode.Contains(mode))
{
    // mode доступен в текущей session
}

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

Откройте панель Inspector и выберите нужный режим центра в выпадающем списке Center.

alt text

В скриптах режим центра можно изменить через свойство 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 работают только в системе координат мира (например, физическая система). Правильный выбор режима центра по-прежнему важен.

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