HIT해
[iOS/SceneKit] Blender hdri 불러와서 적용하기 본문
블렌더에서 디자인한 질감 및 양감을 구현하기위해 SCNLight를 사용해서 방향성조명을 추가해 명암효과를 내려 했지만
확실히 블렌더에서 디자인 된 느낌을 따라하기에는 부족함이 있었다.
그래서 나온 해결방법이 블렌더 hdri 적용이다.
우선 hdri 파일을 불러와보자.
1. hdri 파일 프로젝트에 추가하기
나는 이부분이 제일 어려웠다.
UIImage로 불러와야하는지 Image로 불러와야하는지 어떠한 래퍼런스도 찾아볼 수 없었다.
또 어떤 형태로 받아와야하는지도..
그래서 로컬 파일을 불러오는 형식으로 만들어보았다.
guard let hdrURL = Bundle.main.url(forResource: "lythwood_field_4k", withExtension: "hdr") else {
print("HDR 이미지 파일을 찾을 수 없습니다.")
return scene
}
scene.lightingEnvironment.contents = hdrURL
그런데 계속 이미지 파일을 찾을 수 없었다.
Assets.xcassets 파일에 ImageSet, Data Set 으로추가를 하고 빌드할때 포함되있는것까지 확인했는데 불러오지 못했다.
해결방법은 바로 리소스 폴더 하위에 바로 집어 넣는것이다.
추가해줄때 target 추가를 해주어야 정상적으로 추가되어 불러올 수 있게 된다.
그렇게 추가해주고 불러온 hdri 파일에 설정된 값을 확인해보자.
let materialProperty = SCNMaterialProperty(contents: hdrURL)
print("Intensity: \(materialProperty.intensity)")
print("Minification Filter: \(materialProperty.minificationFilter)")
print("Magnification Filter: \(materialProperty.magnificationFilter)")
print("Mipmap Filter: \(materialProperty.mipFilter)")
print("Contents Transform: \(materialProperty.contentsTransform)")
print("Wrap S: \(materialProperty.wrapS)")
print("Wrap T: \(materialProperty.wrapT)")
print("Mapping Channel: \(materialProperty.mappingChannel)")
출력결과
Intensity: 1.0
Minification Filter: SCNFilterMode(rawValue: 2)
Magnification Filter: SCNFilterMode(rawValue: 2)
Mipmap Filter: SCNFilterMode(rawValue: 0)
Contents Transform: SCNMatrix4(m11: 1.0, m12: 0.0, m13: 0.0, m14: 0.0, m21: 0.0, m22: 1.0, m23: 0.0, m24: 0.0, m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0, m41: 0.0, m42: 0.0, m43: 0.0, m44: 1.0)
Wrap S: SCNWrapMode(rawValue: 1)
Wrap T: SCNWrapMode(rawValue: 1)
Mapping Channel: 0
그럼 우리의 ScnView에 추가해보자.
2. hdri scene 적용하기
scene.lightingEnvironment.contents = hdrURL
scene.lightingEnvironment.intensity = 1.5 // 디자이너분이 말씀해주시는 값으로..!
정상적으로 추가되는 것을 볼 수 있다.
기존에 추가해두었던 카메라 및 조명들은 다 지워주어야한다.
추가적으로 환경조명의 경우 블렌더상에서도 직접 추가해주기때문애 환경조명은 자식노드에 추가해주자..!
Before & After 비교
노력해서 적용한 보람이 있다..!
'Swift > Swift 개발 노트' 카테고리의 다른 글
[iOS/SceneKit] 특정 노드 액션 구현하기 (0) | 2024.09.03 |
---|---|
[iOS/SwiftUI] TCA NavigationStack 개발하기 (1.12.1) (0) | 2024.09.02 |
[iOS/TCA] @CasePathable (0) | 2024.08.30 |
[iOS/SwiftUI] 스크린샷 감지 TCA (0) | 2024.08.30 |
[iOS/SceneKit] defaultCameraController 알아보기 (0) | 2024.08.29 |