AR视觉给移动生活带来的变革

开发 VR/AR
对于AR和VR设备的普及化,可能还需要一个比较长的过程,其中包括硬件升级和软件升级的过程,也可能包括用户对消费需求的升级。所以前景和市场还是很有希望的,因为它的发现大大提升了之前体感类游戏或者交互的体验,让用户能够随时随地的置身于各式各样的虚拟场景,并得到非常逼真的体验。

作者 | 张辰,单位:中国移动智慧家庭运营中心

​Labs 导读

随着移动技术的发展,5G技术的普及,AR/VR行业也迎来了新的春天。由于AR/VR行业的应用,需要大数据量的计算、渲染、以及配套的硬件设备普及,所以为了让你我有更好的观感,对于硬件和软件的要求是非常高的。不过随着科技的发展,这一切都成为了可能,本文就带你了解一下AR/VR在移动开发中的一些技术方案。

Part 01  AR的开发技术难点 

在AR技术逐渐火热的今天,很多一线互联网公司都组件了自己的团队来开发独立的AR框架。以下是一些常见的AR技术平台和运营的公司。

图片

那么AR的开发技术难点在哪里呢?

界面问题:缺乏通用的UI隐喻

尽管人们知道可以用AR做些什么,但并不确定如何使用这项突破性的技术,以及如何运用一种共通的语言帮助梦想照进现实。AR 的难点在于它是一项全新的技术,无法真正受益于任何界面隐喻。我们不能借鉴先例,而且没有过多的背景知识。比如,如何体现现实环境、虚拟环境、并让用户理解移动手机,扫描环境,互动或观看虚拟物体,并且提示行动避开危险等,都尚未形成共通的、直觉的 UI 习惯。如果无法解决UI的隐喻问题,就很难抓住 AR 为我们带来的独特数字机遇。

能耗问题:功耗大、易发热

目前市面上的CPU和GPU大部分都是为通用设备开发,并没有专有为AR设备开发的芯片,导致目前的CPU 尺寸(Size)虽然在微型化处理器和显卡方面取得了很大进展,但是仍然没有达到让高端 AR 成为现实的水平。

功耗(Power)渲染AR体验的过程非常耗电。事实上功耗越大,产生的热量也就越多,产生的这些热量又会反过来降低处理器的速度,甚至使其完全短路。设备越小,散热速度就越慢。

内容问题:3D设计门槛高

AR领域内容的设计需要3D设计的知识。目前,拥有这项能力的技术人员基数较小,除非是专业的动画师、平面设计师、机械工程师或视频游戏制作人,否则很难在这方面有太多经验。

图片

Part 02  ArCore在Android端的应用

目前的这些方案是如何比较好地应用到移动开发中的呢?我们以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支持:

implementation 'com.google.ar:core:1.31.0'

同步后在代码段中就可以添加对于ARCore的检查代码了:

 ArCoreApk.Availability availability = ArCoreApk.getInstance().checkAvailability(this);

即使“面向AR的Google Play服务”随AR必备应用一同安装,使用不受支持的设备的用户可能也可以从外部来源安装该服务。使用checkAvailability()检查是否支持ARCore可确保获得一致的体验。

checkAvailability()可能需要查询网络资源来确定设备是否支持 ARCore。在此期间,它将返回UNKNOWN_CHECKING。为了缩短感知延迟时间并减少弹出式窗口,应用应在其生命周期的早期阶段调用一次checkAvailability()以启动查询,并忽略返回值。这样,在调用 maybeEnableArButton() 时,缓存结果将立即可用。

由于AR设备必须用到相机,所以还请在使用AR设备前,请求并开启相机权限:

if (!CameraPermissionHelper.hasCameraPermission(this)) {
CameraPermissionHelper.requestCameraPermission(this);
return;
}

此时我们准备工作就做好了,就可以构建一个AR Session了。

Part 03 AR Client开发

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 可以直接调用:

session.close();

即可。

然后我们在Activity中构建渲染循环,

  • 创建渲染用GlSurfaceView ,并实现渲染render类。同时创建自己绘制Mesh需要的渲染类,如planetRender(绘制地面),BackgroundRenderer (绘制背景)等。
  • 在OnSurfaceCreate 渲染线程回调中,添加对于mesh,render,texture的初始化操作,申请GPU空间。
  • 在OnSurfaceChanged回调中,设置渲染缓冲的视口。
  • 在OnDrawFrame中加入每帧的渲染逻辑,
Frame frame = session.update();

可以获取当前帧的信息,其中包括相机信息,RGB图,depth图等。

Camera camera = frame.getCamera();

可以获取到当前相机状态,如是否处在跟踪物体,是否跟踪失败等。通过相机的不同状态来绘制三维物体,可以动态的改变三维物体的显示(如位置,大小,旋转,是否被遮挡等)。

Frame中同样存储这点云、锚点、平面这些检测信息,你同样可以根据相机得到视点信息,重新构建出一个三维世界,把以上得到的信息具体的绘制到场景中。在现实的台球桌面上,虚拟化了一个锥形物体,是通过检测得到的平面信息,在平面上添加指定位置的锚点,并在锚点上绘制锥形体。

Part 04  AR/VR的趋势和未来

对于AR和VR设备的普及化,可能还需要一个比较长的过程,其中包括硬件升级和软件升级的过程,也可能包括用户对消费需求的升级。所以前景和市场还是很有希望的,因为它的发现大大提升了之前体感类游戏或者交互的体验,让用户能够随时随地的置身于各式各样的虚拟场景,并得到非常逼真的体验,相信随着移动技术的发展,有一天大家都能用上价格实惠,体感很好的AR/VR产品。​

责任编辑:未丽燕 来源: 移动Labs
相关推荐

2014-05-09 15:30:46

2017-04-06 10:10:16

2014-03-31 11:49:16

软件定义网络SDN

2012-12-22 15:46:10

中国建设银行移动支付移动通信

2020-08-04 10:24:50

计算机视觉人工智能AI

2012-08-22 10:36:07

2009-05-05 11:03:02

Vmware虚拟化IT产业

2013-01-28 10:45:52

移动医疗趋势移动互联网

2013-09-18 09:29:34

移动趋势CIOBYOD

2016-12-20 15:42:47

AR教育

2012-10-30 09:24:27

2011-03-16 12:04:44

2019-04-16 08:01:32

ARVR人工智能

2014-12-04 10:12:49

2013-04-11 21:27:01

及时语移动电话会议

2015-06-05 13:36:42

2012-08-08 10:52:35

2019-12-27 14:14:42

ARVR金融

2011-07-12 09:25:59

传送网网络IP化分组传送

2013-02-21 10:44:03

云计算云平台云服务提供商
点赞
收藏

51CTO技术栈公众号