Augmented Reality: RealityKit VS SceneKit 비교 (1) 개요
iOS로 AR게임을 만들어보려고 한다.
AR을 지원하는 애플의 대표적 프레임 워크 2가지(SceneKit, RealitKit)를 비교하고,
같은 기능을 구현하여 테스트 해보겠다!
ARKit과 SceneKit VS RealityKit 개요
ARKit | |
정의 | (scenekit, spritekit, AVFoundation, Vision, UIKit 등의) Umbrella framework Intergrate hardware sensing features to produce augumented reality apps. *motion tracking, world tracking, scene understanding 등 |
출시 날짜 | 2017 |
제공 언어 | Object-C, swift |
지원 OS | iOS, iPadOS, MacOS, visionOS |
SceneKit | RealityKit | |
정의 | high-performance rendering engine with a descriptive API for import, manipulation, and rendering of 3D assets. | high-performance 3D simulation and rendering capabilities. |
출시 날짜 | 2012 *2017이후 업데이트 되지 않고 있음 |
2019 *apple의 rendering 프레임 워크 중 가장 최신의 것으로 아마 visionOS 타겟팅 |
제공 언어 | Object-C, swift | swift |
지원 OS | iOS, iPadOS, macOS, tvOS, visionOS, watchOS *visionOS에서는 2D View로만 보임. |
visionOS, iOS, iPadOS, macOS |
정리하자면, ARKit은 현실 공간을 센서로 인식하고 분석하는 umbrella 개념의 프레임 워크이고
sceneKit과 realitykit은 3D물체의 렌더링과 시뮬레이팅(움직이기, 충돌, 중력 등)의 기능을 제공하는 프레임 워크인듯 하다.
realityKit이 좀 더 최신 기술이고, 렌더링 측면에서 우수하다는 것 같은데 화질 차이가 날 정도의 큰 용량의 모델을 올려보지 않아서 모르겠다.
sceneKit과 realityKit의 뚜렷한 차이는 visionOS에 최적화 되있느냐의 차이인 듯한데..
일단 웬만한 AR기능들은 둘에서 모두 사용할 수 있기 때문에 구글링할 수 있는 샘플 코드가 많은 것으로 사용하시길!
+ 완전 잘 비교되어 있는 글
https://stackoverflow.com/questions/60505755/realitykit-vs-scenekit-vs-metal-high-quality-rendering
RealityKit vs SceneKit vs Metal – High-Quality Rendering
I'm creating an iOS app that I intend to display realistic/high-quality renders within AR. Whilst experimenting with these 3 options, I'm still unsure which of them I should go forward with develop...
stackoverflow.com
SceneKit VS RealityKit 구성 비교
SceneKit | RealityKit | |
View | SCNView | ARView, RealityView *realityComposer와의 호환 |
Structure | SCNNode 기반 | Entity 기반 |
공간 인식 | ARWorldTrackingConfiguration AROrientationTrackingConfiguration |
ARView(frame:, cameraMode:, automaticallyConfigureSession: true) |
좌표계 | 오른손 좌표계 | 오른손 좌표계 추정 |
이동 | SCNNode.simdTransform SCNNode.simdLocalTranslate |
Entity.transform Entity.move |
중력 | SCNPhysicsBody SCNNode.physicsBody |
ModelEntity.physicsBody |
콜라이더 | colliderNode | Entity.gernerateCollisionShapes |
충돌체크 | SCNPhysicsContactDelegate SCNPhysicsContact |
https://developer.apple.com/documentation/realitykit/collision-detection |
우선 표의 내용은 정확하지 않을 수 있다.
둘의 View의 structure가 서로 다르다. sceneKit은 node기반, RealityKit은 entity기반이다.
공간 인식은 둘 다 ARKit의 Configuration을 활용하는 듯 한데, 실행하는 과정이 조금 다르다.
그리고 둘 다 오른손 좌표계를 사용하는 듯한데, realitykit의 좌표계 관련 자료는 찾을 수 없었다.
아마 sceneKit과 동일할 것으로 예상.
중력과, 콜라이더, 충돌 체크 등의 물리적 작용에 관한 함수나 클래스들은 아래에서 테스트 하며 다시 살펴보도록 하자.
+ RealityView와 Real Composer Pro와 RealityKit.
Real이 붙은 것들끼리의 호환이 좋은 것 같고, 확실히 visionOS를 타겟팅하여 만든 기술들인듯 하다.
Real Composer Pro와 AR콘텐츠는 딱히 연동이 잘 되지 않는 듯 했다.
개별의 모델을 .usda로 가져와 띄우는 정도..?
테스트 하며 RealityView가 아닌 ARView에 Real Composer Pro의 scene을 불러와서 각 모델의 컴포넌트(transform 등)에 접근하는 방법을 시도했으나,실패했다.
Unity처럼 엔진의 각 컴포넌트 요소에 코드로 접근하며 제어할 수 있다면 참 편할 것 같았는데, 아직은 visionOS에서만 가능한 방법인듯 하다.
+ Real Composer Pro의 scene을 불러와서 각 컴포넌트에 접근하는 방법


RealityKitContent라는 것을 import하면 real Composer Pro의 Scene에 있는 각 모델들(Earth, Jupiter)에 개별 접근하고,
이들의 위치를 바꿔준다거나, material을 바꿔준다거나 하는 것이 가능한 듯했다.
단 visionOS에서만...