Swift ARKit中呈现器和会话方法之间的差异

Swift ARKit中呈现器和会话方法之间的差异,swift,augmented-reality,scenekit,arkit,realitykit,Swift,Augmented Reality,Scenekit,Arkit,Realitykit,我检查了以下两个示例代码: 以及: 提取面混合形状的代码使用“渲染器”获取混合形状的值 但是,检测身体运动的代码使用“会话”获取值 这两个代码似乎都是用于获取从ARAnchor更新的值 “渲染器”和“会话”之间有什么区别 如何在不同的时间使用这两个代码?同时使用渲染器(uu2;:diddupdate:for:)和会话(2;:diddupdate:)实例方法以60 fps的速度更新AR内容(相机或模型位置)。它们的工作原理几乎相同,但目的不同。对于五个renderer()实例方法,必须实现对协议的

我检查了以下两个示例代码:

以及:

提取面混合形状的代码使用“渲染器”获取混合形状的值

但是,检测身体运动的代码使用“会话”获取值

这两个代码似乎都是用于获取从ARAnchor更新的值

“渲染器”和“会话”之间有什么区别

如何在不同的时间使用这两个代码?

同时使用
渲染器(uu2;:diddupdate:for:)
会话(2;:diddupdate:)
实例方法以60 fps的速度更新AR内容(相机或模型位置)。它们的工作原理几乎相同,但目的不同。对于五个renderer()实例方法,必须实现对协议的委托。对于四个session()实例方法,必须实现对协议的委托

一份官方文件说:

ARSCNViewDelegate的方法提供SceneKit内容与AR会话的自动同步。ARSessionDelegate的方法直接用于ARFrame对象

主要区别在于:
  • 您可以对ARKit SceneKit“chain”使用
    呈现器(u:didAdd:for:)
    方法,因为它仅在ARSCNView中工作

  • 您可以对纯ARKit或ARKit RealityKit“链”使用
    session(\uuux0:didUpdate:)
    方法,因为它不仅在ARSCNView(ARKit)中有效,而且在ARView(ARKit+RealityKit)中也有效


我可以两者都用吗?它会导致线程问题吗?哪种情况会迫使您同时使用这两种方法?在我的项目中,
渲染器
用于检测地板,“会话”用于处理所有其他AR内容。我不太确定这样做是否正确是的,正如我在前面的评论中提到的,所有因素都很重要。模型的大小(多边形)和纹理的大小(像素)是最重要的两个!
func session(_ session: ARSession, didUpdate anchors: [ARAnchor])
{  
    for anchor in anchors        
    {            
        guard let bodyAnchor = anchor as? ARBodyAnchor else { continue }
        let skeleton = bodyAnchor.skeleton
    }
}
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor)
{
    guard let faceAnchor = anchor as? ARFaceAnchor else { return }
    let blendShapes = faceAnchor.blendShapes    
}