Центр отслеживания движения AR в Unity - XR Origin
XR Origin - это ключевая концепция tracking motion в Unity. В современных AR applications tracking motion постепенно становится обязательной функцией. С его помощью приложение может понять позицию и ориентацию пользователя в реальном мире без дополнительных распознаваемых объектов, обеспечивая immersive AR experience. Ниже вы узнаете базовую концепцию XR Origin, его состав и жизненный цикл, а также в каких случаях он нужен.
Перед началом
- Ознакомьтесь с базовой концепцией session в введении в ARSession.
Что такое XR Origin
При инициализации tracking motion выбирается reference point как origin отслеживания. Обычно это место, где устройство находилось в момент запуска приложения пользователем или в момент запуска AR service системы. В Unity scene представлением этой точки является XR Origin. В большинстве случаев начальная позиция XR Origin в scene также является стандартной начальной позицией camera.
Это видео показывает простой AR scene, где работает только tracking motion. Слева показан
Hierarchy, по центруScene, справаGame. Видео записано в Unity editor в режимеPlayс использованием данных simulation run. СодержимоеGameсовпадает с тем, что пользователь видит в реальном мире на телефоне.Видно, что в этом видео XR Origin (синий шар) остается на месте в scene, а camera, представляющая пользователя (значок camera), перемещается в соответствии с движением пользователя в реальном мире. Белые конусы показывают траекторию позиции и ориентации camera за предыдущий период времени, чтобы лучше понять ее движение. Эти белые конусы создаются под node XR Origin, и это типичная организация объектов в таких scene.
В системе tracking motion Unity camera обычно движется, следуя XR Origin. Хотя camera не всегда является дочерним node XR Origin, AR Session вычисляет позицию camera на основе позиции XR Origin, чтобы пользователь видел контент, согласованный с реальным миром.
Это видео показывает ту же scene, но на этот раз XR Origin (синий шар) перемещается во время runtime. Видно, что после перемещения XR Origin camera следует за ним, а содержимое
Gameне меняется.
В реальных AR scene такое движение устроено значительно сложнее.
Поведение XR Origin в разных center mode
В Unity все опорные точки центра AR tracking называются session center, а правило, определяющее этот центр во время session, называется center mode. В разных center mode поведение XR Origin отличается:
В center mode SessionOrigin XR Origin можно свободно перемещать.
Обычно SessionOrigin используется в scene, где работает только tracking motion. Когда одновременно работают другие функции, этот режим обычно не используется.
Однако при использовании headset, если производитель не реализовал корректно reference point tracking motion в Unity, тогда нужно использовать Unity world center и принудительно включить SessionOrigin. В этом случае root content должен двигаться вместе с AR function, что может повлиять на эффект контента, но до изменения со стороны стороннего производителя другого варианта нет.
В других center mode, например FirstTarget, XR Origin нельзя свободно перемещать.
Обычно FirstTarget используется в сценах без tracking motion или когда tracking motion работает вместе с другими AR функциями.
В этом режиме позиция XR Origin определяется AR function, поэтому произвольно перемещать XR Origin нельзя.
Подробнее о center mode и о том, как движутся объекты в scene, см. center mode.
Форма и состав XR Origin
EasyAR может использовать две разные формы XR Origin:
- XR Origin, предоставляемый EasyAR
- XR Origin, предоставляемый Unity XR framework
XR Origin (EasyAR)
Типичная структура XR Origin выглядит так:

Root node XR Origin - это пустой GameObject, у него может быть один или несколько child node XR Origin Child. XR Origin Child содержит компонент XROriginChildController, который служит для управления логикой XR Origin.
Во время runtime, если структура XR Origin в scene настроена неправильно, XR Origin и один XR Origin Child будут созданы автоматически. Во время работы XR Origin Child будет зафиксирован в той же позиции и ориентации, что и XR Origin.
Объекты, создаваемые session, такие как point cloud для sparse spatial mapping или mesh для dense spatial mapping, будут размещаться под node XR Origin Child.
Это видео показывает эффект работы dense spatial mapping вместе с tracking motion в той же scene. Видно, что созданный mesh размещается под node XR Origin Child.
Примечание: для удобства понимания в видео отключено создание depth map, поэтому содержимое
Sceneв видео отличается от реального runtime. Эффект вGameтакой же, как при отключенной прозрачности mesh.
[Опционально] XR Origin (Unity XR)
Если необходимо, можно использовать компонент XR Origin, предоставляемый Unity XR framework.
При использовании XR Origin от Unity XR framework типичная структура выглядит так:

В scene headset типичная структура выглядит так:

Root node XR Origin - это GameObject, создаваемый и поддерживаемый Unity XR framework; у него может быть один или несколько child node XR Origin Child. XR Origin Child содержит компонент XROriginChildController, который служит для управления логикой XR Origin.
Во время runtime, если структура XR Origin Child в scene настроена неправильно, XR Origin Child будет создан автоматически. Во время работы XR Origin Child будет зафиксирован в той же позиции и ориентации, что и XR Origin.
XR Origin, предоставляемый Unity XR framework, в основном поддерживает два случая:
- У вас уже используется AR Foundation в project, и вы хотите, чтобы он работал вместе с EasyAR или переключался между ними в зависимости от поддержки устройства.
- SDK headset, который вы используете, применяет XR Origin, предоставляемый Unity XR framework.
Примечание
Когда основной пакет Unity XR com.unity.xr.core-utils еще не импортирован в project, если camera в scene находится в той же иерархии, что и XR Origin, предоставляемый Unity XR framework (Camera и родительский node с именем Camera Offset), session будет считать, что эта структура создана Unity XR framework, и использовать ее. Это сделано для максимальной совместимости scene, то есть сцена, созданная с AR Foundation, продолжит работать даже если AR Foundation не импортирован в project, а остальная AR functionality останется нормальной. За исключением функций, которые может дать только AR Foundation, это даже не влияет на общую AR function и совместимость устройств.
Большинство примеров EasyAR используют этот способ, чтобы продолжать работать без AR Foundation и одновременно показывать совместную работу с AR Foundation, если он присутствует.
В определении AR Foundation его XR Origin является центром отслеживания пространства в XR scene. Однако нужно заметить, что в концепции AR Foundation tracking motion считается обязательной функцией, а tracking, о котором он говорит в XR scene, - это tracking motion.
В системе EasyAR tracking motion является опциональной функцией, поэтому XR Origin тоже опционален. XR Origin создается и используется только тогда, когда tracking motion включен.
Жизненный цикл XR Origin
Жизненный цикл XR Origin зависит от session. При запуске session XR Origin будет выбран или создан, если структура XR Origin в scene неверна. При остановке session XR Origin останется на месте до тех пор, пока не будет использован следующим session или удален вручную.
Следующие шаги
Создание
- Попробуйте создать XR Origin в scene
Управление runtime
- Узнайте про стратегию Active control для XR Origin