RealityKit: не удается загрузить объект из файла USDZ

Недавно я начал изучать AR в iOS. Моя первая попытка заключалась в том, чтобы импортировать модель очков из файла usdz в композитор реальности и привязать их к лицу. Это сработало отлично. Затем я попытался сделать это программно с тем же файлом, но ничего не вышло.

Поскольку это сработало в первый раз, и когда я загружаю файл программно, я могу распечатать описание модели (см. Ниже), я не думаю, что проблема в файле.

Вот код

import UIKit
import ARKit
import RealityKit

class ViewController: UIViewController {
    @IBOutlet var arView: ARView!
    
    // this one does not show
    var glassesEntity: Entity {
        guard let fileUrl = Bundle.main.url(forResource: "glasses", withExtension: "usdz"), 
              let entity = try? Entity.loadModel(contentsOf: fileUrl) else {
            fatalError("could not load entity")
        }
        
        entity.name = "glasses"
        print(entity)
        return entity
    }
    
    // this one works perfectly fine
    var boxEntity: Entity {
        let box = MeshResource.generateBox(size: 0.3)
        return ModelEntity(mesh: box)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let arConfiguration = ARFaceTrackingConfiguration()
        
        arView.session.run(arConfiguration, options: [])
        
        let faceAnchor = AnchorEntity(AnchoringComponent.Target.face)
        arView.scene.addAnchor(faceAnchor)
        
        faceAnchor.addChild(glassesEntity)
        // If I uncomments this line, I see the box on my face 
        // faceAnchor.addChild(boxEntity)
    }
}

Вот вывод терминала. Первые 3 строчки все равно появляются, даже если я не пытаюсь загрузить модель очков.

2021-04-05 10:52:39.589170+0300 FaceTracking[27470:2201299] Metal GPU Frame Capture Enabled
2021-04-05 10:52:39.589627+0300 FaceTracking[27470:2201299] Metal API Validation Enabled
Json Parse Error line 22: Json Deserialization; unknown member 'EnableGuidedFilterOcclusion' - skipping.
Warning: in AppendProperty at line 859 of sdf/path.cpp -- Can only append a property 'preliminary:anchoring:type' to a prim path (/)
Warning: in AppendProperty at line 859 of sdf/path.cpp -- Can only append a property 'triggers' to a prim path (/)
▿ 'glasses' : ModelEntity
  ⟐ ModelComponent
  ⟐ SynchronizationComponent
  ⟐ Transform

2021-04-05 10:52:40.549771+0300 FaceTracking[27470:2201340] [Graphics] Failed to find reflection for buffer clusterIndexTable
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
29
1

Ответы 1

Вы можете попробовать кое-что ...

Сначала загрузите модель следующим образом:

guard let entity = try? Entity.load(
  named: "glasses"
) else { fatalError("") }

Затем, после того, как он закреплен, измените все остальное на это:

val glEnt = self.glassesEntity
faceAnchor.addChild(glEnt)
let relNil = glEnt.visualBounds(relativeTo: nil)
let relAnch = glEnt.visualBounds(relativeTo: faceAnchor)

print("centre: \(relNil.center)\n radius:\(relNil.boundingRadius)")
print("centre: \(relAnch.center)\n radius:\(relAnch.boundingRadius)")

Посмотрите, соответствуют ли эти значения центра и радиуса ожидаемым. Первый будет в мировом пространстве, второй - относительно привязки лица.

Другие вопросы по теме