Swift/Swift 개발 노트

[iOS/SceneKit] 특정 노드만 남기고 보이게 만들기

힛해 2024. 8. 21. 12:24
728x90

 

이전 updateUIView 가 실행이 안돼요 - 2 의 마지막 영상을 보면 특정 노드만 남기지만 밝기도 같이 줄어드는 것을 볼 수 있다.

 

이는 따로 설정해둔 환경조명, 방향성 조명 노드도 같이 지워지기 때문이다.

 

환경조명과 방향성 조명 노드를 남기려면 아래 두가지 설정이 필요하다.

 

  1. 조명노드들 name 설정
  2. 조건문에서 조명노드들 isHidden 제외 조건 추가

 

작성해보자

 

1. 노드 name 설정

func makeCamera() -> SCNNode {
            let cameraNode = SCNNode()
           cameraNode.camera = SCNCamera()
           ...
            cameraNode.name = "camera"
            return cameraNode
    }

    func makeAmbientLight() -> SCNNode{
        let ambientLightNode = SCNNode()
        let ambientLight = SCNLight()
        ...
        ambientLightNode.name = "ambientLight"
        return ambientLightNode
    }

    func makeDirectionalLight() -> SCNNode {
        let directionalLightNode = SCNNode()
        let directionalLight = SCNLight()
        ...
        directionalLightNode.light = directionalLight
        directionalLightNode.name = "directionalLight"
        
        // 방향성 조명의 방향 설정
        directionalLightNode.position = SCNVector3(x: 5, y: 5, z: 10)
          directionalLightNode.look(at: SCNVector3.init(x: 0, y: 0, z: 0)) // 장면의 중심을 향하도록 조명 방향 설정
        
        return directionalLightNode
    }

 

위와 같이 name들을 설정해준다

 

2. 조건문 조건 추가

func hideAllNodesExcept(node: SCNNode, rootNode: SCNNode) {
        for childNode in rootNode.childNodes {
            if childNode != node && childNode.name != "camera"  && childNode.name != "ambientLight" && childNode.name != "directionalLight" {
                childNode.isHidden = true
            }
        }
    }

 

이렇게 기본 설정 노드들을 제외하면 어떤 매개변수가 들어오더라도 동일한 환경값에서 모델 출력이 가능해진다!