Что такое ARAnchor? - PullRequest
       96

Что такое ARAnchor?

0 голосов
/ 19 октября 2018

Я пытаюсь понять и использовать ARKit.Но есть одна вещь, которую я не могу полностью понять.Apple сказала:

Положение и ориентация в реальном мире, которые можно использовать для размещения объектов в сцене AR

... но этого недостаточно.

Что такое ARAnchor точно?
В чем различия между якорями и характерными точками?
Является ли ARAnchor просто частью характерных точек?
И как ARKit определяет свои якоря?

1 Ответ

0 голосов
/ 19 октября 2018

Проще говоря, ARAnchor - это нулевой объект , который может содержать 3D-контент (в положении привязки) в Мировом Пространстве.Думайте о ARAnchor так же, как о локальной оси для вашего трехмерного объекта.Каждый 3D-объект имеет точку поворота, верно?Таким образом, эта точка опоры должна соответствовать ARAnchor.

Как указано в документации Apple, :

ARAnchor - это позиция и ориентация в реальном мире, которые могутиспользоваться для размещения объектов в AR Scene.Добавление привязки к сеансу помогает ARKit оптимизировать точность отслеживания мира в области вокруг этой привязки, так что виртуальные объекты остаются на месте относительно реального мира.Если виртуальный объект перемещается, удалите соответствующий якорь из старой позиции и добавьте его в новой позиции.

ARAnchor является родительским классом для всех других типов якорей, существующих в платформе ARKit, поэтомувсе эти подклассы наследуются от ARAnchor класса.

Вот изображение с визуальным представлением якоря плоскости.Но имейте в виду: по умолчанию вы не видите ни обнаруженную плоскость, ни ее ARPlaneAnchor.

enter image description here

В ARKit 3.0 выВы можете добавить ARAnchors к вашей сцене, используя различные сценарии :

  • ARPlaneAnchor

    • Если горизонтальный или / и вертикальный planeDetection свойство экземпляра равно ON, ARKit может добавлять ARPlaneAnchors в сеанс.
  • ARImageAnchor

    • Этот тип якорей содержит информацию о положении и ориентации обнаруженного изображения (якорь расположен в центре изображения) в сеансе отслеживания мира AR.Для активации используйте detectionImages свойство экземпляра.В ARKit 2.0 вы можете полностью отслеживать до 25 изображений, в ARKit 3.0 - до 100 изображений соответственно.Но в обоих случаях не более 4 изображений одновременно.
  • ARBodyAnchor

    • В последнем выпускеARKit, вы можете включить отслеживание тела, запустив сеанс с ARBodyTrackingConfiguration().Вы получите ARBodyAnchor в Root Joint 3D скелета.
  • ARFaceAnchor

    • Face Anchor хранит информацию о топологии и позе, а также выражение лица, которое вы можете обнаружить с помощью фронтальной камеры TrueDepth.При обнаружении лица якорь лица будет прикреплен немного позади носа, в центре лица.В ARKit 2.0 вы можете отслеживать только одно лицо, в ARKit 3.0 - до 3 лиц одновременно.
  • ARObjectAnchor

    • Этот тип якорей содержит информацию о 6 Степенях Свободы (положение и ориентация) реального трехмерного объекта, обнаруженного во время сеанса отслеживания мира.
  • AREnvironmentProbeAnchor

    • Probe Anchor предоставляет информацию об освещении окружающей среды для определенной области пространства во время сеанса отслеживания мира.Искусственный интеллект ARKit использует его для снабжения металлических шейдеров отражениями окружающей среды.
  • ARParticipantAnchor

    • Это незаменимый тип привязки для многопользовательских опытов AR.

Существуют и другие регулярные подходы к созданию якорей в сеансе AR :

  • Проверка на попаданиеМетод

    • Нажатие на экран проецирует точку на скрытую обнаруженную плоскость, помещая туда ARAnchor.
  • Функцияpoints

    • Специальные желтые точки, которые ARKit автоматически генерирует на высококонтрастных полях объектов реального мира, могут дать вам место для установки ARAnchor.Этот подход возможен и благодаря методу тестирования попаданий.
  • Преобразование ARCamera

    • Положение и ориентация камеры iPhone (Matrix 4x4) могут быть легко использованы в качестве места для ARAnchor.

А ниже приведен фрагмент кода, как реализовать привязки внутри метода визуализации:

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

    guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
    let grid = Grid(anchor: planeAnchor)
    node.addChildNode(grid)
}

С момента выпуска RealityKit в 2019 году вы можете использовать его новый класс AnchorEntity.Используйте класс AnchorEntity в качестве корневой точки иерархии сущностей и добавьте его в коллекцию якорей для экземпляра Scene.Это позволяет ARKit поместить сущность привязки вместе со всеми ее иерархическими потомками в реальный мир.

...