在第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。
而SceneKit自 2019年之後,除了加入SceneView(搭配SwiftUI)以及AI辨識臉型與人體動作之外(參考補充14),幾乎沒有再更新,未來3D主流明顯朝 RealityKit 發展。
至於 RealityKit 與 SceneKit 有何差別呢?主要有以下幾點:
這些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 |