HIT해

[iOS/Swift] fbx Xcode에 출력하기 본문

Swift/Swift 개발 노트

[iOS/Swift] fbx Xcode에 출력하기

힛해 2024. 8. 18. 07:16
728x90

 

디자인 툴에서 obj dae 로 내보냈을때 텍스쳐 하나하나 설정을 해주어야 하기에 fbx 파일로 SceneKit에 출력하기로 했다.

 

하지만 SceneKit 에서는 fbx 파일이 scn 으로 변환되지 않는다.( 왜...? 다 해준다며... )

 

그래서 fbx > usdz > scn 으로 바꿔줘야한다.

 

1. fbx to usdz

fbx 파일을 Reality Converter 로 열어준다.

 

우측 상단의 내보내기를 눌러서 저장하면 usdz 파일로 변환이 된다..!

 

2. usdz to scn

아주 간단하다.

Xcode > File > New > File > Scene Catalog 로 카탈로그를 만들어주면 SceneKit Scene Tool 이 나오는데

여기에 드래그 앤 드랍을 해준다.

 

3. 파일 출력하기

let scene = SCNScene(named: "폴더명.scnassets/파일명.scn") ?? SCNScene()

 

 

이렇게 하면 fbx 모델을 화면에 출력할 수 있다.

 

이때 주의할 점이 있다.

 

obj 나 dae 와 다르게 fbx 모델은 다른 파일 유형들보다 모델의 크기가 크게 설정되어 있다.

 

그래서 아무리 카메라 시점을 축소해도 카메라가 모델 내부에서 빠져나오지 못해 모델의 모습을 볼 수가 없다.

 

눈만 보이고 몸뚱아리는 어디에..

 

아래의 코드를 추가해 모델의 크기를 줄여주자

 let scene = SCNScene(named: "Dols.scnassets/last.scn") ?? SCNScene()
        
        // 너무 커서 그랬다..
        for node in scene.rootNode.childNodes {
              node.scale = SCNVector3(x: 0.1, y: 0.1, z: 0.1) // 스케일 값을 조정하여 모델의 크기를 조절
          }

 

위의 코드를 적용하면 모델이 제대로 보인다

 

+ fbx 로는 블렌더 상에서 설정해둔 질감 초기값을 불러오지 못한다.

 

physically Based 를 하면 블렌더에서 만들어둔 초기값이 가져와져야하는데 2단변환을 하는 과정을 거쳐서일까 초기값을 불러오지 못한다.

 

물론 위와 같이 SceneKit Tool 에서 재질을 변경할 수 있지만 여기서 한다는건... ( 지옥일 것이다... )

 

다음 포스팅은 블렌더 초기값을 가져올 수 있는 dae 파일 불러오는 법을 알아볼 것이다.