Я играю со Swift и ARKit. Я могу успешно отобразить и обновить сетку лица, используя ARSCNFaceGeometry, ARFaceTrackingConfiguration и т. Д. Голова не движется (она смотрит на пользователя), но лицо обновляется с использованием данных лица пользователя.
Однако, если я хочучтобы лицо могло реагировать на пользователя, смотрящего влево и вправо, лицо становится невидимым. (Если я двигаюсь влево и вправо, я иногда вижу края моего носа / щеки, но не более)
код:
class ViewController: UIViewController, ARSessionDelegate {
let session = ARSession()
var maskNode: SCNNode?
var sceneView = SCNView(frame: UIScreen.main.bounds)
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(sceneView)
self.sceneView.backgroundColor = .clear
self.sceneView.scene = SCNScene()
self.sceneView.rendersContinuously = true
if let device = MTLCreateSystemDefaultDevice(), let geo = ARSCNFaceGeometry(device: device) {
self.maskNode = SCNNode(geometry: geo)
self.maskNode?.geometry?.firstMaterial?.fillMode = .lines
self.maskNode?.look(at: SCNVector3(-0.01, -0.13, 0.932))
self.maskNode?.position = SCNVector3(x: 0.0, y: 0.0, z: 0.0)
self.sceneView.scene?.rootNode.addChildNode(self.maskNode!)
}
let config = ARFaceTrackingConfiguration()
session.delegate = self
session.run(config, options: [])
}
var currentFaceAnchor: ARFaceAnchor?
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
guard let faceAnchor = anchors.first as? ARFaceAnchor else { return }
self.currentFaceAnchor = faceAnchor
let faceGeometry = self.maskNode?.geometry as! ARSCNFaceGeometry
faceGeometry.update(from: faceAnchor.geometry)
self.maskNode?.look(at: SCNVector3(faceAnchor.lookAtPoint))
}
}
Если два self.maskNode? .Look-линии закомментированы, я отчетливо вижу сетку лица. Если это не закомментировано, я вряд ли что-нибудь увижу.
То же самое, если я сделаю fillMode = .fill вместо .lines.
Может кто-нибудь объяснить, почему это происходит и чего мне не хватает, чтобы увидетьправильные линии / заполненное лицо движутся так же, как пользователь двигает головой?