Search code examples
swiftaugmented-realityarkitrealitykitreality-composer

RealityKit – How to edit or add a Lighting?


I'm trying to add lighting in my RealityKit AR Scene. And I can't find the Lighting option in Reality Composer. If there's a way to add Directional Light or edit it then please tell me. I've tried Apple Documentation but can't understand how to add them.

enter image description here


Solution

  • At the moment you can't do it in Reality Composer, you need to use a RealityKit. So, you need to create a custom class that inherits from Entity class and conforms to HasPointLight protocol. Run this code in macOS project to find out how a PointLight setup works:

    import AppKit
    import RealityKit
    
    class Lighting: Entity, HasPointLight {
        
        required init() {
            super.init()
            
            self.light = PointLightComponent(color: .red,
                                         intensity: 100000,
                                 attenuationRadius: 20)
        }
    }
    
    class GameViewController: NSViewController {
        
        @IBOutlet var arView: ARView!
        
        override func awakeFromNib() {
            
            arView.environment.background = .color(.black)
            
            let pointLight = Lighting().light
            let boxAnchor = try! Experience.loadBox()
            
            boxAnchor.components.set(pointLight)
            arView.scene.anchors.append(boxAnchor)
            
            boxAnchor.steelBox!.scale = [9,9,9]
            boxAnchor.steelBox!.position.z = -0.5
        }
    }
    

    enter image description here

    The same way you can add a Directional Light to the scene. But remember: a position of Directional Light does not important, but an orientation does! By default it's oriented to north (-Z).

    class Lighting: Entity, HasDirectionalLight {
        
        required init() {
            super.init()
            
            self.light = DirectionalLightComponent(color: .red,
                                               intensity: 100000,
                                        isRealWorldProxy: true)
        }
    }
    

    enter image description here

    Also can read my STORY about lights on Medium.