RealityKit 的文档包括结构: OcclusionMaterialSimpleMaterialUnlitMaterial 用于向 ModelEntity 添加 Material 。

或者,您可以加载带有附加 Material 的模型。

我想以编程方式向 ModelEntity 添加自定义 Material /纹理。如何在不将 Material 添加到 Reality Composer 或其他一些 3D 软件中的模型的情况下即时实现这一点?

最佳答案

更新时间:2021 年 6 月 8 日

  • SimpleMaterial
  • UnlitMaterial
  • OcclusionMaterial
  • VideoMaterial(查看 this post 以了解如何设置它)
  • PhysicallyBasedMaterial
  • CustomMaterial

  • 因此,您可以将以下代码与 SimpleMaterial() 类一起使用:
    @IBOutlet var arView: ARView!
    
    let sceneObjects = try! Experience.loadAllMyObjects()
    
    var simpleMaterial = SimpleMaterial()
    
    simpleMaterial.baseColor = try! MaterialColorParameter.texture(
                                              TextureResource.load(named: "img.jpg"))
    
    simpleMaterial.metallic = MaterialScalarParameter(floatLiteral: 0.9)
    simpleMaterial.roughness = MaterialScalarParameter(floatLiteral: 0.1)
    simpleMaterial.tintColor = UIColor.yellow
    
    /*
    
    simpleMaterial.baseColor = MaterialColorParameter.color(UIColor(red: 0.7,
                                                                  green: 0.5,
                                                                   blue: 0.2,
                                                                  alpha: 1.0))
    */
    
    目前 RealityKit 2.0 中有 5 种方法来创建 3D 基元:
  • generateBox(...)
  • generateSphere(...)
  • generatePlane(...)
  • generateText(...)
  • generate(...) – 从网格描述符列表创建网格资源

  • 所以让我们使用其中之一:
    let mesh: MeshResource = .generateBox(size: 2.5)
    
    let component = ModelComponent(mesh: mesh,
                              materials: [simpleMaterial])
    
    sceneObjects.components.set(component)
    arView.scene.anchors.append(sceneObjects)
    

    如何在 RealityKit 中生成 SceneKit 的着色器
    我们知道在 SceneKit 中有 5 种不同的着色模型,因此我们可以使用 RealityKit 的 SimpleMaterialPhysicallyBasedMaterialUnlitMaterial 来生成我们已经习惯的所有这五种着色器。
    让我们看看它的样子:
    SCNMaterial.LightingModel.blinn            –  SimpleMaterial(color: . gray,
                                                             roughness: .float(0.5),
                                                            isMetallic: false)
    
    SCNMaterial.LightingModel.lambert          –  SimpleMaterial(color: . gray,
                                                             roughness: .float(1.0),
                                                            isMetallic: false)
    
    SCNMaterial.LightingModel.phong            –  SimpleMaterial(color: . gray,
                                                             roughness: .float(0.0),
                                                            isMetallic: false)
    
    SCNMaterial.LightingModel.physicallyBased  –  PhysicallyBasedMaterial()
    
    SCNMaterial.LightingModel.constant         –  UnlitMaterial(color: .gray)
    

    关于swift - RealityKit – 以编程方式向 ModelEntity 添加 Material ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56828648/

    10-10 09:03