3分钟用arkit做出你的IOS-AR项目

发表于2017-06-19
评论5 6.6k浏览

苹果在AR一直布局VR,最近的苹果开发者大会上,果家终于放出大招:Ios移动端Arkit平台以及VR兼容新桌面操作系统macOS High Sierra

 

和几个做算法设计的程序猿聊天,大家都觉得AR不是什么新东西,尤其是pokemon go推出的前后,好多大小公司都对AR有所涉猎,比如阿里的ar红包,百度的ar地图;墙外的科技公司也是百家齐放。这次苹果放出的ARkit相比之下到底有什么新意呢。

说明: C:Users冬玲DocumentsTencent Files45360288ImageC2CZU6WJ{6`UHP_@S%)AQD1KYU.png

 

苹果家的arkit工程师现场给AR简单定义,然后给出的几个例子:

童话世界在床单上的构建(母婴行业和K12的小伙伴们有没有睁大眼睛看这段)

IKEA 在线选家具

Pokémon go 效果提升 , 沉浸式体验升级

增强现实(AugmentedReality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。

比起在开发者大会上展示的wingnutAR,指环王团队的DEMO ,这几个码农展示的列子对开发者来说更细腻更有启发性。

苹果很少在大会上吹嘘算法有多厉害,只是展示效果,的确终端用户是不看算法的,要的就是效果。

 

总结一下工程师的介绍:ARkit平台上的作品不光是视觉上的提升,对于开发者来说,更容易操作。

工程师说,在过去要想创作一个好的AR系的东西,下面视频截图里这些关键词领域内的知识你都要懂:

而苹果的ARkit会让一切变得更容易

ARKit到底是什么呢?童颜简单几个字描述清楚移动端的AR平台,高级API

ARKIt主要有三层核心技术技术

第一层:快速稳定的世界定位 ,包括实时运算,运动定位,无需预设(软硬件)

说明: C:Users冬玲AppDataRoamingTencentUsers45360288QQWinTempRichOleWP9)Q%R%U3}X5TIRGECSWMC.png

第二层:平面和边界感知 碰撞测试和光线估算,让虚拟内容和现实环境无缝衔接。

 第三层,渲染 支持各种渲染制作工具,目标就是简单易用,和其它插件融合度好。 

另外让开发者们惊叫的就是 unity3dunreal也是全线支持。

好了,我们看看这个arkit到底怎么用:苹果AR工程师总结起来也是超级好用,看下图

 

一切的核心是说明: C:Users冬玲DocumentsTencent Files45360288ImageC2CL{B0HHS05RX8J[FICU9QI@P.png ,首先创建一个ARSession

然后就是设置你的ARsession configuration

 

可以使用xcode或者unity3darkit插件,下面会介绍如何在xcode里创建arkit项目

推荐使用macOS10.13 and Xcode 9 ,如果用iphone或者ipad测试的话同样ios系统需要升级到11 beta.

 

回到本文吹嘘的3分钟用arkit做出个AR项目。我们一步一步来

首先创建你的xcode项目

 

说明: C:360安全浏览器下载arkit-101-get-started-building-augmented-reality-application-iphone-ipad-quickly.w1456 (2).jpg

选择AR App

说明: C:360安全浏览器下载arkit-101-get-started-building-augmented-reality-application-iphone-ipad-quickly.w1456 (3).jpg

选择下一步

在项目选项页面, 内容技术Content Technology要选择  SceneKit .

 ARKit提供了两种主要AR技术Content Technology 分别是:

Scenekit: 基于3D场景

SpriteKit:基于2D场景 

另外的MetalApple新一代图形API

说明: C:Users冬玲AppDataLocalMicrosoftWindowsINetCacheContent.Wordarkit-101-get-started-building-augmented-reality-application-iphone-ipad-quickly.w1456 (5).jpg

Team那里可以填写你的开发者ID

下一步,选择项目保存的路径,继续

说明: https://img.reality.news/img/83/61/63632453186880/0/arkit-101-get-started-building-augmented-reality-application-iphone-ipad-quickly.w1456.jpg

不出意外你应该可以看到下面的画面

 说明: C:360安全浏览器下载arkit-101-get-started-building-augmented-reality-application-iphone-ipad-quickly.w1456 (8).jpg

接下来要准备你的三维模型,一般的Mesh低模都可以,推荐使用dae格式文件。

 (感谢jasonodon team的图片)下面是我测试用的模型,记得贴图也要一起输出

说明: https://img.reality.news/img/93/32/63632454811850/0/arkit-101-get-started-building-augmented-reality-application-iphone-ipad-quickly.w1456.jpg

 下面要把模型加到项目里了,大家觉得会很麻烦吧。苹果arkit团队答应过的,炒鸡简单,只要找到你的项目目录,以及项目下的art.scnassets 文件夹。 

里面有艘船,船是arkit自带的demo里的,删掉船和船的材质,换成你自己的模型和材质,比如我例子中的广告牌。

 

说明: C:360安全浏览器下载arkit-101-get-started-building-augmented-reality-application-iphone-ipad-quickly.w1456 (15).jpg

微调广告牌尺寸 (这里有点麻烦,拼手气吧,你自己的模型你做主)。

修改关键代码并生成项目

记得把代码里的船(ship.scn换成我们的新模型名称就可以

关键代码在这里:

let scene =SCNScene(named: art.scnassets/你的模型.dae")!

大功告成了! 就是这样的东西,就是要把模型滋生参数调节的漂亮一下就更好了

说明: C:360安全浏览器下载arkit-101-get-started-building-augmented-reality-application-iphone-ipad-quickly.w1456 (14).jpg

放上恐龙和白垩纪侏罗纪植物就是这样的效果了

说明: C:Users冬玲DocumentsTencent Files45360288ImageC2CIOFK[%GB{4MKM42`@BGNZ4S.jpg

 

特别想画蛇添足的引用来自美剧硅谷最新一集的一句台词 :“thedemo is amazing when you run it on a 10,000$ rig, but future of VR is mobile.thereis no phone on the earth can handle a demo like that not let alone the fullbloated platform. 这句台词核心说未来的VR属于移动平台。人手一台的移动平台就是我们每人都有智能手机,未来的AR设备只能越来越简洁,而配置却会更亲民,价格更低,处理器不一定更快。对于终端用户和开发者一样,简单好用低配才是王道。 

说明: C:Users冬玲AppDataLocalMicrosoftWindowsINetCacheContent.Wordkeenanvortex.jpg

送上ARkitdemo代码一段,网上应该可以随便搜到,

 

项目结构

  //在界面上创建ARSCNView,用于展示AR

 @IBOutlet var sceneView: ARSCNView!

    override func viewDidLoad() {

        super.viewDidLoad()

        // 设置代理

        sceneView.delegate =self

        // 显示一些数据,如fps之类的

       sceneView.showsStatistics = true

        // 创建一个SCNScene,用于显示3d模型

        let scene =SCNScene(named: "art.scnassets/ship.scn")!

        // 将加载了3d模型的SCNScene设置成ARSCNViewscene

        sceneView.scene = scene

    }

    override func viewWillAppear(_ animated: Bool){

       super.viewWillAppear(animated)

        // ARSCNView设置一个会话配置类

        let configuration =ARWorldTrackingSessionConfiguration()

        // 开始session

       sceneView.session.run(configuration)

    }

    override func viewWillDisappear(_ animated:Bool) {

       super.viewWillDisappear(animated)

        // 暂停session

       sceneView.session.pause()

    }

 

通过代码分析可以发现,在ARKit中主要有几个类

 

ARSCNView:一种显示AR体验的视图,它通过3D SceneKit内容增强了相机视图

 

ARWorldTrackingSessionConfiguration: 会话配置类,在配置类对象里设置会话如何将真实的设备运动映射到3D场景的坐标系统里,这里默认是使用重力

 

SCNScene: SceneKit 内容的容器. 你可以从3D建模工具生成的文件中加载一个场景,或者用代码创建一个 ,然后把它显示在视图上

 

体验感受

ARKit API够简单,效果够好,还有就是不需要额外硬件,苹果家族基本都支持 

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引