【大咖專欄】Unity AR Foundation 平面檢測實戰

2021-01-08 網易

  

  大咖介紹

  

  什麼是AR技術

  AR是增強現實(AugmentedReality)的縮寫,是一種將虛擬信息與真實世界巧妙融合的技術。首先通過攝像頭捕獲到真實世界的影像,輔以陀螺儀等傳感器數據信息,通過軟體算法為真實世界的影像構建虛擬空間的三維坐標系,在這個坐標系基礎上添加三維模型等,從而達到使用虛擬信息與真實世界影像融合呈現的效果。

  AR的優勢

  1.一套完成的VR(虛擬實境)設備價格不菲,而AR主流手機均可以支持。

  2.得益於智慧型手機的普及,AR的受眾人群更廣泛。

  3.AR應用場景廣泛,包括:教育、醫療、購物、娛樂、傳媒、旅遊、軍事等。

  主流AR SDK對比

  SDK

  特點

  平臺

  蘋果ARKit

  平面檢測、運動跟蹤、光線評估

  iOS11,A9及以上處理器(iPhone6s及以後設備)

  谷歌ARCore

  平面檢測、運動跟蹤、光線評估

  國內支持設備較少,並且需要安裝Google Play和ARCore套件

  Easy AR SDK

  目前缺少平面檢測和光線評估

  Unity AR Foundation

  底層技術基於ARKit和ARCore封裝,對Unity開發非常友好

  同ARKit和ARCore的設備

  蘋果的發布ARKit,提出的平面檢測、運動跟蹤、光線評估三大特色功能,把AR技術應用刷新到一個新的高度;谷歌緊隨其後,發布了具有同樣特色功能的ARCore。在需要平面檢測,面積計算這樣的AR應用場景,國內老牌的EasyAR已不能滿足需求。Unity為了更好的支持遊戲開發中應用AR技術,抽象了UnityAR Foundation框架,實現「構建一次,多平臺部署」。無疑UnityAR Foundation已成為Unity中開發AR應用的首選框架。

  Unity AR Foundation 架構

  UnityAR Foundation需要Unity2019以上版本。ARFoundation 通過XR插件來支持不同的平臺,不同平臺對應的XR插件如下:

  *Android 上需要ARCoreXR Plugin

  *iOS 需要ARKitXR Plugin

  *Magic Leap 需要MagicLeap XR Plugin

  *HoloLens 需要WindowsXR Plugin

  ARFoundation的框架圖如下:

  

  AR應用基於ARFoundation開發,ARFoundation屏蔽了不同平臺ARSDK的API差異。

  架構搭建AR Foundation項目

  首先創建一個空的3D項目,然後點擊菜單Window=> Package Manager, 在彈出的PackageManager窗口中搜索AR,在列表中選擇ARKitXR Plugin進行安裝。要使用ARFoundation,必須安裝一個XRPlugin,考慮到iOS調試的便利性,我們選擇iOS平臺的ARKitXR Plugin進行初次學習。

  ARKitXR Plugin的安裝會自動觸發ARFoundation和ARSubsystems包的安裝,如下圖所示:

  

  開發包安裝完畢,可以在層級管理器,資源管理器和項目設置中看到XR相關的信息,如下圖所示:

  

  現在我們可以通過層級管理器的右鍵菜單中的XR子菜單創建AR遊戲對象了。

  初始化場景

  AR場景的攝像機由ARSession Origin管理,所以需要刪除默認場景的MainCamera,通過層級管理器的XR菜單,創建如下圖所示的遊戲對象。

  

  ARSession 和 ARSession Origin遊戲對象自帶了對應的腳本組件,並有默認的設置。需要注意的是,ARSession Origin下的ARCamera的ClearFlags不能用skybox,需要用SolidColor,如下圖所示:

  

  ARSession

  ARSession遊戲對象中的ARSession組件管理AR的開啟和關閉,

  ARSession組件可以掛在任意的GameObject上。禁用ARSession將停止AR系統的各種檢測運算。ARSession提供了一個靜態的協程方法CheckingAvailability,可以查詢設備是否支持AR。下面的代碼自定義一個腳本組件用來查詢設備是否支持AR,注意Start函數的返回值修改為IEnumerator,以實現異步查詢。

  publicclass MyComponent : MonoBehaviour

  [SerializeField] ARSessionm_Session;

  IEnumerator Start() {

  if ((ARSession.state ==ARSessionState.None) ||

  (ARSession.state ==ARSessionState.CheckingAvailability))

  {

  yield returnARSession.CheckAvailability();

  }

  if (ARSession.state ==ARSessionState.Unsupported)

  {

  // Start somefallback experience for unsupported devices

  }

  else

  {

  // Start the ARsession

  m_Session.enabled =true;

  }

  }

  }

  

  AR Session Origin

  ARSessionOrigin遊戲對象中的ARSessionOrigin組件處理AR世界坐標繫到Unity坐標系的轉換;ARPlaneManager處理平面檢測;ARRaycastManager負責AR世界中的射線碰撞;

  

  AR Camera

  ARCamera處理攝像機的紋理捕獲,鏡頭觸發的畫面移動由ARPose Driver完成。

  

  平面檢測

  目前的默認設置已經具備平面檢測能力,在這基礎上我們需求進行一些交互,點擊屏幕任意點,如果點在平面上,放置設定的3D模型到點的位置。

  新建一個腳本組件,掛在ARSession Origin遊戲對象上。其內容如下:

  usingSystem.Collections.Generic;

  usingUnityEngine;

  usingUnityEngine.XR.ARFoundation;

  usingUnityEngine.XR.ARSubsystems;

  [RequireComponent(typeof(ARRaycastManager))]

  publicclass PlaceOnPlane : MonoBehaviour

  {

  [SerializeField]

  [Tooltip("Instantiatesthis prefab on a plane at the touch location.")]

  GameObject m_PlacedPrefab;

  ///

  /// The prefab toinstantiate on touch.

  ///

  public GameObjectplacedPrefab

  {

  get { returnm_PlacedPrefab; }

  set { m_PlacedPrefab =value; }

  }

  ///

  /// The object instantiatedas a result of a successful raycast intersection with a plane.

  ///

  public GameObjectspawnedObject { get; private set; }

  void Awake()

  {

  m_RaycastManager =GetComponent();

  }

  bool TryGetTouchPosition(outVector2 touchPosition)

  {

  #ifUNITY_EDITOR

  if(Input.GetMouseButton(0))

  {

  var mousePosition =Input.mousePosition;

  touchPosition = newVector2(mousePosition.x, mousePosition.y);

  return true;

  }

  #else

  if (Input.touchCount >0)

  {

  touchPosition =Input.GetTouch(0).position;

  return true;

  }

  #endif

  touchPosition = default;

  return false;

  }

  void Update()

  {

  if(!TryGetTouchPosition(out Vector2 touchPosition))

  return;

  if(m_RaycastManager.Raycast(touchPosition, s_Hits,TrackableType.PlaneWithinPolygon))

  {

  // Raycast hits aresorted by distance, so the first one

  // will be theclosest hit.

  var hitPose =s_Hits[0].pose;

  if (spawnedObject ==null)

  {

  spawnedObject =Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);

  }

  else

  {

  spawnedObject.transform.position= hitPose.position;

  }

  }

  }

  static Lists_Hits = new List();

  ARRaycastManagerm_RaycastManager;

  }

  解析:

  1.獲取ARRaycastManager組件

  2.獲取觸摸點,Raycast查詢是否碰撞到AR平面。

  3.如果碰撞到平面,創建模型實例,並設置位置到碰撞點。

  發布測試

  點擊菜單File=> Build Setting, 切換Platform到iOS,點擊build導出XCode工程,如下圖所示:

  

  打開Unity-iPhone.xcodeproj工程,在Xcode的帳號設置中登錄已註冊iDP的帳號,插入iPhone手機,並選擇target為此手機,調整DeploymentTarget為11.0以上,如下圖所示。

  

  最後點擊三角箭頭啟動程序,XCode自動編譯並運行程序到手機上,最終效果如下圖所示:

  

  參考資料

  https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@4.1/manual/index.html

  

  

