ARKit에서 빛을 비추면 하나보다 더 낫습니다.

5181 단어 SceneKitiOSARKit
오늘 새로운 발견을 했으므로 잊지 않도록 메모해 둔다.

곤란한 일



ARKit로 배치한 3D 오브젝트에 omni 타입(전구의 빛)의 SCNLight를 설정해, 빛을 맞았을 때에 그림자가 너무 강하다고 느끼고 있었다.
구체적으로는 이런 느낌.



하지만 그림자가 너무 강하다고 해서 빛을 비추지 않으면 뻔뻔한 것처럼 보이고 리얼함이 빠져 버린다.
구체적으로는 이런 느낌.



그럴 때는 라이트를 조합하자!



ARKit(SceneKit)에서는 복수 SCNLight를 배치할 수 있는 것 같고, ambient 타입(모든 면을 일정하게 비추는 빛)과 omni 타입의 SCNLight를 배치하면 좋은 느낌이 되었다.
구체적으로는 이런 느낌.



omni 타입의 SCNLight는 위치에 따라 그림자가 붙는 방법이 달라지기 때문에 position을 제대로 설정해야 하지만, ambient 타입의 SCNLight는 어디에 배치해도 빛의 맞는 방식은 변하지 않으므로 자신은 rootNode의 속성으로 설정하고 버리고 있다.
    override func viewDidLoad() {
        super.viewDidLoad()

        // Set the view's delegate
        sceneView.delegate = self

        // Show statistics such as fps and timing information
        sceneView.showsStatistics = true

        // Create a new scene
        let scene = SCNScene()

        // Set the scene to the view
        sceneView.scene = scene

        // Setup Omni Light
        let omniLight = SCNLight()
        omniLight.type = .omni
        omniLight.intensity = 0
        omniLight.temperature = 0
        omniLight.castsShadow = true

        let omniLightNode = SCNNode()
        omniLightNode.light = omniLight
        omniLightNode.position = SCNVector3(0,10,1)
        sceneView.scene.rootNode.addChildNode(omniLightNode)

        // Setup Ambient Light
        let ambientLight = SCNLight()
        ambientLight.type = .ambient
        ambientLight.intensity = 0
        ambientLight.temperature = 0
        sceneView.scene.rootNode.light = ambientLight
    }

SceneKit을 사용하여 AR 앱 개발을 원하는 방향으로 정보를 정리하고 있으므로 여기도 참조하십시오.

좋은 웹페이지 즐겨찾기