Недавно я начал изучать 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





Вы можете попробовать кое-что ...
Сначала загрузите модель следующим образом:
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)")
Посмотрите, соответствуют ли эти значения центра и радиуса ожидаемым. Первый будет в мировом пространстве, второй - относительно привязки лица.