我正在開發一個使用 Swift 和 ObjC 的 ARKit 應用程式。有一個 ARSession 正在運行(總是帶有ARWorldTrackingConfiguration
),我正在嘗試單獨使用它的功能。到目前為止,我已經實作了影像跟蹤、QR 檢測和平面跟蹤。這些不是同時活動的。
沒有場景視圖。只有一個金屬視圖(MTKView),帶有我自己的著色器,以便顯示我從服務器和我的相機饋送接收到的幀,并在必要時對服務器資料應用過濾器。
問題是手機很快就會變熱。5分鐘或更短時間后,它會變成一個火球。現在我知道我執行每個幀的操作(服務器通信和錨點管理)都會導致問題,但由于需要業務邏輯,我必須這樣做。我也知道跟蹤是 CPU/GPU 密集型的。但是我怎樣才能讓它變得更好,有什么建議嗎?
注意:目前在 iPhone 12 Pro Max 上進行測驗。
uj5u.com熱心網友回復:
這是一個棘手的問題,因為癥狀可能是由于未優化的代碼造成的。既然您說您有“所需的業務邏輯”,您可能沒有機會修復它。此時我將只運行一些記憶體分析模板,如活動監視器或 CPU 計數器。看看是否存在可以減少能源使用的精簡計算。
除此之外,您還可以購買 iPhone 散熱器。 https://arstechnica.com/gadgets/2021/12/razers-rgb-smartphone-cooler-attaches-to-iphones-with-magsafe/
uj5u.com熱心網友回復:
導致大部分能源影響的業務邏輯極不可能是您的業務邏輯,除非您的邏輯單獨將 CPU 使用率固定在 75% 或更高。事實是,ARKit 在后臺執行了非常繁重的處理,并且還利用了硬體資源——2 個攝像頭(在你的情況下使用 LiDAR 攝像頭是 3 個),用于視覺慣性里程計的 ANE Accelerometer,以及 GPU 和 CPU(后者更重)用過的)。
確定您是否可以對此做任何事情的最佳方法是構建一個視圖控制器,該控制器僅使用您選擇的渲染層運行 vanilla ARKit 實作,并觀察Debug Navigator
XCode 中的能量影響——特別是單擊 Energy Impact 并觀察開銷、CPU、GPU 和網路之間的故障(因為你提到過)。注意 vanilla ARKit 實體和你的完整應用程式之間的區別,并決定相應地做什么。
如果基線 ARKit 能量影響對于您的用例來說太高了,您可以嘗試禁用某些功能ARWorldTrackingConfiguration
(例如,場景重建很重)或可能使用不同的配置型別。
否則,如果您的代碼被證明是影響的主要部分,那么請嘗試減少您處理的幀/秒數。例如,您希望 ARKit 始終以 60fps 運行,因此可能只處理每 3 幀或 4 幀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/508531.html
上一篇:如何在缺口下方繪制布局
下一篇:SQLServerXML查詢