如何在运行时分别导入 usdz 文件和操作每个表面的材质?

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

基本上,我的要求是导入usdz,例如汽车。然后为每个身体部位应用不同的材料。例如:材料 A 到车身,材料 B 到后视镜,材料 C 到车轮等。

我可以遍历 ModelEntity 的 ModelComponent 中的材料并按如下方式分配材料。

func updateUIView(_ uiView: ARView, context: Context) {

    let entity = try! Entity.loadModel(named: "CarScene")
    
    var material = PhysicallyBasedMaterial()
    material.baseColor = PhysicallyBasedMaterial.BaseColor(tint:.red)
    material.roughness = PhysicallyBasedMaterial.Roughness(floatLiteral: 0.0)
    material.metallic = PhysicallyBasedMaterial.Metallic(floatLiteral: 1.0)
  
    for i in 0...(entity.model?.materials.count ?? 1) - 1 {
        entity.model?.materials[i] = material
    }
    
    let anchor = AnchorEntity(plane: .horizontal)
    anchor.addChild(entity)

    uiView.scene.addAnchor(carAnchor)
}

但是,我不知道哪种材料是哪种。如果我有多个 usdz 文件,我希望能够准确地为每个身体部位分配材料。那可行吗?在导入到我的 xcode 项目之前,我是否需要打破 usdz 模型并分配标识符?任何帮助将不胜感激。

swift augmented-reality arkit realitykit usdz
© www.soinside.com 2019 - 2024. All rights reserved.