相關焦點

  • Unity推出的AR Foundation能幫助使用者解決AR開發過程中遇到的難題
    AR Foundation AR Foundation 的初始版本將為大多數AR應用的核心功能提供支持: 平整表面檢測 表示為點雲的深度數據 高效的pass-thru渲染 有助於將虛擬對象錨定到物理世界的參考點 估計平均色溫和亮度 追蹤物理空間中的設備位置和方向 在AR中正確縮放內容的實用程序
  • [專欄精選]Unity剛體詳解
    洪流學堂公眾號回復專欄,查看更多專欄文章。洪流學堂,讓你快人幾步。你好,我是鄭洪智。從這節課開始,我會嘗試用一種新的寫作風格,也希望大家能夠多提意見。背景補充小新今年數學專業馬上大三了,卻一直沒有找到自己的職業方向,不知道以後要幹什麼,唯一的愛好就是玩遊戲,特別想自己能開發一款成功的遊戲。
  • 簡化AR體驗創作,Unity MARS Query系統程序化生成場景的原理
    我們以一個平面尺寸(Plane Size)條件為例。  平面尺寸條件:  https://docs.unity3d.com/Packages/com.unity.mars@1.1/manual/GettingStarted.html?
  • Unity 2018.3 Beta版發布
    直播課程:Facial AR Remote面部捕捉解決方案課程(第一期)直播地址:https://connect.unity.com/events/unitychina-facialarUnity官方教師培訓報名火熱進行中Unity將在10月22-26日,舉辦為期5天的專業的Unity官方教師培訓課程,誠邀廣大教師與
  • unity實戰之大主宰
    然後回到unity,點擊windows ->package manager,就能找到自己的資源,全部import這裡是獲取場景後的結果:所謂「麻雀雖小,五臟俱全」,如果加以時日,可以做大,做美成果展示這只是一張截圖:通關視頻https://www.bilibili.com/video/BV1hf4y1i7N8/幻影道路遊戲中有一個跳跳樂關卡,裡面的物體快只有離近了才能看見
  • 銷售與運作計劃S&OP基礎與實戰專欄前言:企業囚徒困境的破解之道
    大家好,我是許栩,歡迎來到我的專欄《銷售與運作計劃S&OP的基礎與實戰》,這是許栩原創的第13個專欄。1、前提:從大老闆層面解決問題。有一句話,老闆的文化決定了企業的文化,老闆的思維決定了企業的思維。我不清楚這句話對不對,但要打破兩個部門的囚徒困境,必須要有人站在兩個部門之外(之上)。只有站在高位,視野開闊的觀察全局,才有可能打破囚徒困境。站在高位的,最好的人選是大老闆,似乎也只能是大老闆。2、文化:不以KPI論英雄。
  • Unity基礎之物理引擎
    我們在unity裡面建了一個正方體cube , 要如何使這個cube可以跟現實中的物體一樣受重力呢 ? 這就需要用到Rigidbody(剛體)組件了 .單擊cube , 在右邊的Inspector面板添加Rigidbody組件添加完Rigidbody組件後,cube1就可以受重力影響了,運行unity時,cube1會因為受到重力往下落.下面為大家介紹 Rigidbody 組件常用參數 : 1. Mass : 物體的質量 .
  • 「投資大咖面對面」第二期直播給...
    」請掃二維碼五月,「投資大咖面對面」直播第二期將與投資者見面。「投資大咖面對面」有關負責人表示,只看專業的財務數據、乾巴巴的季報,對於投資者來說,可能複雜而枯燥。在這個敏感時點,「投資大咖面對面」第二期將邀約實戰派高手,分享洞見。下期大咖說啥?你來提意見!值得關注的是,不少投資者參與首期節目後,對第二期節目嘉賓的期待頗高,也給出了心儀的基金經理名字。
  • Unity官方示例:在ARCore和ARKit中實現多人遊戲
    首先我們用這些API來控制AR會話的開啟和關閉:public abstract bool StartService(Settings settings);public abstract void StopService();Settings參數能讓你啟用會話中的創造點雲(point cloud)、光照估算和平面檢測功能。
  • Unity 實用技巧 - 物理系統初識
    官方文檔:https://docs.unity3d.com/Manual/PhysicsSection.html01  Rigidbody(剛體)/ Rigidbody2D(2D剛體)在使用需要碰撞檢測的時候可以把它設置為Convex,它一般被使用在幾何圖形上。物體可以被單獨添加一個碰撞器(可以沒有剛體),不過一般這個物體是靜態的。另外我們可以在碰撞中可以設置Physics materials(物理材質)。
  • 21大咖雲解析顆粒應用與檢測前沿發展|8大亮點搶先看
    其中生物製藥向的顆粒學研究;與環、健康息息相關的氣溶膠研究;不斷向「小」進軍的超微及納米顆粒研究;以及顆粒檢測與表徵新技術研發都是近年來顆粒學研究應用的熱區之一。特別在疫情之下的2020,更成為社會輿論關注的焦點。
  • 年度大促預售正式開啟!Unity約你來剁手啦!
    怕你翹首以待太久,Unity年度大促今天預售全面開啟!搶先一步獲得精品資源插件,Unite門票和限量版背包!敲黑板啦,以下為大促期間訂閱購買Unity Pro專業版和Unity Plus加強版大大福利包:
  • RationalDMIS 7.1 平面度檢測
    (3)公差帶(4)檢測表面平面度只要被測要素保持水平,就可以用高度規來測量平面度;確保表面上的任何點都不超過或低於公差帶。現代三坐標測量機是最好的測量手段,可創建虛擬平面,與真實的表面輪廓可以比較。屬3D測量,提取點必須覆蓋長度和寬度,以確保整個表面在公差帶內。
  • Unity Perception工具 | 使用合成數據訓練出強大的物體檢測ML模型
    而現在,我們將介紹如何:  在全新的Unity Simulation環境中生成大體量目標對象數據集  使用合成數據集訓練對象檢測模型(即Faster R-CNN)  使用少量現實示例調整模型  最終成果在檢測真實數據集時表現良好,相較完全使用真實數據訓練的模型表現更佳。
  • 基於平面投影的起重機吊裝碰撞檢測方法
    圖1 吊裝場景俯視投影平面2 基於平面投影的碰撞檢測碰撞檢測是判斷物體與物體之間是否有相交。首先,在XY 平面內判斷起重機臂架與障礙物、吊裝物之間是否發生碰撞。其次,做Z 方向的碰撞判斷。由於吊裝系統中物體都是凸包絡物體,為簡化計算可認為吊裝物和障礙物以及起重機投影到XY 平面上只有圓形和矩形2種形狀。2.1 吊裝物和障礙物的碰撞檢測在做XY 平面投影的碰撞之前,首先,用球形包絡盒實現初級的碰撞檢測。球形的半徑,可通過包絡物體的類AABB 包絡形狀的長寬高計算而得來。
  • unity什麼意思
    unity什麼意思uni前綴,只包含一個的,更多例子還有:uniform, unique, unilateral, etc. 發音類似於有你,整個世界中有你就夠了,不需要別人,也就是只包含一個的。unity,聯合、統一、團結、和睦。學單詞,只記住意思可不行,會用才行,小夥伴們可以在評論區造句,我們一起學習哦!我先來:造句:Unity is strength. (團結就是力量)
  • 職場英語口語:面試實戰之應聘機械工程師 2
    新東方網>英語>英語學習>職場英語>職場百科>正文職場英語口語:面試實戰之應聘機械工程師 2 2012-12-19 14:28 來源:原版英語 作者:
  • 日檢測量最高可達30萬份 溫州市首個核酸檢測基地通過實戰檢測
    日檢測量最高可達30萬份 溫州市首個核酸檢測基地通過實戰檢測 2021/01/11 00:09 來源:溫州晚報 編輯:遊歷 瀏覽:1247
  • 快照在storage foundation中的應用介紹
    它的缺點是需要最大的存儲空間,需要和目標數據一樣大的空間才能將其完全拷貝下來。邏輯拷貝的優點就是節省空間,一般來說,經常發生改變的數據只佔所有數據的20%-30%,這樣邏輯備份可以節省出70%左右的存儲空間。但是邏輯備份也有它的缺點,因為它只是保存了發生改變的數據,所以如果目標數據發生損壞的話,快照也無能為力。
  • 在unity中用C#連接資料庫步驟
    所以本文就介紹一下unity連MySQL資料庫所遇到的一些坑。unity連接資料庫,首先你需要導入如圖所示的五個數據連結庫。在本圖中,歐陽講他們放到了Mysql文件夾下,在這裡歐陽強調一下――最好將他們放到Plugins文件夾下,不然會出現莫名其妙的問題哦。