觀看 WWDC23 Meet Object Capture for iOS 筆記
先拍攝各種角度的照片,再透過 Mac 的 Object Capture API,經過幾分鐘轉換,最後變成 3D 模型
然而現在可以直接透過 iPhone 直接做到這些事情
但需要花到好幾分鐘的時間,上面的範例預計就要15分鐘才生成,最後產出 USDZ 格式的模型。
Sample code → Scanning objects using Object Capture
另外也可參考 WWDC 24 Discover area mode for Object Capture
原本的 Object Capture 系統在面對足夠紋理細節的物體,表現最佳
但在 23 年 Apple 也進一步升級,使用了 LiDAR 掃瞄器,對一些紋理不足的物體進行重構,所以更好掃描了。
避免表面反光、透明或包含纖細結構的物體進行建模
Apple 建議盡可能用多種角度拍攝圖像
提供一個刻度圓盤來輔助拍攝
拍攝前確保環境有良好的照明,以便獲得準確的顏色,太暗會跳出提醒
要緩慢而流暢繞物體移動,保持穩定,防止出現模糊的影像,過快的移動也會有提醒
保持適當的距離,使物體在取景匡內的位置恰到好處,太近或太遠也會提醒
固定好機位,假如移動到視窗太遠的地方也會被提醒
適合翻轉:
不適合翻轉:
Apple 也有提供 API 來確保物體是否有足夠的紋理支持翻轉拍攝
從剛剛的 demo 得知,我們使用 Object Capture 有兩個步驟
影像捕捉 API 分為兩部分
因為他是 reference type,推薦將 session 以持久狀態存儲在基於真實數據模型中,直到 session 完成。
透過 ObjectCaptrueSession.start(imageDirectory:configuration:)
,先決定將捕捉的圖像儲存在何處,或透過 ObjectCaptureSession.Confoguration.checkpointDirectory
來檢查目錄
再來使用 ZStack
包著 ObjectCaptureView(session:)
並把剛剛準備的 session 傳入就可以使用了,而且他附帶著對準的輔助視窗,輔助我們將物體放置框框內
我們可以透過 session.state
來判斷是否到 .ready
的狀態,是的話可以呈現一顆按鈕,來提供開始掃描物體的功能(使用 session.startDetecting()
)
在 demo 中,還有一個 Reset button,可以讓我們從狀態 Detecting 返回 Ready
假如狀態切到 .detecting
,表示我們偵測到物體,此時我們就可以開始拍攝(使用 session.startCapturing()
)
為了讓掃描得更準,Apple 推薦進行三輪掃描
所以接下來有兩條路可以走
第一,取決是否要翻轉物體,這樣就可以拍攝到前次沒拍到的部分,例如物體底部,此狀況可以 call beginNewScanPassAfterFlip()
第二,不想要翻轉拍攝物體,但可以選擇不同的高度拍攝,這時可以 call beginNewScanPass()
,這時會重置捕捉刻度盤,但 session 會處於拍攝狀態
再來,三輪拍攝都結束後,會觸發 session.userCompletedScanPass
可以出現按鈕讓 user 呼叫 session.finish()
然後 session 會等待數據進行存儲,存完後就會自動移至 Completed
但也有可能遇到儲存失敗,此時就需要重新生成 session
透過 ObjectCapturePointCloudView(session:)
,可以展示剛剛拍攝的物體,而且點擊互動,進行各種角度預覽。
最後拍攝完建立模型
細節可以參考 WWDC 21 Create 3D models with Object Capture
為了讓手機端可以生成模型和預覽優化,所以在 iOS 上支持簡化這一細節等級,重建的模型包含漫反射、環境光遮蔽和髮線的紋路映射,均為異動設備顯示而設計
假如產生更多細節紋路,還是要把圖像傳到 Mac 上建立
也可以透過 Mac 再加入拍攝細節
其他細節要參考 WWDC 23 Meet Reality Composer Pro
甚至有可能不需要寫任何 code,因為 Object Capture 已經整合到了新 macOS App,就是 Reality Composer Pro
Increased performance on Mac: 目前已大大提升 Mac 上模型質量和重建速度
Estimated processing time: 還提供預計重建時間
Pose output: 位姿輸出,可以要求每幅圖像的高質量位姿,每項位姿都包含了拍攝該圖片時預計的相機位置和朝向
Custom detail level: 自定義細節等級