Labs 导读 随着移动技术的发展,5G技术的普及,AR/VR行业也迎来了新的春天。由于AR/VR行业的应用,需要大数据量的计算、渲染、以及配套的硬件设备普及,所以为了让你我有更好的观感,对于硬件和软件的要求是非常高的。不过随着科技的发展,这一切都成为了可能,本文就带你了解一下AR/VR在移动开发中的一些技术方案。
在AR技术逐渐火热的今天,很多一线互联网公司都组件了自己的团队来开发独立的AR框架。以下是一些常见的AR技术平台和运营的公司。 那么AR的开发技术难点在哪里呢?
尽管人们知道可以用AR做些什么,但并不确定如何使用这项突破性的技术,以及如何运用一种共通的语言帮助梦想照进现实。AR 的难点在于它是一项全新的技术,无法真正受益于任何界面隐喻。我们不能借鉴先例,而且没有过多的背景知识。比如,如何体现现实环境、虚拟环境、并让用户理解移动手机,扫描环境,互动或观看虚拟物体,并且提示行动避开危险等,都尚未形成共通的、直觉的 UI 习惯。如果无法解决UI的隐喻问题,就很难抓住 AR 为我们带来的独特数字机遇。
目前市面上的CPU和GPU大部分都是为通用设备开发,并没有专有为AR设备开发的芯片,导致目前的CPU 尺寸(Size)虽然在微型化处理器和显卡方面取得了很大进展,但是仍然没有达到让高端 AR 成为现实的水平。 功耗(Power)渲染AR体验的过程非常耗电。事实上功耗越大,产生的热量也就越多,产生的这些热量又会反过来降低处理器的速度,甚至使其完全短路。设备越小,散热速度就越慢。
AR领域内容的设计需要3D设计的知识。目前,拥有这项能力的技术人员基数较小,除非是专业的动画师、平面设计师、机械工程师或视频游戏制作人,否则很难在这方面有太多经验。 目前的这些方案是如何比较好地应用到移动开发中的呢?我们以ARCore举例来看下想要在移动端开发一个AR项目需要做哪些事情。 首先要明确的是平台基于Android,开发IDE基于Android Studio(需要 Android Studio 3.1 或更高版本以及 Android SDK Platform 7.0<API 级别 24>或更高版本)。其次我们要在需要运行AR工程的设备上安装Google Play,由于对于ARCore来讲,大部分的数据计算和算法运行都需要google_play_service支持,所以升级到最新版本Google_Play_Services_for_AR_1.31.0_x86_for_emulator.apk非常重要。 然后在你的AR项目中找到Manifest添加: <uses-permission android:name='android.permission.CAMERA' />
<!-- Limits app visibility in the Google Play Store to ARCore supported devices (https://developers.google.com/ar/devices). --> <uses-feature android:name='android.hardware.camera.ar' />
<application …> …
<!-- 'AR Required' app, requires 'Google Play Services for AR' (ARCore) to be installed, as the app does not include any non-AR features. --> <meta-data android:name='com.google.ar.core' android:value='required' /> </application> feature支持,并在gradle中导入ARCore支持:
同步后在代码段中就可以添加对于ARCore的检查代码了: ArCoreApk.Availability availability = ArCoreApk.getInstance().checkAvailability(this); 即使“面向AR的Google Play服务”随AR必备应用一同安装,使用不受支持的设备的用户可能也可以从外部来源安装该服务。使用checkAvailability()检查是否支持ARCore可确保获得一致的体验。 checkAvailability()可能需要查询网络资源来确定设备是否支持 ARCore。在此期间,它将返回UNKNOWN_CHECKING。为了缩短感知延迟时间并减少弹出式窗口,应用应在其生命周期的早期阶段调用一次checkAvailability()以启动查询,并忽略返回值。这样,在调用 maybeEnableArButton() 时,缓存结果将立即可用。 由于AR设备必须用到相机,所以还请在使用AR设备前,请求并开启相机权限:
此时我们准备工作就做好了,就可以构建一个AR Session了。 AR Session 是所有AR流程的一个集合,(如运动跟踪、环境理解和光照估算等),在Android中用于管理 AR 系统状态并处理会话生命周期。官方提供的接口提供允许应用创建、配置、启动或停止会话的方法。最重要的是,它可以让应用接收允许访问相机图像和设备位置方向的帧。 下面我们来创建Session吧,几行代码就可以完成。 public void createSession() { // Create a new ARCore session. session = new Session(this);
// Create a session config. Config config = new Config(session);
// Do feature-specific operations here, such as enabling depth or turning on // support for Augmented Faces.
// Configure the session. session.configure(config); } 是不是很简单,同样,关闭Session 可以直接调用:
即可。 然后我们在Activity中构建渲染循环, 1.创建渲染用GlSurfaceView ,并实现渲染render类。同时创建自己绘制Mesh需要的渲染类,如planetRender(绘制地面),BackgroundRenderer (绘制背景)等。 2.在OnSurfaceCreate 渲染线程回调中,添加对于mesh,render,texture的初始化操作,申请GPU空间。 3.在OnSurfaceChanged回调中,设置渲染缓冲的视口。 4.在OnDrawFrame中加入每帧的渲染逻辑, Frame frame = session.update(); 可以获取当前帧的信息,其中包括相机信息,RGB图,depth图等。
可以获取到当前相机状态,如是否处在跟踪物体,是否跟踪失败等。通过相机的不同状态来绘制三维物体,可以动态的改变三维物体的显示(如位置,大小,旋转,是否被遮挡等)。 Frame中同样存储这点云、锚点、平面这些检测信息,你同样可以根据相机得到视点信息,重新构建出一个三维世界,把以上得到的信息具体的绘制到场景中。在现实的台球桌面上,虚拟化了一个锥形物体,是通过检测得到的平面信息,在平面上添加指定位置的锚点,并在锚点上绘制锥形体。 对于AR和VR设备的普及化,可能还需要一个比较长的过程,其中包括硬件升级和软件升级的过程,也可能包括用户对消费需求的升级。所以前景和市场还是很有希望的,因为它的发现大大提升了之前体感类游戏或者交互的体验,让用户能够随时随地的置身于各式各样的虚拟场景,并得到非常逼真的体验,相信随着移动技术的发展,有一天大家都能用上价格实惠,体感很好的AR/VR产品。 |
|
来自: 阿明哥哥资料区 > 《49.AI.AR.VR.5G.四维》