5

RealityKit 的文档包括 structs: OcclusionMaterialSimpleMaterialUnlitMaterial用于将材料添加到ModelEntity.

或者,您可以加载附加了材料的模型。

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

4

1 回答 1

8

更新日期:2021 年 6 月 8 日

目前 RealityKit 2.0 和 RealityFoundation 共有 6 种材质

因此,您可以将以下代码与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)
于 2019-07-02T09:36:37.380 回答