修改模型以与 ARbodyTrackingConfiguration 一起使用

问题描述 投票:0回答:1

我一直在努力学习如何使用 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 中以用于人体跟踪吗?

(使用身体追踪时模型外观不正确) (仅作为实体添加时模型的正确外观 - 此处未启用身体跟踪)

swift swiftui arkit realitykit arbodyanchor
1个回答
0
投票

为 AR 身体跟踪准备自定义 3D 角色

要使用自定义角色模型(而不是 Apple 的

robot.usdz
),请完成以下步骤,请仔细阅读为 MoCap 安装模型文章:

  • 从开发者资源下载机器人两足动物模型
  • 在 Autodesk Maya 2024 中打开 FBX 机器人版本
  • 解除骨架与网格的绑定,删除机器人网格
  • 保留所有骨骼的原生关节名称和关节层次结构
  • 加载自定义网格并将其绑定到骨架
  • 为装配模型的每个关节绘制新的权重
  • 将骨架绑定到自定义网格体
  • 导出 FBX 角色(与骨骼系统网格体)
  • 使用 Reality Converter 将新模型转换为 USDZ

这是一个代码:

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) { } }
    
© www.soinside.com 2019 - 2024. All rights reserved.