Отключить блокировку объектов AR в QLPreviewController

#swift #augmented-reality #arkit #realitykit #arquicklook

Вопрос:

Я использую QLPreviewController для показа контента AR. В новых iPhone с ЛИДАРОМ, похоже, по умолчанию включена окклюзия объектов.

Есть ли какой-либо способ отключить блокировку объектов в QLVideoController без необходимости создавать пользовательский контроллер представления ARKit? Поскольку мои модели довольно большие (здания в натуральную величину), они, кажется, исчезают или обрезаются в конце.

Ответ №1:

ARQuickLook это библиотека, созданная для быстрой и высококачественной визуализации AR. Он использует движок RealityKit, поэтому все поддерживаемые здесь функции, такие как окклюзия, якоря, тени с трассировкой лучей, физика, DoF, размытие движения, HDR и т.д., Выглядят так же, как и в RealityKit.

Однако вы не можете включить on / off эти функции в API QuickLook. Они on установлены по умолчанию, если поддерживаются на вашем iPhone. В случае, если вы хотите включить on /Закрыть off людей, вам придется использовать фреймворки ARKit/RealityKit, а не QuickLook.

 class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let box = try! Experience.loadBox()
        arView.scene.anchors.append(box)
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.switchOcclusion()
    }
    
    fileprivate func switchOcclusion() {
        
        guard let config = arView.session.configuration as?
                                                   ARWorldTrackingConfiguration
        else { return }
        
        guard ARWorldTrackingConfiguration.supportsFrameSemantics(
                                                  .personSegmentationWithDepth)
        else { return }
        
        switch config.frameSemantics {           
            case [.personSegmentationWithDepth]: 
                     config.frameSemantics.remove(.personSegmentationWithDepth)
            default: 
                     config.frameSemantics.insert(.personSegmentationWithDepth)
        }           
        arView.session.run(config)
    }
}
 

Обратите особое внимание на то, что People Occlusion поддерживается на чипсетах A12 и более поздних версий. И это работает, если вы используете iOS 12 и выше.

P.S.

Единственным настраиваемым объектом QuickLook является объект из класса ARQuickLookPreviewItem.

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

Комментарии:

1. Спасибо за подробную информацию, я боялся, что это так. На самом деле у меня та же проблема с Android.