HIT해
[iOS/SceneKit] SceneView dae 파일 불러오기 본문
지난 포스팅에서 블렌더 설정값을 가져오지 못하는 상황을 겪게 되고...
fbx 뿐만 아니라 mtl , obj , usdz.... 3D 모델 파일의 대표주자 녀석들 모두 블렌더 설정값을 가져오지 못하는 사태가 발생했다.
blender to Swift 로 dae 확장자를 자주 쓰는 것을 확인하고 적용해보니 다른 파일들과는 사뭇 다른 모습이 보였다.
바로 Physically Based 를 했을때 블렌더 설정값이 나온다는 것이었다.
그럼 dae 파일을 출력하는 방법에 대해 알아보자
1. dae 프로젝트 추가하기
dae 파일을 가져올때 obj usdz 파일과 마찬가지로 SceneKit Tool 에 드래그 앤 드랍으로 가져와 scn 파일로 import 해준다.
2. Materials 추가하기
+ 버튼을 눌러 등록되어있는 재질들을 전부 추가해주자.
3. Properties Shading 설정
블렌더 설정값을 가져오기 위해서는 Physically Based 로 설정해주어야한다
Constant는 조명이 없을때의 모습
Shadow Only 는 투명하게
Custom Program 은 설정값을 임의로 변경할 수 있다.
모든 Materials 의 설정을 끝마치면 잘 다듬어진 모델을 볼 수 있을 것이다.
4. 조명 추가하기
scn 파일을 열어보면 조명이 추가되어있어 빛이 반사되는 것을 볼 수 있다.
그러나 단순히 scn 파일을 불러오면 매우 어두워서 모델이 그림자진것을 볼 수 있다.
그래서 우리는 두가지를 추가해주어야한다.
- 환경 조명 : 모델 파일 전체 조명
- 방향성 조명 : 특정 시점에서 쬐는 조명
예시코드
let scene = SCNScene(named: "Dols.scnassets/last.scn") ?? SCNScene()
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 10)
cameraNode.camera?.automaticallyAdjustsZRange = true
scene.rootNode.addChildNode(cameraNode)
// 환경 조명 추가
let ambientLightNode = SCNNode()
let ambientLight = SCNLight()
ambientLight.type = .ambient
ambientLight.intensity = 1000 // 환경 조명 강도 조절
ambientLightNode.light = ambientLight
scene.rootNode.addChildNode(ambientLightNode)
// 방향성 조명 추가
let directionalLightNode = SCNNode()
let directionalLight = SCNLight()
directionalLight.type = .directional
directionalLight.intensity = 3000 // 방향성 조명 강도 조절
directionalLight.color = UIColor.white // 조명 색상 설정
directionalLight.castsShadow = true // 그림자 생성 설정
directionalLightNode.light = directionalLight
// 방향성 조명의 방향 설정
directionalLightNode.position = SCNVector3(x: 5, y: 5, z: 10)
directionalLightNode.look(at: SCNVector3.init(x: 0, y: 0, z: 0)) // 장면의 중심을 향하도록 조명 방향 설정
scene.rootNode.addChildNode(directionalLightNode)
이렇게 추가해주면 파일을 열었을때와 같은 밝기로 볼 수 있다.
방향성 조명의 시작점, 밝기, 환경조명의 밝기는 위와같이 커스텀해 맞춤 설정을 할 수 있다!
+ 블렌더 설정값 받아오게 하는게 몇시간이 걸렸는지.. 밤을 꼬박 셋다..
'Swift > UIKit 개발 노트' 카테고리의 다른 글
[iOS/SceneKit] updateUIView가 실행이 안돼요 - 2 (0) | 2024.08.20 |
---|---|
[iOS/Swift] updateUIView 가 실행되지 않아요. (0) | 2024.08.20 |
[iOS/Swift] fbx Xcode에 출력하기 (0) | 2024.08.18 |
[iOS/SceneKit] .scn Material 을 바꿔보자 (0) | 2024.08.18 |
[iOS/SceneKit] SCNView (0) | 2024.08.18 |