Я обнаружил эмпирически, что ARKit не отслеживает более 4 якорей изображений одновременно; установка maximumNumberOfTrackedImages
на номер больше 4 игнорируется:
Имея дюжину маркеров изображений в области усеченного пространства камеры, ARKit обнаруживает их все и возвращает соответствующие ARImageAnchor
с, однако только 4 из них будут иметь isTracked == true
.
Я не смог найти никаких ссылок на это ограничение в документации Apple, однако это упоминалось в этом среднем посте :
[...] на данный момент вы можете включить отслеживание до 2 изображений, но в будущих выпусках их число наверняка будет расти.
Я хотел бы выбрать, какие якоря отслеживаются, чтобы я мог точно отслеживать якоря в центре экрана в приоритетном порядке.
Я пытался удалить якоря, которые сейчас не хочу отслеживать, надеясь, что ARKit отследит остальные:
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
guard let anchors = sceneView.session.currentFrame?.anchors.compactMap({ $0 as? ARImageAnchor }), anchors.count > 0 else {
return
}
let sortedAnchors = anchors.sorted { distanceToScreenCenter($0, renderer) < distanceToScreenCenter($1, renderer) }
sortedAnchors.dropFirst(4).filter({ $0.isTracked }).forEach({
self.sceneView.session.remove(anchor: $0)
})
Но не повезло, удаленные якоря добавляются и сразу же отслеживаются.