是否可以在RealityKit ARView中追踪人脸并进行渲染?

时间:2020-01-10 14:58:43

标签: swift scenekit augmented-reality arkit realitykit

Apple文档说您可以将userFaceTrackingEnabled设置为同时前置和后置摄像头。添加ARView并正确设置配置后,我可以确认将正常调用ARSessionDelegate函数,如下所示:

func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
    for anchor in anchors where anchor is ARFaceAnchor {
        // triggerd
    }
}

func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
    for anchor in anchors where anchor is ARFaceAnchor {
        // triggerd
    }
}

所以现在我有了ARFaceAnchor对象,下一步该怎么做?是否可以使用RealityKit渲染此ARFaceAnchor?还是只能由SceneKit渲染?因为互联网上的所有示例都是使用SceneKit实现的。

2 个答案:

答案 0 :(得分:1)

如果您想使用RealityKit渲染技术,则应使用其自己的锚点。

因此,对于RealityKit 面部跟踪体验,您只需要:

AnchorEntity(AnchoringComponent.Target.face)

如果您使用Reality Composer场景,甚至不需要session(_:didAdd:)session(_:didUpdate:)实例方法。

如果您在Reality Composer .face中准备场景,则开始时可以使用锚类型。 .reality文件中不可编辑的隐藏Swift代码如下所示:

public static func loadFace() throws -> Facial.Face {

    guard let realityFileURL = Foundation.Bundle(for: Facial.Face.self).url(forResource: "Facial", 
                                                                          withExtension: "reality") 
    else {
        throw Facial.LoadRealityFileError.fileNotFound("Facial.reality")
    }

    let realityFileSceneURL = realityFileURL.appendingPathComponent("face", isDirectory: false)
    let anchorEntity = try Facial.Face.loadAnchor(contentsOf: realityFileSceneURL)
    return createFace(from: anchorEntity)
}

如果您需要有关锚的更详细的信息,请阅读this post

PS

但是,目前存在一个令人不快的问题-如果您使用的是Reality Composer内置的场景,则一次只能使用一种锚点(horizontalverticalimagefaceobject)。因此,如果您需要同时使用ARWorldTrackingConfigARFaceTrackingConfig,请不要使用Reality Composer场景。我相信这种情况将在不久的将来得到解决。

答案 1 :(得分:0)

我相信Reality Kit无法做到这一点,当我阅读面部跟踪文档时,我找不到任何有关Reality Kit跟踪的信息。但是您可以使用SceneKit和SpriteKit。请检查此文件。

https://developer.apple.com/documentation/arkit/tracking_and_visualizing_faces

这句话也引起了我的注意。

此示例使用ARSCNView通过SceneKit显示3D内容,但是 您还可以使用SpriteKit或使用Metal构建自己的渲染器(请参见 ARSKView和显示Metal的AR体验。