所有你提到的挑战,在
ARKit
/
SceneKit
和
ARKit
/
RealityKit
中都可以实现。
选择配置
- 在真实环境中识别一个物体或图像,并在那里创建锚点。
你可以使用以下ARKit配置来识别3D对象
或图像
:
let configuration = ARWorldTrackingConfiguration()
guard let obj = ARReferenceObject.referenceObjects(inGroupNamed: "Resources",
bundle: nil)
else { return }
configuration.detectionObjects = obj // Allows you create ARObjectAnchor
sceneView.session.run(configuration)
对比
let config = ARWorldTrackingConfiguration()
guard let img = ARReferenceImage.referenceImages(inGroupNamed: "Resources",
bundle: nil)
else { return }
config.detectionImages = img // Allows you create ARImageAnchor
config.maximumNumberOfTrackedImages = 3
sceneView.session.run(config)
然而,如果你想在RealityKit中实现类似的行为,请使用以下代码:
let objectAnchor = AnchorEntity(.object(group: "Resources", name: "object"))
或者
let imageAnchor = AnchorEntity(.image(group: "Resources", name: "model"))
渲染引擎
- 渲染与锚点相连的虚拟模型。
目前,ARKit有四个伙伴帮助您渲染3D和2D图形:
- RealityKit(三维引擎)
- SceneKit(三维引擎)
- Metal(三维引擎)
- SpriteKit(二维引擎)
材质
- 使用遮挡功能展示虚拟模型。
在RealityKit模块中,所有材质都是符合Material协议的结构。目前有6种类型的材质。您需要使用OcclusionMaterial
。
- OcclusionMaterial(一种隐藏在其后渲染的对象的不可见材质)
- SimpleMaterial(可应用于网格的基本材质)
- UnlitMaterial(简单材质,不响应场景中的灯光)
- VideoMaterial(使用AVPlayer播放视频的材质)
- PhysicallyBasedMaterial(模拟真实物体外观的材质)
- CustomMaterial(名称自说明的材质)
查看此文章了解如何在RealityKit中以编程方式分配材质。
此文章向您展示如何在SceneKit中分配自定义遮挡材质。
更新3D内容
- 让虚拟模型随图像/物体锚点移动。
要在 ARKit
+SceneKit
中实现此类行为,您需要使用 renderer(_:didAdd:for:) 或 session(_:didAdd:) 方法。在 RealityKit 中,AnchorEntities 会自动跟踪。
以下是在 renderer(_:didAdd:for:)
实例方法中使用 ARObjectAnchor 的示例:
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor) {
if let _ = anchor as? ARObjectAnchor {
let text = SCNText(string: "ARKit", extrusionDepth: 0.5)
let textNode = SCNNode(geometry: text)
node.addChildNode(textNode)
}
}
}