不管是 SceneKit 或 RealityKit,內建的幾何模型都寥寥可數,即使能用程式加以組合,還是不夠方便,實際應用時,常需導入外部資源。

事實上,設計3D程式就應該善用外部資源。為什麼呢?

自從1995年第一部全3D動畫電影「玩具總動員」上映之後,全世界3D電影特效、3D遊戲開始蓬勃發展,很多人投入3D內容創作,累積至今,不論是3D模型、材質紋理、人物表情、動作、視覺特效…,大量作品在網上買賣或免費下載,已形成龐大數位內容產業。

除了3D模型之外,材質(material)與紋理(texture)也需要外部資源,一般使用 .jpg 或 .png 格式,稱為紋理貼圖;最後,我們還會學習如何更換環境圖案,稱為天空盒(skybox),用到一種高動態範圍的 .exr 環景圖片。

本節先學習如何載入模型檔案。

6-7a 載入本機.usdz模型檔

RealityKit 支援的 3D 檔案格式稱為 USD — 全名為「通用場景描述檔」(Universal Scene Description),由製作「玩具總動員」的皮克斯(Pixar)動畫工作室所制定並開放授權,又細分為四種檔案格式:.usd 原始格式、.usda 文字格式、.usdc 二進位格式、.usdz ZIP包裹格式(未壓縮)。

USD 可用來儲存整個虛擬場景(Scene),也就是一群個體(Entity)的集合,除了3D模型、材質貼圖、虛擬燈光、鏡頭視角之外,還可容納動畫、物理模擬、粒子系統…等特效,檔案大小從1KB簡單模型,到10GB電影場景,都能涵括。

在開始本節程式之前,請先下載一個3D模型檔案“Blender_ex1.usdz”,大小只有67KB,是筆者用 Blender 軟體練習的作品 ,下載後再導入 Swift Playground,如下圖:

截圖 2025-02-24 晚上11.27.48.png

檔案導入之後,要在 RealityKit 中加入 USDZ 檔案就非常簡單,只要一行程式:

let 本機模型 = try await ModelEntity(named: "Blender_ex1.usdz")

這行程式會將 USDZ 檔案轉換成我們熟悉的模型個體(ModelEntity),之後就可透過程式進一步操作。