Table of Contents

添加一組幀資料來源

一個 AR Session 可以包含多個幀資料來源元件,稱為幀資料來源組(frame source group)。在運行時,session 會根據當前裝置和啟用的 AR 功能,從幀資料來源組中選取一個最合適的幀資料來源進行使用。本文介紹瞭如何使用和管理幀資料來源組。

開始之前

  • 瞭解 幀資料來源 的基本概念、類型以及運行時的選取方法。

使用預設 AR Session 的幀資料來源組

使用預設配置建立的 session 會自帶一組幀資料來源,在使用單一 AR 功能時,一般就足夠了。

不同預設 session 中所包含的幀資料來源不同。

使用 ARSessionFactory.ARSessionPreset.ImageTracking 預設或 AR Session (Image Tracking Preset) 選單建立的 session 中只有單個幀資料來源:

alt text

使用 ARSessionFactory.ARSessionPreset.MegaBlock_MotionTracking_Inertial 預設或 AR Session (Mega Block Default Preset) 選單建立的 session 中包含多個幀資料來源元件的場景層級結構:

alt text

如果場景中一開始使用了某個預設建立了 session,在迭代過程中增加其它功能時,不僅需要新增相應的 frame filter 元件,還需要根據需要新增合適的幀資料來源元件。

重要事項

從 4.7 或更低版本升級後,需要整個刪除 session 後重新透過選單或 ARSessionFactory 建立 session,才能使用預設的幀資料來源組。

以下列出了所有預設的 AR 功能預設配置的幀數據源組件,注意列表中的排序與場景中幀數據源的組件排序相同:

Preset Frames data source group
  1. CameraDeviceFrameSource
  1. XREALFrameSource
  2. AREngineFrameSource
  3. ARCoreFrameSource
  4. ARCoreARFoundationFrameSource
  5. ARKitFrameSource
  6. ARKitARFoundationFrameSource
  7. VisionOSARKitFrameSource
  8. MotionTrackerFrameSource
  1. XREALFrameSource
  2. AREngineFrameSource
  3. ARCoreFrameSource
  4. ARCoreARFoundationFrameSource
  5. ARKitFrameSource
  6. ARKitARFoundationFrameSource
  7. VisionOSARKitFrameSource
  8. MotionTrackerFrameSource
  9. EditorCameraDeviceFrameSource
  1. XREALFrameSource
  2. AREngineFrameSource
  3. ARCoreFrameSource
  4. ARCoreARFoundationFrameSource
  5. ARKitFrameSource
  6. ARKitARFoundationFrameSource
  7. VisionOSARKitFrameSource
  8. MotionTrackerFrameSource
  9. InertialCameraDeviceFrameSource
  10. EditorCameraDeviceFrameSource
  1. XREALFrameSource
  2. AREngineFrameSource
  3. ARCoreFrameSource
  4. ARCoreARFoundationFrameSource
  5. ARKitFrameSource
  6. ARKitARFoundationFrameSource
  7. VisionOSARKitFrameSource
  8. MotionTrackerFrameSource
  9. InertialCameraDeviceFrameSource
  10. ThreeDofCameraDeviceFrameSource
  11. EditorCameraDeviceFrameSource
  1. XREALFrameSource
  2. AREngineFrameSource
  3. ARCoreFrameSource
  4. ARCoreARFoundationFrameSource
  5. ARKitFrameSource
  6. ARKitARFoundationFrameSource
  7. VisionOSARKitFrameSource
  8. MotionTrackerFrameSource
  9. InertialCameraDeviceFrameSource
  10. ThreeDofCameraDeviceFrameSource
  11. CameraDeviceFrameSource
  1. XREALFrameSource
  2. AREngineFrameSource
  3. ARCoreFrameSource
  4. ARCoreARFoundationFrameSource
  5. ARKitFrameSource
  6. ARKitARFoundationFrameSource
  7. VisionOSARKitFrameSource
  8. MotionTrackerFrameSource
  9. CameraDeviceFrameSource
附註

使用預設建立的元件排序可以保證在所有內建幀資料來源支援的裝置上使用最優的幀資料來源。

使用預設幀資料來源配置

在使用預設參數時,幀資料來源的配置會根據裝置和運行時啟用的 AR 功能自動調整。

如果手動修改過幀資料來源的參數,在 session 中的 AR 功能發生變化時(比如在原本只包含影像追蹤的 session 中新增了運動追蹤功能),可能需要手動調整幀資料來源的參數以適應新的功能需求,這樣所有 AR 功能才能以最佳效果執行。

重要事項

從 4.7 或更低版本升級後,需要整個刪除 session 後重新透過選單或 ARSessionFactory 建立 session,才能使用正確的預設參數。

新增幀資料來源組

Hierarchy 檢視中,選中 AR Session (EasyAR) 並點選右鍵,透過選單 EasyAR Sense > [ AR 功能 ] > Frame Source : * 可以新增適合該功能的 frame source 元件。也可以透過選單 EasyAR Sense > Frame Source by Transform Type > * Dof > Frame Source : * 新增需要的 frame source 元件。

在指令碼中,可以使用 ARSessionFactory.AddFrameSource<Source>(GameObject, bool) 來新增 frame source 元件。

比如,透過選單 EasyAR Sense > Frame Source by Transform Type > 3 Dof Rot-Only > Frame Source : Three Dof Camera Device 可以給當前選中的 session 新增一個 ThreeDofCameraDeviceFrameSource

alt text

對應的指令碼程式碼如下:

ARSessionFactory.AddFrameSource<ThreeDofCameraDeviceFrameSource>(session);

幀資料來源排序

session 組裝過程中,幀資料來源組中最終只有一個幀資料來源會被選中後組裝到 session 中,選取的規則取決於 AssembleOptions.FrameSourceSelection 屬性的值。在預設配置下,可以透過調整幀資料來源組中各個元件的排序來影響最終被選中的幀資料來源。

一般可以使用在 Hierarchy 檢視中 對場景中的物體進行排序 的方法直接移動 frame source 物體進行排序。

在指令碼中,可以使用 Transform.SetSiblingIndex(int) 來調整物體的排序。

比如,要將 MotionTrackerFrameSource 排在其它幀資料來源前面,可以在 Hierarchy 檢視中選中 Motion Tracker 物體並拖動到最上面的位置。

相同的效果也可以透過下面的指令碼程式碼實現:

motionTrackerFrameSource.transform.SetSiblingIndex(0);

另外還有一些預定義的排序方法可以使用。在 Hierarchy 檢視中,選中 AR Session (EasyAR) 並點選右鍵,透過選單 EasyAR Sense > Utility > Sort Frame Source : * > * 對特定的若干幀資料來源元件進行排序。

在指令碼中,可以使用 ARSessionFactory.SortFrameSource(GameObject, ARSessionFactory.FrameSourceSortMethod) 實現相同的效果。

比如,透過選單 EasyAR Sense > Utility > Sort Frame Source : Motion Tracker > System SLAM 可以將 MotionTrackerFrameSource 排在 ARCoreFrameSourceARCoreARFoundationFrameSourceARKitFrameSourceARKitARFoundationFrameSourceAREngineFrameSource 前面。

alt text

對應的指令碼程式碼如下:

ARSessionFactory.SortFrameSource(session, new ARSessionFactory.FrameSourceSortMethod { MotionTracker = ARSessionFactory.FrameSourceSortMethod.MotionTrackerSortMethod.PreferEasyAR });

經過上面的排序之後,場景層級結構變為:

alt text

相關主題