前言 RealityKit v.s. SceneKit

第1課曾介紹過 SceneKit, ARKit, RealityKit 之間的關係,其中 SceneKit 與 RealityKit 功能類似,都是用來建構3D虛擬場景,再與 ARKit 輸入的實體世界結合,達成虛實整合的擴增實境(AR)效果。

也就是說,RealityKit 可以完全取代 SceneKit 的功能,若單獨使用,可建構3D虛擬場景,做出逼真有趣的3D遊戲及各種應用,在Apple平台(macOS, iOS, iPadOS, visionOS)中執行。

若以RealityKit 加 ARKit,就能製作擴增實境(AR)應用,虛實整合。不過一旦用了ARKit,就只能在 iPadOS + Swift Playgrounds 環境中開發,無法在 macOS 上運作(原因在補充(11)提過,AR程式要搭配陀螺儀等硬體傳感器才能執行)。

下圖再次回顧 SceneKit、ARKit、RealityKit 發展歷程,值得注意的是,RealityKit 自2019年發表之後逐年更新,特別是2023年配合新產品 Vision Pro,新增 RealityView,以 “RealityView + SwiftUI + ARKit” 最佳組合來開發 visionOS 的AR應用,2024年再將 RealityView 擴展到 iOS/iPadOS/macOS。

截圖 2024-09-29 晚上10.05.35.png

而SceneKit自 2019年之後,除了加入SceneView(搭配SwiftUI)以及AI辨識臉型與人體動作之外(參考補充14),幾乎沒有再更新,未來3D主流明顯朝 RealityKit 發展。

至於 RealityKit 與 SceneKit 有何差別呢?主要有以下幾點:

  1. RealityKit 設計之初,就以擴增實境為優先考量,因此與 ARKit 的結合更緊密;SceneKit 設計初衷完全為了3D應用。
  2. RealityKit 採用ECS (Entity-Component-System)架構,以滿足更多樣的AR、AI、Game等需求。同樣採用 ECS 架構的,還有兩大遊戲引擎 — Unity 與 Unreal Engine (UE)。
  3. RealityKit 較 SceneKit 晚7年,有後來者優勢 — 也就是會採用更新的技術,例如預設的光照模型是更接近真實的物理材質(PhysicallyBaseMaterial)、預設的3D檔案格式為USD、非同步模式採用 async/await…等等。
  4. RealityKit 物件的命名規則與 SwiftUI 類似,不加任何縮寫字首。

這些RealityKit 與 SceneKit 的差異歸納如下表:

# 比較項目 SceneKit RealityKit
1 發表年份 2012 2019
2 產品定位 建構3D動畫/遊戲 建構AR應用/3D遊戲
3 主要架構 節點(樹狀結構) ECS (Entity-Component-System)
4 預設光照模型 Blinn-Phong PBR (Physically Based Rendering)
5 主要檔案格式 專屬格式(.scn) 開放格式(.usdz)
6 非同步模式 GCD (Grand Central Dispatch) async-await
7 命名規則 以SCN開頭,例如SCNNode 無加綴字首,例如Entity、Material