WWDC23 Meet Object Capture for iOS

閱讀時間約 9 分鐘
New Zealand - Greenpoint Ship Graveyard

New Zealand - Greenpoint Ship Graveyard

觀看 WWDC23 Meet Object Capture for iOS 筆記

Object Capture recap


先拍攝各種角度的照片,再透過 Mac 的 Object Capture API,經過幾分鐘轉換,最後變成 3D 模型

raw-image


然而現在可以直接透過 iPhone 直接做到這些事情

raw-image
raw-image
raw-image


但需要花到好幾分鐘的時間,上面的範例預計就要15分鐘才生成,最後產出 USDZ 格式的模型。

Sample code →  Scanning objects using Object Capture

另外也可參考 WWDC 24 Discover area mode for Object Capture


More objects with LiDAR


原本的 Object Capture 系統在面對足夠紋理細節的物體,表現最佳

raw-image


但在 23 年 Apple 也進一步升級,使用了 LiDAR 掃瞄器,對一些紋理不足的物體進行重構,所以更好掃描了。

raw-image


Challenging objects

避免表面反光、透明或包含纖細結構的物體進行建模

  • Reflective
  • Transparent
  • Too-thin structures


Guided capture


Apple 建議盡可能用多種角度拍攝圖像


Automatic capture

raw-image

提供一個刻度圓盤來輔助拍攝


Capture feedback

  • Light

拍攝前確保環境有良好的照明,以便獲得準確的顏色,太暗會跳出提醒

raw-image


  • Speed

要緩慢而流暢繞物體移動,保持穩定,防止出現模糊的影像,過快的移動也會有提醒

raw-image


  • Distance

保持適當的距離,使物體在取景匡內的位置恰到好處,太近或太遠也會提醒

raw-image


  • Field of view

固定好機位,假如移動到視窗太遠的地方也會被提醒

raw-image



Flipping objects

適合翻轉:

  • 翻轉不宜變形,例如石頭
  • 紋理豐富的物體也推薦進行翻轉

不適合翻轉:

  • 容易因為移動而變形,像是 Pizza 就不那麼適合了
  • 有對稱或重複紋理的物體,這樣可能對系統產生誤導
  • 此外無紋理的物體在 Object Capture 系統中難以實現,因為通常都需要足夠的紋理,來縫合不同區塊
raw-image


Flippable

Apple 也有提供 API 來確保物體是否有足夠的紋理支持翻轉拍攝

  • 3 orientations: 推薦三種方向進行掃描,以便獲取各種角度的圖像
  • Diffuse lights: 最好使用漫射光進行照明,以最大程度減少物體表面的反光及陰影
  • Visual overlap: 在多輪掃描中使影像重疊也很重要,所以當次與下次的掃描,某些影像應該要重複重疊

Non-flippable

  • 3 heights: 若物體真的不能翻轉,Apple 建議從三種不同高度進行拍攝,以獲取不同角度
  • Textured background: 拍攝無紋理物體時,建議使用有紋理的背景,使主體顯得突出

Supported devices on iOS

  • iPhone 12 Pro and laster with LiDAR sensor
  • iPad Pro 2021 and later with LiDAR sensor


iOS API


raw-image

從剛剛的 demo 得知,我們使用 Object Capture 有兩個步驟

  1. 影像捕捉
  2. 模型重建

Image Capture API

影像捕捉 API 分為兩部分

  • ObjectCaptureSession
    在捕獲的過程中觀察和控制狀態工作流
  • ObjectCaptureView (SwiftUI)
    展示拍攝素材,並基於 session 狀態,自動調整它所呈現的 UI 元素
    而使用 ObjectCaptureView,它是不帶任何 2D 文本或按鍵,讓我們可以自定義 View 的外觀,並更輕鬆整合到現有的 App 中


Object Capture states

raw-image
raw-image

因為他是 reference type,推薦將 session 以持久狀態存儲在基於真實數據模型中,直到 session 完成。


raw-image

透過 ObjectCaptrueSession.start(imageDirectory:configuration:) ,先決定將捕捉的圖像儲存在何處,或透過 ObjectCaptureSession.Confoguration.checkpointDirectory 來檢查目錄

raw-image

再來使用 ZStack 包著 ObjectCaptureView(session:) 並把剛剛準備的 session 傳入就可以使用了,而且他附帶著對準的輔助視窗,輔助我們將物體放置框框內


raw-image

我們可以透過 session.state 來判斷是否到 .ready 的狀態,是的話可以呈現一顆按鈕,來提供開始掃描物體的功能(使用 session.startDetecting() )

raw-image


在 demo 中,還有一個 Reset button,可以讓我們從狀態 Detecting 返回 Ready

raw-image


raw-image

假如狀態切到 .detecting ,表示我們偵測到物體,此時我們就可以開始拍攝(使用 session.startCapturing()


raw-image

為了讓掃描得更準,Apple 推薦進行三輪掃描

所以接下來有兩條路可以走

第一,取決是否要翻轉物體,這樣就可以拍攝到前次沒拍到的部分,例如物體底部,此狀況可以 call beginNewScanPassAfterFlip()

raw-image


第二,不想要翻轉拍攝物體,但可以選擇不同的高度拍攝,這時可以 call beginNewScanPass() ,這時會重置捕捉刻度盤,但 session 會處於拍攝狀態

raw-image


raw-image

再來,三輪拍攝都結束後,會觸發 session.userCompletedScanPass 可以出現按鈕讓 user 呼叫 session.finish()


raw-image

然後 session 會等待數據進行存儲,存完後就會自動移至 Completed


raw-image

但也有可能遇到儲存失敗,此時就需要重新生成 session

Point Cloud view

raw-image

透過 ObjectCapturePointCloudView(session:) ,可以展示剛剛拍攝的物體,而且點擊互動,進行各種角度預覽。


最後拍攝完建立模型

raw-image

細節可以參考 WWDC 21 Create 3D models with Object Capture


Detail level on iOS

raw-image

為了讓手機端可以生成模型和預覽優化,所以在 iOS 上支持簡化這一細節等級,重建的模型包含漫反射、環境光遮蔽和髮線的紋路映射,均為異動設備顯示而設計


假如產生更多細節紋路,還是要把圖像傳到 Mac 上建立

也可以透過 Mac 再加入拍攝細節

raw-image

其他細節要參考 WWDC 23 Meet Reality Composer Pro

甚至有可能不需要寫任何 code,因為 Object Capture 已經整合到了新 macOS App,就是 Reality Composer Pro


Reconstruction enhancements


Increased performance on Mac: 目前已大大提升 Mac 上模型質量和重建速度

Estimated processing time: 還提供預計重建時間

Pose output: 位姿輸出,可以要求每幅圖像的高質量位姿,每項位姿都包含了拍攝該圖片時預計的相機位置和朝向

raw-image
raw-image


Custom detail level: 自定義細節等級

raw-image


參考


https://developer.apple.com/videos/play/wwdc2023/10191/

0會員
3內容數
留言0
查看全部
發表第一個留言支持創作者!
CHENGYANG的沙龍 的其他內容
觀看 Create parametric 3D room scans with RoomPlan 筆記 Recap 21 年推出 Object Capture,拍攝真實世界的物體照片,透過 RealityKit 的 Photogrammetry API,合成 App 用的 3D 模型
觀看 Create parametric 3D room scans with RoomPlan 筆記 Recap 21 年推出 Object Capture,拍攝真實世界的物體照片,透過 RealityKit 的 Photogrammetry API,合成 App 用的 3D 模型
你可能也想看
Google News 追蹤