除了Vision Pro之外,更普及的 iPad 和 iPhone 也可以執行AR應用,想要開發AR應用,目前在Apple軟體框架上有兩種選擇,一是 SceneKit + ARKit,第二種是 RealityKit + ARKit,這其中 SceneKit 最早(2012年)出現,最初是用來開發3D遊戲,所以能夠操作各種3D物件,可說是空間運算的第一步,我們就先從SceneKit開始學起。

SceneKit, ARKit, RealityKit 三者的發布時間關係如下圖:

截圖 2024-02-28 下午2.05.27.png

從上圖可以看出,SceneKit 發布時間甚至比Swift/SwiftUI還早,剛開始得用Objective-C語言來開發3D應用,後來推出 SCNView (SceneKit 物件的字首大多為 SCN 開頭)用於 Swift + UIKit,2019年之後再新增 SceneView 搭配 SwiftUI。

用 SceneKit 寫的3D遊戲,最好的例子就是Swift Playgrounds所附的官方遊戲,例如「開始編寫程式碼」、「Blu的冒險」…等等。底下我們就先用 SceneView + SwiftUI 來顯示一個簡單的3D模型。

6-1a 顯示3D幾何模型

在 SceneKit 中,所有的虛擬物件會用樹狀結構連在一起,每個虛擬物件稱為一個「節點(node)」,對應 SCNNode 物件類型,每個節點的屬性包含虛擬物件的形狀、外觀、空間中的座標…等等,所有節點合在一起稱為「場景(scene)」,對應 SCNScene 物件類型。

所以要用 SceneKit 開發3D應用程式,簡單地說,就是先設定好各式各樣的3D模型及虛擬物件,成為一個個節點,然後加入到同一場景中,就可以透過 SceneView 將整個(或部分)場景顯示出來。概念如下圖所示:

截圖 2024-02-29 晚上10.50.23.png

上面「場景概念圖」中,有3種特殊節點值得注意:

  1. 每個場景有個唯一的「根節點」,其屬性(變數)名稱為 rootNode。
  2. 每個場景有一個或多個「鏡頭節點」,代表使用者的視角(也就是螢幕所看到的角度),其屬性名稱為 cameraNode。注意這裡的「鏡頭(camera)」是虛擬鏡頭,並非真實設備。
  3. 每個場景會有一個或多個「燈光節點」,可透過屬性名稱 lightNode 來設定。這裡的「燈光」也是虛擬的,並非實物。