查看原文
其他

Unity 与 ARkit 开发-基础篇

2017-09-10 马瑞 Unity官方平台

上一周Unity官方技术团队为大家带来直播课程《Unity中使用ARKit》,今天Unity技术经理马瑞将为大家分享使用Unity与ARKit开发AR游戏的的一些基础及通用小技巧。


AR

AR体验的基本需求(及ARKit框架的定义),是在用户所处的现实世界空间与可视化建模内容的虚拟空间之间创建对应关系的能力。当您的应用程序显示虚拟内容与实时摄像头图像,用户会感受到增强的现实:产生虚拟内容是真实世界的一部分的错觉。

  

VIO 视觉惯性测距

(Visual-inertial Odometry)


为了在真实空间和虚拟空间之间创建对应关系,ARKit使用一种称为视觉惯性测距的技术。该过程会将iOS设备的运动感应硬件捕捉的信息(CoreMotion)与设备相机可见的场景的计算机视觉分析相结合。

 

ARKit的场景理解系统和光照估计
(Scene understanding and Lighting Estimation)

 

  • 平面寻找 - 使用稀疏点云提取和创建平面




    Prefabs\GeneratePlanes 和UnityARGeneratePlane.cs 可以生成平面。该脚本监听平面并检测更新,再为检测到的每个平面创建一个新平面的实例。它的特征:


    水平面与重力相关

    在多帧间运行

    表面对齐程度

    平面合并


  •  碰撞检测 - 针对点云和平面射线碰撞检测




    ARKit SDK分析相机视图中的内容,并根据可识别的功能和估计的深度确定点数。碰撞结果按照与设备的距离进行排序。平面优先于feature point。


  • 光照估计 - 估计当前摄像机的环境光值,以便用真实世界的光照亮数字物体




    ARKit SDK提供了对当前摄像机视图ambient light(环境光)的估计。通过将ARKit值在UnityARAmbient.cs中统一转换为更合适的强度来调整场景中单位光的亮度(通常为Directional Light)。这允许应用程序用真实世界的光来照亮场景中的对象。


成功游戏案例

1

Pokemon GO

Niantic使用平面发现来更准确地将小宠物放在现实世界中。从几个不同的角度观看小宠物时更好的锚定。

 

 

2

Normal VR

锚定放置和阴影映射。3D人物使用通过网络从HTC Vive发送控制器的位置。

 

 

3

Nedd

创建进入虚拟世界的传送门,在现实世界中使用ARKit传送门。



大家可以在Asset Store资源商店里(https://assetstore.unity.com/packages/tools/particles-effects/world-portals-45383)找到WRLD Unity SDK插件,可以帮助大家轻松地创作出拥有这样效果的应用程序。


设置场景

基本设置由3个脚本组成:

ARCameraManager.cs - 设置MainCamera的local position
您不应手动设置您的相机位置,该脚本将自动设置相机的相应方向和位置。

UnityARVideo.cs - 从设备摄像机读取视频
确保将相机的清除颜色设置为alpha = 0。

 

UnityARCameraNearFar.cs - 更新far和near clipping plane

 

平面寻找
GeneratePlanes.cs  - 将处理平面检测,它将在适当的大小的场景中产生一个平面的prefab。

 

测试点云
PointCloudParticleExample.cs - 将处理feature point检测并以粒子效果的形式显示它们。如果在将您的构建放在设备上后不会显示,请确保在Inspector窗口中选择了适当的粒子效果,并且没有更改相机的位置或方向。

 

光照估计
UnityARAmbient.cs -从SDK事件回调设置光强度。

 

通用小技巧

  1. 如果您需要碰撞检测速度更快,而不是更高的精度,您可以使用Feature points,而不是平面检测。

  2. 获得所需结果后,禁用平面检测。平面检测需要的计算量更大。因为放置在场景中的对象不需要一直做平面检测,所以在获得结果以后可以禁用平面检测。

  3. 允许在应用中重置ARKit会话m_session.RunWithConfigAndOption(config, option),option可以重置上次会话。

  4. 使用shadowPlanePrefab在平面和现实世界中投射阴影,这将在您的AR应用程序中产生更有说服力的效果,如果表现是您的关注,您也可以使用Blob Projector。

  5. 使用真实世界大小。Unity中的1个单位表示一米,在放置对象和创作内容时需要考虑到这一点。如果您的物体Transform的Scale设置为10,出现多大的对象肯定会让您感到惊讶!

  6. 考虑对象交互 - ARkit只有几个简单的功能可以使用,沿着放置的平面移动物体,游戏或应用在手机和平板电脑上运行,最佳做法是使用触摸手势。

  7. 使用ARkit Remote加速您的开发。

 

结语

今天就为大家分享到这里,如果大家想动手练习,请点击【阅读原文】下载马瑞提供的工程文件。后面我们还会继续为大家分享更多Unity中使用ARKit开发的内容在Unity官方中文社区(unitychina.cn),请保持关注!

 

推荐阅读

VR中的动画:混用动作捕捉与Unity关键帧

Unity教程 | 使用ARKit为iOS开发AR应用

使用Unity开发AR游戏《AR Dragons》经验分享

Unity案例分享 | 全3D还原大师经典画作

VR解谜游戏经验分享:《I Expect You To Die》


近期Unity官方活动


9月13日晚8点,Unity官方技术团队将为大家带来“Unity着色器训练营-第一期”,欢迎大家提前预约直播,直播地址:http://kuaibao.qq.com/s/20170906A05KFJ00


9月,Unity与Qualcomm联合举办技术开放日将在深圳,北京和上海三地正式开启!Unity官方技术团队与Qualcomm资深工程师将共同探究VR技术在游戏及其他行业的应用潜能。


点击“阅读原文”进入Unity官方中文社区

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存