我一直在努力学习如何使用 Apple 的示例项目执行 3D 身体跟踪。我的目标是用我自己的 3D 模型替换此项目中的模型,我构建该模型是为了匹配该项目中包含的 Apple 可用的
robot.usdz
示例。
在转换为 USDZ 后,我已成功将 3D 模型导入 Xcode,并将模型附加到 ARBodyAnchor。但是,我的模型(请参阅随附的屏幕截图)显示在预期位置,但看起来完全错误。我使用以下代码加载模型:
var cancellable: AnyCancellable? = nil
cancellable = Entity.loadBodyTrackedAsync(named: "character/mytest").sink(
receiveCompletion: { completion in
if case let .failure(error) = completion {
print("Unable to load model: \(error.localizedDescription)")
}
cancellable?.cancel()
}, receiveValue: { (character: Entity) in
if let character = character as? BodyTrackedEntity {
character.scale = [0.5, 0.5, 0.5]
self.character = character
cancellable?.cancel()
} else {
print("Error: Unable to load model as BodyTrackedEntity")
}
})
当我将同一模型简单地作为实体导入时,去掉身体跟踪,我可以将其附加到水平面或身体,并且它可以正常加载。因此,用于 3D 跟踪的模型有些问题。
有人成功地将自定义 3D 模型加载到 Xcode 中以用于人体跟踪吗?
要使用自定义角色模型(而不是 Apple 的
robot.usdz
),请完成以下步骤,请仔细阅读为 MoCap 安装模型文章:
import SwiftUI
import RealityKit
import ARKit
struct ContentView : View {
var body: some View {
ARContainer().ignoresSafeArea()
}
}
struct ARContainer : UIViewRepresentable {
var arView = ARView(frame: .zero)
func makeUIView(context: Context) -> ARView {
arView.automaticallyConfigureSession = false
let config = ARBodyTrackingConfiguration()
arView.session.run(config, options: .resetTracking)
do {
let body = try Entity.loadBodyTracked(named: "Custom_Model")
let material_00 = SimpleMaterial(color: .white, isMetallic: true)
let material_01 = OcclusionMaterial()
body.model?.materials = [material_00, material_01]
let anchor = AnchorEntity(.body)
body.setParent(anchor)
arView.scene.anchors.append(anchor)
} catch {
print("Can't load Body Tracked Entity...")
}
return arView
}
func updateUIView(_ view: ARView, context: Context) { }
}