Проблемы с RealityKit и ARKit

Я хочу создать демонстрационное приложение в ARKit, и у меня есть несколько вопросов о том, что в настоящее время возможно с бета-версией (Apple называла это RealityKit или ARKit 3.0).


Демо-приложение, которое я пытаюсь создать, должно делать следующее:

  1. определить объект или изображение в реальной среде и создать там привязку

  2. визуализировать виртуальную модель, прикрепленную к якорю

  3. представить виртуальную модель с окклюзией

  4. заставить виртуальную модель перемещаться вместе с якорным изображением / объектом


Я пробовал адаптировать код из более ранних версий (ARKit 2.0, который использует SceneKit), но некоторые функции, такие как окклюзия людей, не являются частью ARKit 2.0.

Поскольку Apple работает над своей бета-версией, многие функции, рекламируемые на их сайте и на WWDC 2019, по-видимому, исчезли из документации для RealityKit (прикрытие людей, отслеживание тела, отслеживание мира).

Насколько я понимаю, пункты (1) и (2) возможны с ARKit 2.0. Пункт (3) рекламируется как возможный с бета-версией, но я практически не вижу документации.

Возможно ли это сделать в последней бета-версии? Если да, то каков наилучший подход? Если нет, есть ли какие-то обходные пути, например, смешивание старого и нового API или что-то в этом роде?


person attl    schedule 21.08.2019    source источник


Ответы (1)


Все проблемы, которые вы здесь упомянули, возможны в паре _1 _ / _ 2_ или RealityKit.

Выберите тип конфигурации

  1. Определите объект или изображение в реальной среде и создайте там якорь.

Вы можете идентифицировать 3D objects или Images, используя следующие конфигурации в ARKit:

let configuration = ARWorldTrackingConfiguration()

guard let obj = ARReferenceObject.referenceObjects(inGroupNamed: "Resources", 
                                                         bundle: nil) 
else { return }

configuration.detectionObjects = obj     // Allows you create ARObjectAnchor
sceneView.session.run(configuration)

а также:

let config = ARWorldTrackingConfiguration()

guard let img = ARReferenceImage.referenceImages(inGroupNamed: "Resources", 
                                                       bundle: nil) 
else { return }

config.detectionImages = img             // Allows you create ARImageAnchor
config.maximumNumberOfTrackedImages = 3
sceneView.session.run(config)

Однако, если вы хотите реализовать подобное поведение в RealityKit, используйте это:

let objectAnchor = AnchorEntity(.object(group: "Resources", name: "object"))

а также:

let imageAnchor = AnchorEntity(.image(group: "Resources", name: "model"))


Механизмы рендеринга

  1. Визуализируйте виртуальную модель, прикрепленную к якорю.

На данный момент у ARKit есть четыре помощника, помогающие вы визуализируете 2D и 3D графику:

  • RealityKit (3D-движок)
  • SceneKit (3D-движок)
  • Металл (3D-движок)
  • SpriteKit (2D-движок)


Материалы

  1. Представьте виртуальную модель с окклюзией.

В модуле RealityKit все материалы являются структурами, соответствующими Материалам протокол. На данный момент существует 6 видов материалов. Вам нужно OcclusionMaterial.

  • OcclusionMaterial (невидимый материал, скрывающий объекты, отображаемые за ним)
  • SimpleMaterial (основной материал, который можно применять к сеткам)
  • UnlitMaterial (простой материал, который не реагирует на свет в сцене)
  • ВидеоМатериал (материал, который позволяет воспроизводить на нем видео с помощью AVPlayer)
  • PhysicallyBasedMaterial (материал, имитирующий внешний вид реальных объектов)
  • CustomMaterial (материал, название которого говорит само за себя)

Просмотрите ЭТОТ ЗАПИСЬ, чтобы узнать, как назначать материалы программно в RealityKit.

И ЭТО ЗАПИСЬ показывает, как назначить собственный материал окклюзии в SceneKit.


Обновление 3D-контента

  1. Попросите виртуальную модель двигаться вместе с якорным изображением / объектом.

Чтобы реализовать этот тип поведения в _11 _ + _ 12_, вы должны использовать средство визуализации (_: didAdd: для :) или сеанс (_: didAdd:) < / а>. В RealityKit объекты AnchorEntities отслеживаются автоматически.

person Andy Fedoroff    schedule 23.08.2019