在 RealityKit 中添加点光源

Adding a Point Light in RealityKit

我有一个非常简单的 RealityKit 场景(没有 AR),上面有一个盒子。虽然盒子的侧面是彩色的(我假设是由于默认灯),但正面是黑色的。所以我决定在相机的位置添加一个点光源(基于其他 Whosebug 答案,以及与盒子相同的锚点),但盒子仍然是黑色的。我错过了什么?

override func viewDidLoad() {
        super.viewDidLoad()
        
        myARView.environment.background = .color(.black)

        let anchor = AnchorEntity()
        myARView.scene.anchors.append(anchor)
        
        let box = MeshResource.generateBox(size: 0.3) // Generate mesh
        let material = SimpleMaterial(color: .blue, isMetallic: true)

        let entity = ModelEntity(mesh: box, materials: [material])
        entity.name="My Box"
        entity.generateCollisionShapes(recursive: true)
        entity.position=SIMD3(x: 0.2, y: 0.8, z: -1)
        anchor.addChild(entity)
        
        let pointLight = PointLight()
        pointLight.light.color = .red
        pointLight.light.intensity = 15000000
        pointLight.light.attenuationRadius = 7.0
        pointLight.position = myARView.cameraTransform.translation // 0, 0, 2
        
        anchor.addChild(pointLight)
    }

这里有几件事,最值得注意的是您的 material 设置为 .blue,而您正尝试使用 .red 灯点亮它。由颜色制成的 material 包含零红色(rgb 形式),因此光线不会对其产生影响。如果您使用带有红色滤镜的眼镜,绿色和蓝色只会显示为黑色,只有红色会透过。

即使你把它换成 .white 灯,它看起来也不会有太大的不同。这就是将 isMetallic 设置为 true 的默认 SimpleMaterial 的样子;您只会看到光的反射,而不是看到光照射到它上面。

这是因为 material 的粗糙度设置为 0,稍微增加一点你就会看到立方体被你的点光源照亮了。

var material = SimpleMaterial(color: .blue, isMetallic: true)
material.roughness = 0.1

另外值得注意的是,你的光强度很高,我想这只是因为你之前没有看到效果!