精华内容
下载资源
问答
  • ARFoundation之路-架构及术语

    千次阅读 2019-06-13 17:21:45
      在前文中我们知道,ARFoundation只是对ARCore和ARKit的再次封装,ARFoundation并不实现AR的底层功能,换句说,ARFoundation只是一个功能的搬运工,因此,底层API没有的功能,ARFoundation也不可能有(AR...

    版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

    (一)ARFoundation功能概述

      在前文中我们知道,ARFoundation只是对ARCore和ARKit的再次封装,ARFoundation并不实现AR的底层功能,换句说,ARFoundation只是一个功能的搬运工,因此,底层API没有的功能,ARFoundation也不可能有(ARFoundation会添加一些辅助功能以方便开发者开发AR应用)。同时,ARFoundation能实现的功能也与底层SDK所处的平台相关,如ARKit有worldmap功能,而ARCore没有,这时,即使ARFoundation支持worldmap功能,其也只能在ARKit运行的iOS平台这个功能才有效,编译到Android平台就会出错。这即是说ARFoundation支持的功能与底层SDK是密切相关的,脱离底层SDK谈ARFoundation功能是没有意义的。当然,如果ARKit和ARCore都支持的功能,ARFoundation做的工作是在编译时根据平台选择无缝切换所用底层SDK,达到一次开发,跨平台部署的目的。
      当前,ARFoundation主要支持以下功能:

    功能描述
    世界跟踪(World tracking)在物理空间中跟踪用户设备的位置和方向(姿态)。
    平面检测(Plane detection)对水平与垂直平面进行检测。
    参考点(Reference points)对特定点的姿态跟踪。ARCore中称为Anchor。
    光照估计(Light estimation)对物理环境中的光照强弱及方向进行估计。
    人脸跟踪(Face tracking)检测并跟踪人脸。
    图像跟踪(Image tracking)跟踪物理空间中的2D图像。
    物体跟踪(Object tracking)跟踪物理空间中的物体对象,目前只支持ARKit。
    Seesion分享支持多人共享场景,这在ARKit中称为多人协作(Collaborative session),在ARCore中称为Cloud Anchor。
    人体动作捕捉(Motion capture)简称动捕,检测物理空间中的人体及动作,用一个由17根骨骼组成的层次关节来表达人体动作。
    人形遮挡(People occlusion)利用计算机视觉判断人体在场景中的位置,获取人体形状及在场景中的位置实现虚拟物体遮挡。
    摄像机图像API提供摄像机图像底层支持,方便开发人员开发计算机视觉应用。

    (二)ARFoundation架构体系

      虽然ARFoundtion是在底层SDK API之上的再次封装,但Unity为了实现AR跨平台应用(平台无关性)做了大量工作,搭建了一个开放性的架构体系,使这个架构能够容纳各类底层SDK,能支持当前及以后其他底层AR SDK的加入,宏观上看,ARFoundation希望构建一个开发各类AR应用的统一平台。
      为实现这个开放的架构,ARFoundation建立在一系列的子系统(subsystem)之上。subsystem隶属于UnityEngine.XR.ARSubsystems命名空间,负责实现特定的功能模块,而且这个实现与平台无关,即subsystem处理与平台相关的特定模块的实现。如XRPlaneSubsystem负责实现平面检测、显示功能,不仅如此,其还要根据运行平台的不同自动的调用不同底层的SDK,从调用者的角度看,他只调用了XRPlaneSubsystem的功能,而不用去管最终这个实现是基于iOS还是Android,即对平台透明。
      这种架构对上提供了与平台无关的功能,对下可以在以后的发展中纳入不同的底层SDK,从而实现最终的一次开发,跨平台部署的目标。其架构图如下所示:
    在这里插入图片描述

    (三)基本术语

      世界跟踪(Tracking)
      指AR设备确定其在物理世界中的相对位置和方向的能力。在2D和3D空间中跟踪用户的运动并最终定位它们的位置是任何AR应用程序的基础,当我们的移动设备在现实世界中移动时,ARFoundation会通过一个名为并行测距与映射(Concurrent Odometry and Mapping ,COM)的过程来理解移动设备相对于周围世界的位置。 ARFoundation会检测捕获的摄像头图像中的视觉差异特征(称为特征点),并使用这些点来计算其位置变化。 这些视觉信息将与设备 IMU 的惯性测量结果结合,一起用于估测摄像头随着时间推移而相对于周围世界的姿态(位置和方向)。
      在开发中,通过将渲染 3D 内容的虚拟摄像头的姿态与 ARFoundation 提供的设备摄像头的姿态对齐,开发者能够从正确的透视角度渲染虚拟内容,渲染的虚拟图像可以叠加到从设备摄像头获取的图像上,让虚拟内容看起来就像现实世界的一部分一样。

      可跟踪(Trackable)
    可以被AR设备检测和/或跟踪的真实特征,例如特征点,平面,人脸,人形等等。

      特征点(Feature Point)
      AR设备使用摄像机和图像分析来跟踪世界上用于构建环境地图的特定点,例如木纹表面的结。特征点云包含了被观察到的3D点和视觉特异点的集合,通常还附有检测时的时间戳。

      会话(Session)
      Session的功能是管理AR系统的状态,处理Session生命周期,是AR API的主要入口。在开始使用AR API的时候,通过设置的ARSessionState来检查当前设备是否支持AR。Session负责处理整个AR应用的生命周期,这样AR系统会根据需要开始和暂停相机帧的采集,初始化和释放相关的资源。
      
      Session空间(Session space)
      相对于AR session初始化时的坐标系,例如,例如,会话空间(0,0,0)是指创建AR会话的位置。AR设备跟踪的坐标信息都是处在Session空间中,因此,在使用时,需要将其从Session空间转换到其他空间。这类似于模型空间和世界空间的转换。

       用户交互(User interaction)
      ARFoundation利用命中测试来获取对应于手机屏幕的 (x,y) 坐标(通过点按或应用支持的任何其他交互提供),并将一条射线投影到摄像头的视野中,返回这条射线贯穿的任何平面或特征点以及交叉位置在现实世界空间中的姿态。 这让用户可以选择环境中的物体或者与它们互动。

       **增强图像(Augumented Image) **
      使用增强图像(图像检测)可以构建能够响应特定 2D 图像(如产品包装或电影海报)的 AR 应用, 用户可以将手机的摄像头对准特定图像时触发 AR 体验,例如,他们可以将手机的摄像头对准电影海报,使人物弹出,然后引发一个场景。可离线编译图像以创建图像数据库,也可以从设备实时添加单独的图像。 注册后,ARFoundation将检测这些图像、图像边界,然后返回相应的姿态。

       共享 (Sharing)
      借助于ARKit中的多人协作(Collaborative session)或者ARCore中的Cloud Anchor,可以创建适用于 Android 和 iOS 设备的协作性或多人游戏应用。使用云锚点,一台设备可以将锚点和附近的特征点发送到云端进行托管。 可以将这些锚点与同一环境中 Android 或 iOS 设备上的其他用户共享。 这使应用可以渲染连接到这些锚点的相同 3D 对象,从而让用户能够同步拥有相同的 AR 体验。共享需要服务器的支持。

       平面(Plane)
      AR中所有的内容,都要依托于平面类进行渲染。如虚拟机器人,只有在检测到平面网格的地方才能放置。平面可分为水平、垂直两种,Plane描述了对一个真实世界二维平面的认知,如平面的中心点、平面的x和z轴方向长度,组成平面多边形的顶点。检测到的平面还分为三种状态,分别是正在跟踪,可恢复跟踪和永不恢复跟踪。如果是没有正在跟踪的平面,包含的平面信息可能不准确。两个或者多个平面还会被被自动合并成一个父平面。如果这种情况发生,可以通过子平面找到它的父平面。

       姿态(Pose)
      Pose表示从一个坐标系到另一个坐标系的转换。在所有的ARFoundation APIs中,Pose总是描述从物体的局部坐标系到世界坐标系的变换,也就是说,来自ARFoundation API的Pose可以被认为等同于OpenGL的模型矩阵或DirectX的世界矩阵。随着ARFoundation对环境的了解不断变化,它将调整坐标系模式以便与真实世界保持一致。 这时,Camera的位置(坐标)可能会发生明显的变化,以便它们所代表的物体处理恰当的位置。因此,每一帧图像都应被认为是在一个完全独立的世界坐标空间中。

       光照估计(LightEstimate)
      LightEstimate给我们提供了一个接口来查询当前帧的光照环境。我们可以获取当前相机视图的光照强度,一个范围在(0.0,1.0)的值,0代表黑色,1代表白色,使用该光照信息绘制内容,可以使虚拟物体更真实。还可以获取到光照方向,以便调整AR中虚拟物体的阴影方向,增加虚拟物体的真实感。

    参考文献

    1、About AR Foundation About AR Foundation

    展开全文
  • ARFoundation之路-概述

    万次阅读 多人点赞 2019-06-11 18:41:19
    (一)、什么是ARFoundation   2017年,Apple公司与Google公司相继推出了各自的AR开发SDK工具包ARKit和ARCore,分别对应iOS平台与Android平台AR开发。ARKit和ARCore推出后,极大的促进了AR在移动端的普及发展,将...

    版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

    (一)、什么是ARFoundation

      2017年,Apple公司与Google公司相继推出了各自的AR开发SDK工具包ARKit和ARCore,分别对应iOS平台与Android平台AR开发。ARKit和ARCore推出后,极大的促进了AR在移动端的普及发展,将AR从实验室带入到普通消费场景中。由于当前的移动手机操作系统主要由iOS与Android两大系统统治,ARKit和ARCore分别服务于各自己的系统平台,这意味着软件产商要开发一套移动AR应用就必须使用ARKit开发一个iOS版本、使用ARCore开发一个Android版本,这无疑增加了开发时间与成本。
      ARCore提供了Android、Android NDK、Unity、Unreal开发包,ARKit官方只提供了Xcode开发包,这也提高了利用其他工具进行开发的开发者学习成本。在这种情况下,Unity构建了一个AR开发平台,这就是ARFoundation,这个平台架构于ARKit和ARCore之上,其目的就是利用Unity的跨平台能力构建一种与平台无关的AR开发环境,换句话说,ARFoundation对ARKit与ARCore进行了再次封装,并按照用户的发布平台自动选择合适的底层SDK版本。

      因此,ARFoundation是ARKit XR插件(com.unity.xr.arkit)和ARCore XR插件(com.unity.xr.arcore)的集合,虽然最终都使用ARKit SDK和ARCore SDK,但因为Unity再次封装的缘故,与专业平台(如ARKit插件和ARCore SDK for Unity)相比,C#调用的API略有不同。
      ARFoundation的目标并不局限于ARKit与ARCore,它的目标是建成一个统一、开放的AR开发平台,因此,ARFoundation极有可能在下步发展中纳入其他AR SDK,进一步丰富AR开发环境。在进一步的发展中,ARFoundation不仅支持移动端AR设备,还会支持穿戴式AR设备开发。
      从上面的描述我们也可以看出,ARFoundation它并不提供AR的底层开发API,这些与平台相关的API均由第三方如ARKit与ARCore提供,因此ARFoundation对某特定第三方功能的实现要比原生的晚(ARFoundation将某第三方SDK的特定功能集成需要时间)。

    在这里插入图片描述

    (二)、ARFoundation与ARCore、ARKit的关系

      ARFoundation提供了一个独立于平台的脚本API和MonoBehaviour,因此,开发者可以通过ARFoundation使用ARCore和ARKit共有的核心功能构建同时适用于iOS和Android两个平台的AR应用程序。换句话说,这可以让开发者只需开发一次应用,就可以部署到两个平台的设备上,不必做任何改动。
      如前所述,ARFoundation实现实现某底层SDK的功能会比原生的晚,因此,如果我们要开发ARFoundation尚不支持的功能,可以单独使用对应的原生SDK。目前,如果我们只面向ARCore进行开发并希望获取完整的功能集,Google为Unity开发提供了ARCore SDK for Unity;如果只面向ARKit进行开发并希望获取完整的功能集,Unity提供了适用于Unity开发的ARKit插件(Apple并未提供Unity的ARKit SDK开发插件,在ARFoundation发展起来以后,Unity肯定不会再继续维护ARKit插件)。
      ARFoundation与ARCore、ARKit的关系如下图所示:
    在这里插入图片描述
      ARFoundation与ARCore、ARKit的区别如下表如示:

    SDK简介描述
    ARFoundationAR Foundation将ARKit和ARCore的底层API封装整合到一个统一、开入的框架中,并提供 一些额外的实用功能,如Session生命周期管理,以及用于展示环境中已检测功能的MonoBehaviour。
    Google ARCore SDK for Unity该SDK为ARCore支持的重要AR功能提供原生API,并在Unity中向Android平台公开这些API,以方便开发者调用。
    Unity ARKit Plugin该插件是Unity公司开发的ARKit Unity插件,用于在Unity中构建ARKit应用,它在Unity中公开了C#语言的ARKit Objective-C API,以便开发者调用,该插件还提供一些辅助功能,可以利用兼容iOS设备的前置和后置摄像机。

    (三)、ARFoundation支持的功能

      ARFoundation与ARCore、ARKit都正处于快速发展中,ARCore基本保持每两个月进行一次更新频率,ARKit也已经迭代到了ARKit3.0,作为ARKit与ARCore上层的ARFoundaion也已经到了v2.2版。
      但如前文所说,ARFoundation功能的实现要比底层的原生API稍晚一些,下表展示了ARFoundation,ARCore和ARKit功能对比和开发路线图。

    支持功能AR FoundationARCoreARkit
    垂直平面检测
    水平平面检测
    特征点检测√ +支持特征点姿态
    光照估计√ +Color Correction√ + Color Temperature
    射线测试(Hit Testing,对特征点与平面的射线碰撞测试)
    图像跟踪
    3D物体检测与跟踪-
    环境光探头(Environment Probes)-
    世界地图(World maps)-
    人脸跟踪(识别、姿态、网格和形状混合)√(iPhoneX 及更高型号)
    云锚点(Cloud Anchors)-
    远程调试(Editor Remoting)开发中√-Instant Preview√ -ARKit Remote
    模拟器(Editor Simulation)--
    LWRP支持(支持使用ShaderGraph)开发中开发中
    摄像机图像API-
    人体动作捕捉(Motion capture)-√(iPhoneX 及更高型号)
    人形遮挡(People occlusion)-√(iPhoneX 及更高型号)
    多人脸检测-√ (iPhoneX 及更高型号)
    多人协作(Collaborative session)-√ (iPhoneX 及更高型号)
    多图像识别√(iPhoneX 及更高型号)

      AR应用是计算密集型应用,对计算硬件要求较高,就算在应用中什么虚拟对象都不渲染,AR也在对环境、特征点跟踪进行实时解算。由于移动端硬件设备资源限制,一些高级AR应用只能在最新的处理器(包括CPU和GPU)上才能运行。同时得益于Apple强大的独立生态与软硬件整合能力,在ARKit3中推出了很多新功能,但由于Android系统碎片化严重,ARCore预计要等到新版Android发布后才能提供类似的功能。

    参考文献

    1、Unity’s Handheld AR Ecosystem Unity’s Handheld AR Ecosystem

    展开全文
  • ARFoundation之路-平面管理之二

    千次阅读 2019-07-14 17:34:27
      ARFoundation使用ARPlaneManager来管理平面让开发者管理平面检测功能变得非常容易。在实际应用开发中,我们通常都会碰到开启与关闭平面检测功能、显示与隐藏被检测到的平面的问题,利用ARPlaneManager可以方便的...

    版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

      ARFoundation使用ARPlaneManager来管理平面让开发者管理平面检测功能变得非常容易。在实际应用开发中,我们通常都会碰到开启与关闭平面检测功能、显示与隐藏被检测到的平面的问题,利用ARPlaneManager可以方便的实现这些需求。

    (一)开启与关闭平面检测

      在之前的章节中,我们学习过,ARPlaneManager负责管理检测平面相关工作,其有一个属性enabled,设置enabled=true则是开启了平面检测,设置enabled=false则是关闭了平面检测,因此,我们可以非常方便的用代码控制平面的检测与关闭。前文我们也学习到,ARPlaneManager并不负责检测到的平面的可视化渲染,因此,在关闭平面检测后我们还应该取消已检测到的平面的显示。

      在Unity工程中,新建一个C#脚本文件,命名为PlaneDetection,编写如下所示代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.XR.ARFoundation;
    using UnityEngine.UI;
    public class PlaneDetection : MonoBehaviour
    {    
        public Text m_TogglePlaneDetectionText;
        private ARPlaneManager m_ARPlaneManager;
        void Awake()
        {
            m_ARPlaneManager = GetComponent<ARPlaneManager>();
        }
        #region 启用与禁用平面检测
        public void TogglePlaneDetection()
        {
            m_ARPlaneManager.enabled = !m_ARPlaneManager.enabled;
            string planeDetectionMessage = "";
            if (m_ARPlaneManager.enabled)
            {
                planeDetectionMessage = "禁用平面检测";
                SetAllPlanesActive(true);
            }
            else
            {
                planeDetectionMessage = "启用平面检测";
                SetAllPlanesActive(false);
            }
    
            if (m_TogglePlaneDetectionText != null)
                m_TogglePlaneDetectionText.text = planeDetectionMessage;
        }   
    
        void SetAllPlanesActive(bool value)
        {
            foreach (var plane in m_ARPlaneManager.trackables)
                plane.gameObject.SetActive(value);
        }
        #endregion
    }
    

      在上述代码中,我们首先引入了UnityEngine.XR.ARFoundation与UnityEngine.UI两个命名空间,因为我们要用到ARPlaneManager,并且我们希望使用按钮来控制是否开启平面检测。在 Awake()方法中我们获取到ARPlaneManager组件,因此该脚本应该挂载在与ARPlaneManager组件同一个场景对象上。TogglePlaneDetection()是切换平面检测开关函数,我们使用按钮事件来控制该函数的调用,每调用一次该函数,我们首先切换m_ARPlaneManager.enabled的状态,即是切换开启与关闭平面检测功能。SetAllPlanesActive()方法的主要的目的是处理已检测到的平面的显示,根据平面检测的状态决定已检测到的平面是否显示(这里需要注意的是,我们并没有使用Destroy()方法销毁已检测的平面,因为从我们前文知道,ARPlaneManager负责已检测到的平面的处理,并不需要我们手动去销毁平面,事实上,手动销毁平面可能会引发错误)。

      整个代码逻辑非常清清晰,使用该脚本也非常简单,我们只需要将该脚本挂载在与ARPlaneManager组件同一个场景对象上,然后在UI中使用一个Button的OnClick事件绑定到TogglePlaneDetection()方法即可如下图所示。

    在这里插入图片描述

    (二)显示与隐藏被检测平面

      在上节中,我们已经可以自如的控制平面检测功能的开启与关闭,并对已检测到的平面进行了处理,上节的代码可以达到设计目的,同时我们也可以看到,即使我们关闭平面检测功能后,已检测到的平面依然是存在的,换句话说,开启与关闭平面检测功能并不会影响到已检测到的平面。

      在关闭平面检测功能后,ARFoundation将不会再检测新的平面,这有时并不是我们所希望的,在实际项目中,我们希望隐藏已检测到的平面,但我们还要继续保留平面检测功能,以便我们再次显示检测到的平面时能直接显示新检测到的平面而不是再去进行一遍平面检测工作。为实现这个功能,在Unity工程中,新建一个C#脚本文件,命名为PlaneDisplay,编写如下所示代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.XR.ARFoundation;
    using UnityEngine.UI;
    
    public class PlaneDisplay : MonoBehaviour
    {
        public Text m_TogglePlaneDetectionText;
        private ARPlaneManager m_ARPlaneManager;
        private bool isShow = true;
        private List<ARPlane> mPlanes;
        void Start()
        {
            m_ARPlaneManager = GetComponent<ARPlaneManager>();
            mPlanes = new List<ARPlane>();
            m_ARPlaneManager.planesChanged += OnPlaneChanged;
        }
        void OnDisable()
        {
            m_ARPlaneManager.planesChanged -= OnPlaneChanged;
        }
        #region 显示与隐藏检测到的平面
        public void TogglePlaneDisplay()
        {
            string planeDisplayMessage = "";
            if (isShow)
            {
                planeDisplayMessage = "隐藏平面";
            }
            else
            {
                planeDisplayMessage = "显示平面";
            }
            for (int i = mPlanes.Count - 1; i >= 0; i--)
            {
                if (mPlanes[i] == null || mPlanes[i].gameObject == null)
                    mPlanes.Remove(mPlanes[i]);
                else
                    mPlanes[i].gameObject.SetActive(isShow);
            }
            if (m_TogglePlaneDetectionText != null)
                m_TogglePlaneDetectionText.text = planeDisplayMessage;
    
            isShow = !isShow;
        }
    
        private void OnPlaneChanged(ARPlanesChangedEventArgs arg)
        {
            for (int i = 0; i < arg.added.Count; i++)
            {
                mPlanes.Add(arg.added[i]);
                arg.added[i].gameObject.SetActive(isShow);
            }
        }
        #endregion
    }
    
    

      在上述代码中,我们一样首先引入了UnityEngine.XR.ARFoundation与UnityEngine.UI两个命名空间。在 Start()方法中我们使用m_ARPlaneManager.planesChanged += OnPlaneChanged注册了检测到的平面发生变化的事件(事件注册一定是成双成对的,我们在Start()方法中进行了注册,在OnDisable()方法中撤消了注册,如果事件注册没有适当的时机撤销会引发难已排查的错误),通过OnPlaneChanged()方法,我们把所有已检测到的平面保存到mPlanes List中,并处理了新检测到的平面的显示状态。TogglePlaneDisplay()方法是切换平面显示状态的开关函数,我们使用按钮事件来控制该函数的调用,每调用一次该函数,我们首先切换已检测到的平面的显示状态。这里需要注意的是,因为我们把所有已检测到的平面都保存在mPlanes List中,但这个List中的已检测平面为所有的历史已检测平面,并不会主动删除过期失效的平面(在ARFoundation中,ARPlaneManager组件负责新增、更新、删除平面,但其并不会影响到我们保存的已检测平面),所示我们需要首先删除那些失效的平面。

      与上节中脚本使用一样,我们只需要将该脚本挂载在与ARPlaneManager组件同一个场景对象上,然后在UI中使用一个Button的OnClick事件绑定到TogglePlaneDisplay()方法即可。

      本节平面检测与显示的功能测试效果图如下所示:
    在这里插入图片描述

    参考资料

    arfoundation-samples arfoundation-samples

    展开全文
  • ARFoundation之路_很全面的

    千次阅读 2019-11-20 09:56:18
    ARFoundation之路-概述 ARFoundation之路-架构及术语 ARFoundation之路-图像跟踪 ARFoundation之路-光照估计 ARFoundation之路-点云与参考点 ARFoundation之路-平面管理 ARFoundation之路-平面管理之...
    展开全文
  • ARFoundation之路-点云与参考点

    千次阅读 2019-07-18 21:52:21
      AR 是对现实环境的增强,运动跟踪可以解决用户在现实环境中自己在哪里的问题,但运动跟踪本身并不能解决用户周边环境是什么的问题,运动跟踪不能识别出平面,也不能...  特征点是指 ARFoundation 通过 VIO 检...
  • ARFoundation之路-环境配置(iOS)之一

    千次阅读 2019-06-24 08:06:18
      前文我们讲述了ARFoundation开发Android应用的开发环境配置与发布部署,本文主要讲述在Mac电脑上使用Unity开发ARFoundation AR应用的环境配置与发布部署,ARFoundation在iOS端使用的是ARKit的底层技术,并且...
  • ARFoundation之路-3D物体识别之二

    千次阅读 2019-08-14 17:51:30
    版权声明:Davidwang原创文章,...虽然3D物体检测识别跟踪在技术上与2D图像检测识别跟踪有非常大的差异,但在ARFoundation中,3D物体识别跟踪与2D图像识别跟踪操作几乎完全一致,这大大的方便了开发者的使用。 (一...
  • ARFoundation之路-人脸检测增强之一

    千次阅读 2019-08-21 09:30:29
    版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。   在AI物体检测识别领域,最先研究的是人脸检测识别,目前技术发展最成熟的也是人脸检测...1、《ARCore之路-Unity开发从入门到实践》
  • ARFoundation之路-3D物体识别之一

    千次阅读 热门讨论 2019-08-14 14:02:37
      在ARFoundation中,3D物体跟踪通过预先记录3D物体的空间特征信息,在真实环境中寻找对应的3D真实物体对象,并对其姿态进行跟踪。与图像跟踪类似,要在ARFoundation中实现3D物体识别跟踪也需要一个参考物体库,这...
  • ARFoundation之路-3D物体识别之三

    千次阅读 热门讨论 2019-08-15 22:11:20
      3D物体检测识别跟踪技术上比2D图像检测识别跟踪要复杂得多,但ARFoundation对这两种技术进行了统一,提供给开发人员完全一致的使用界面,大大方便了应用开发。 (一)3D物体跟踪启用与禁用   在ARFoundation中...
  • ARFoundation之路-人脸检测增强之三

    千次阅读 2019-08-25 20:03:40
      ARFoundation在进行人脸检测时需要借助底层Provider提供的算法及功能特性,不同的底层能提供的功能特征也不相同,如在ARCore人脸检测中,提供人脸区域的概念与功能,而在ARKit人脸检测中,则提供Blend Shape功能...
  • ARFoundation之路-图像跟踪

    千次阅读 热门讨论 2019-07-20 09:45:20
      图像跟踪技术,是指通过图像处理技术对摄像头中拍摄到的2D图像进行定位,并对其姿态进行跟踪的技术。图像跟踪技术的基础是图像识别,图像识别是指识别和检测出数字图像...  在ARFoundation中,图像跟踪系统依...
  • ARFoundation之路-AR阴影生成之一

    千次阅读 热门讨论 2019-08-06 16:26:38
      阴影在现实生活中扮演着非常重要的角色,通过阴影我们能直观的感受到光源...  与真实世界一样,在数字世界中阴影的生成也需要光源,同时,在AR中阴影生成与 VR 相比有很大不同,VR是纯数字世界,在其环境中肯...
  • ARFoundation之路-环境配置(Android)

    万次阅读 多人点赞 2019-06-21 08:42:58
      ARFoundation在Android端使用的是ARCore的底层技术,因此,环境准备与单独使用ARCore进行开发相似,请参见博文《ARCore之路-环境准备》(不需要安装ARCore unity SDK ),本文假设读者已经安装Unity2019.1最...
  • ARFoundation之路-可跟踪对象

    千次阅读 热门讨论 2019-07-01 17:25:42
      在ARFoundation中,平面(Plane)、特征点云(Point Cloud)、参考点(Reference Point)、增强图像(Tracked Image)、环境探头(Environment Probe)、人脸(Face)、3D物体(Tracked Object)这七类对象称为...
  • ARFoundation之路-Raycasting

    千次阅读 2019-07-03 09:47:31
    (一)射线检测概念 ...  在AR中,当我们检测并可视化一个平面后,要在平面上放置我们物体,但在平面上什么位置放置我们物体呢?我们要知道检测到的平面是三维的,而我们的手机屏幕却是二维的,如...
  • ARFoundation之路-Environment Probe之二

    千次阅读 2019-07-26 18:55:45
      在ARFoundation中,环境反射功能可以使虚拟物体反射真实世界中的环境信息,从而更好的将虚拟场景与真实世界环境混合。 (一)使用Environment Probe   AR环境反射是一个高级功能,需要学习掌握相关知识才能...
  • ARFoundation之路-平面管理

    千次阅读 2019-07-08 18:57:30
    同时,平面也是可跟踪对象,在前几节中我们知道,ARFoundation使用ARPlaneManager管理器来管理平面。 (一)平面检测管理   AR中检测平面的原理:ARFoundation对摄像机获取的图像进行处理,分离图像中的特征点...
  • ARFoundation之路-光照估计

    千次阅读 2019-07-23 21:36:01
      AR 与 VR 在光照上最大的不同在于 VR 世界是纯数字世界,有一套完整的数学模型,而 AR 则是将计 算机生成的虚拟物体或关于真实物体的非几何信息叠加到真实世界的场景上实现对真实世界的增强,融 合了真实世界...
  • ARFoundation之路-Environment Probe之一

    千次阅读 2019-07-26 12:15:12
      在AR中实现环境光反射是一项非常高级的功能,也是增强AR虚拟物体可信度的一个重要组成部分,因为AR中对环境光的估计信息往往都不完整,需要利用人工智能技术推算补充不完整的环境信息,因此,AR中的环境反射不能...
  • ARFoundation之路-人脸检测增强之二

    千次阅读 热门讨论 2019-08-22 21:21:34
    版权声明:Davidwang原创文章,严禁...在计算机视觉中,头部姿势估计是指推断头部朝向,结合AR位置信息构建人脸矩阵参数的能力,有利因素是人体头部运动范围是有限的,可以借此消除一些误差。 (一)人脸姿态   人...
  • ARFoundation之路-AR子系统

    千次阅读 2019-07-21 11:55:50
      在前文中,我们知道,ARFoundation的体系架构是建立在一系列的子系统(subsystem)上,这个架构的好处类似于接口(Interface),将界面与具体的实现进行分离,用户只需要面向接口编程,而无需关注具体的算法...
  • ARFoundation( ) 我应该使用什么版本? Unity版本 ARFoundation版本 2018.4 2019.4 2020.1 2020.3 2021.1 2021.2 4.2(预发行版) AR子系统 ARFoundation建立在“ ”上,并依赖于名为的独立软件包。 ...
  • ARFoundation大全.pdf

    2020-04-15 15:10:44
    第1章介绍了AR技术原理和ARFoundation概况,讲述了Unity开发AR应用的环境配置及调试方法; 第2章对ARFoundation体系架构及关键组件、核心功能技术进行了深入探讨; 第3章学习平面检测识别及参考点相关知识; 第4...
  • ARFoundation之路-AR阴影生成之四

    千次阅读 2019-08-26 16:00:39
    版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。   在前述章节中,...在VR中,我们可以将光照效果烘焙进场景中以达到提高性能的目的,然而由于AR场景就是真实环境,无法预先烘焙场景(在...
  • ARFoundation之路-人脸检测增强之四

    千次阅读 热门讨论 2019-09-25 21:31:17
    版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。   苹果公司在iPhone X及后续机型上添加了一个深度摄像机(TrueDepth Camera),利用这个深度摄像机可以更加精准捕捉用户的面部表情,提供更...
  • ARFoundation之路-视频播放

    千次阅读 2019-09-03 11:44:11
      在AR中播放视频也是一种常见的需求,如在一个展厅中放置的虚拟电视上播放宣传视频,或者在游戏中为营造氛围而设置的虚拟电视视频,本节我们将学习如何在AR场景中播放视频。 (一)VideoPlayer组件   Video...
  • ARFoundation之路-AR阴影生成之三

    千次阅读 2019-08-11 22:10:54
    ARFoundation ; using UnityEngine . XR . ARSubsystems ; [ RequireComponent ( typeof ( ARRaycastManager ) ) ] public class AppControler : MonoBehaviour { public GameObject ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,584
精华内容 1,433
关键字:

arfoundation之路