我想在 ARKit 中构建一个演示应用程序,并且我对 Beta 版当前可能实现的功能有一些疑问(Apple 一直将其称为 RealityKit 或 ARKit 3.0)。
我正在尝试构建的演示应用程序应执行以下操作:
识别真实环境中的物体或图像,并在那里创建一个锚点
渲染附加到锚点的虚拟模型
让虚拟模型呈现遮挡
让虚拟模型与锚图像/对象一起移动
我尝试改编早期版本(利用 SceneKit 的 ARKit 2.0)中的一些代码,但某些功能(如人物遮挡)不是 ARKit 2.0 的一部分。
由于 Apple 一直在迭代他们的测试版,因此在他们的网站上和 WWDC 2019 上宣传的许多功能似乎已经从 RealityKit 的文档中消失了(人物遮挡、身体跟踪、世界跟踪)。
根据我的理解,ARKit 2.0 可以实现第 (1) 和 (2) 项。第 (3) 项尽可能与测试版一起宣传,但我几乎看不到任何文档。
在最新的测试版中可以这样做吗?如果是这样,最好的方法是什么?如果没有,是否有任何解决方法,例如混合新旧 API 之类的?
如何使用 RealityKit 跟踪相机的位置?有几个例子在使用 SceneKit,但我发现没有一个使用 RealityKit。我需要一个功能,例如:
func session(_ session: ARSession, didUpdate frame: ARFrame) {
// Do something with the new transform
let currentTransform = frame.camera.transform
doSomething(with: currentTransform)
}
Run Code Online (Sandbox Code Playgroud) 我正在 swift 中尝试新的 RealityKit 框架,我想在 ARAnchor 上放置一个 2D 图像。我设法创建了一个网格平面,并尝试将图像作为纹理添加到该平面。我发现我可以为材料提供局部图像。我该如何使用 UIImage 代替?
let resource = try? TextureResource.load(named: "restart")
var material = UnlitMaterial()
material.baseColor = MaterialColorParameter.texture(resource!)
material.tintColor = UIColor.white.withAlphaComponent(0.99)
let imagePlane = ModelEntity(mesh: MeshResource.generatePlane(width: 0.25, height: 0.25), materials: [SimpleMaterial(color: color, isMetallic: true)])
Run Code Online (Sandbox Code Playgroud) 我想知道是否有人知道是否可以加载 AR 对象(例如,从 Web url 加载 .usdz 并将其放置在 AR 视图中)。我尝试过这个:
let fileUrl = NSURL(string: "https://developer.apple.com/augmented-reality/quick-look/models/drummertoy/toy_drummer.usdz")
cancellable = Entity.loadModelAsync(contentsOf: fileUrl! as URL)
.sink(receiveCompletion: { completion in
self.cancellable?.cancel()
}, receiveValue: { [self] (model: Entity) in
if let model = model as? ModelEntity {
let anchorEntity = AnchorEntity(anchor: anchor)
anchorEntity.addChild(model)
arView.scene.addAnchor(anchorEntity)
loadingView.isHidden = true
}
})
Run Code Online (Sandbox Code Playgroud)
但它不起作用并抛出错误Failed to open scene 'https://developer.apple.com/augmented-reality/quick-look/models/drummertoy/toy_drummer.usdz'.
如果可能的话你会吗?
在 MacOS 12 beta 上运行 Xcode 13 beta,部署到运行 iOS 15 beta 的 iPad Pro 第四代。
在 Xcode 中,我使用增强现实应用程序创建一个应用程序,选择默认的 SwiftUI 界面、Swift 语言和 RealityKit 内容技术。
创建后,我绝对不会对代码进行任何更改,只需在我的 iPad 上运行即可。除了下面显示的其他错误/消息之外,我还收到许多弃用和类型不存在的错误/消息。
我对 Apple 开发环境有点陌生,所以也许我错过了一些非常基本的东西,但为什么我会在模板代码上收到这么多警告/错误?这是苹果测试版产品的典型情况吗?
2021-06-15 09:37:13.272034-0700 Test[47081:3536556] Metal GPU Frame Capture Enabled
2021-06-15 09:37:13.272264-0700 Test[47081:3536556] Metal API Validation Enabled
2021-06-15 09:37:15.828657-0700 Test[47081:3536556] [AssetTypes] Registering library (/System/Library/PrivateFrameworks/CoreRE.framework/default.metallib) that already exists in shader manager. Library will be overwritten.
2021-06-15 09:37:16.003778-0700 Test[47081:3536556] [Assets] Resolving material name 'engine:BuiltinRenderGraphResources/AR/suFeatheringCreateMergedOcclusionMask.rematerial' as an asset path -- this usage is deprecated; instead provide …Run Code Online (Sandbox Code Playgroud) 了解ARKit,我正在观看所有AR WWDC内容。在ARKit 3 介绍中,第一次使用RealityKit ,有一个使用AnchorEntity和下面第一个屏幕截图中的第三个便利初始化器的示例。
当在Xcode 13 Beta中使用 iOS15 目标
创建项目时,这些初始化程序中的很少一部分会消失,如下面的屏幕截图所示:
我查阅了文档,没有发现与此相关的额外信息。初始化程序可用,但没有有关计划弃用的信息。我觉得很奇怪。
https://developer.apple.com/documentation/realitykit/anchorentity/3255326-init
可能是什么原因?这可能是与 beta xcode 相关的某种错误吗?
我正在尝试将平面检测添加到一个简单的ARKit应用中。我想将图片放在垂直平面上。
因此,首先我需要检测平面,然后可以添加在RealityKit中创建的对象锚。
但是问题是我不确定使用ARKit 3和Xcode 11检测平面并将其添加到场景中的正确方法。
它应该很简单:
import ARKit
import RealityKit
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
let arConfiguration = ARWorldTrackingConfiguration()
arConfiguration.planeDetection = .horizontal
arView.session.run(arConfiguration)
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
类型“ ARView”的值没有成员“会话”
我什至尝试了以下内容,Apple在其WWDC演示(4:27)中将其用作示例,
苹果演示!
let anchor = AnchorEntity(plane: .verticle, minimumBounds: [0.2, 0.2])
arView.scene.addAnchor(anchor)
Run Code Online (Sandbox Code Playgroud)
但是尝试创建AnchorEntity时出现以下错误
表达式类型“ AnchorEntity”在没有更多上下文的情况下是模棱两可的
import UIKit
import RealityKit
import ARKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
}
override func viewDidLoad() {
super.viewDidLoad()
}
func …Run Code Online (Sandbox Code Playgroud) 我试图理解有关 Scenekit 的 Apple 文档,在谈论 SCNNode 变量时发现一些问题:
\n例如,使用 simdScale 变量或scale 变量应用比例有什么区别?
\n阅读文档,\n无法理解何时以及为何使用“管理节点\xe2\x80\x99s 变换(SceneKit 类型)”下的变量以及何时使用管理节点变换下的变量
\n例如,使用 var "scale" 还是 simdScale 更改 SCNode 的比例更好?
\n我正在使用 RealityKit 并努力设置应该可读并放置在盒子上的文本。无论盒子如何设置,它都应该始终遵循盒子的位置。
let textMesh = MeshResource.generateText("ABC", extrusionDepth: 0.001, font: fonts)
let textEntity = ModelEntity(mesh: textMesh, materials: [UnlitMaterial(color: .black)])
let boxMeshForText = MeshResource.generateBox(width: 0.25,
height: 0.1,
depth: 0,
cornerRadius: 0.001)
let boxEntityForText = ModelEntity(mesh: boxMeshForText,
materials: [UnlitMaterial(color: UIColor.white)])
textEntity.setPosition([-0.09, -0.03, 0.001], relativeTo: boxEntityForText)
boxEntityForText.addChild(textEntity)
let textAnchor = ARAnchorEntity()
textAnchor.addChild(boxEntityForText, preservingWorldTransform: true)
textAnchor.setPosition([0.05, 0.05, 0.02], relativeTo: anchor)
textAnchor.transform.rotation = simd_quatf(angle: -90 * .pi/180, axis: [1,0,0])
anchor.addChild(textAnchor)
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我错误的结果。我想要的结果可以在附图中看到。
下面的 WWDC21 演讲展示了如何“使用 Metal 光线追踪增强您的应用程序”。
如何将 Metal 光线追踪添加到 SceneKit 或 RealityKit 应用程序?
任何基本示例或参考代码将不胜感激!