在 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
另外值得注意的是,你的光强度很高,我想这只是因为你之前没有看到效果!
我有一个非常简单的 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
另外值得注意的是,你的光强度很高,我想这只是因为你之前没有看到效果!