Machineboy空

Augmented Reality: RealityKit VS SceneKit 비교 (1) 개요 본문

언어/swift

Augmented Reality: RealityKit VS SceneKit 비교 (1) 개요

안녕도라 2024. 6. 23. 16:39

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에서만...