Tag: arkit

开始学习如何制作第一个ARKit应用程序

苹果的ARKit API使每个iOS开发人员都可以使用令人兴奋的增强现实世界,但是您从哪里开始呢? 与我们一起进行增强现实之旅,构建AR太阳系,并学习如何制作您的第一个ARKit应用程序。 这篇文章来自ARKit的多部分系列,我们讨论AR的设计,构建演示应用程序,探索和测试ARKit的许多功能。 我们之前曾写过关于 为AR应用程序设计3D模型的文章 。 介绍 AR是神奇的应用程序(如神奇宝贝Go,Snapchat的动画表情符号和Instagram的3D贴纸)背后的核心技术。 苹果在2017年WWDC上宣布了ARKit,已经产生了一些令人印象深刻的软件,结合了有趣和实用的应用程序,为每个人提供了一些东西。 我们希望有机会尝试使用它,看看我们可以用它构建什么令人难以置信的东西。 在过去的一年中,Novoda一直在研究ARKit的功能,了解我们可以构建的内容以及该技术的局限性,我们用它来构建内容有很多乐趣,并希望分享一些发现。 他们说,将房屋设置为帽子是测试位置的最佳方法 在本演示中,我们将使用在本系列的设计部分中创建的自定义3D模型。 即使您无法创建自己的自定义模型,也可以使用Apple提供的简单AR多维数据集或从SketchUp或Google的Poly下载模型 首先要了解的是AR如何通过设备相机感知世界:它将AR相机输入转换成由平面,光源,虚拟相机和特征点组成的场景。 ARKit识别场景图像中的显着特征,跟踪这些特征在视频帧中的位置差异,并将该信息与运动感应数据进行比较。 结果是设备位置和运动的高精度模型,该模型还可以分析和理解场景的内容。 如果您想进行更深入的分析,我强烈建议您阅读此页面Apple的About Augmented Reality或在ARKit上观看他们的WWDC 2017演讲。 我还建议您观看WWDC 2018的《了解ARKit跟踪和检测》演讲以及ARKit2视频。 带有平面和光源的模型在Xcode上的外观。 这将被添加到AR场景中 通过此世界跟踪和平面检测,ARKit可以创建特征点 ,ARKit中使用了特征点将模型放置在场景中,并将模型锚定在其“周围”环境中。 如Apple所述: 这些点代表在相机图像中检测到的显着特征。 它们在3D世界坐标空间中的位置被推断为ARKit执行的图像分析的一部分,以便准确跟踪设备的位置,方向和运动。 总而言之,这些点从摄像机的角度松散地与实际对象的轮廓相关。 使用ARView和ARSCNView 为了构建AR应用程序,我们遵循了一系列教程AppCode ARKit简介,带有3D对象的AppCoda ARKit,由示例创建的带有ARKit和MarkDaws AR的Pusher构建AR,以及Apple提供的有关AR类的文档。 由于Apple和其他教程已经介绍了大多数基本设置,因此我们不会在此处发布所有代码,而仅介绍我们在此过程中发现的一些逻辑,问题和解决方案。 与此项目相关的所有源代码以及以下所有与此项目相关的文章都可以在我们的GitHub上找到。 创建ARKit项目时首先要做出的决定是使用标准的单视图应用模板还是Apple提供的AR模板。 我们都尝试过这两种方法,但在简单的应用程序/演示中几乎没有什么区别。 AR模板设置为使用情节ARSCNView ,并具有带有飞机模型的预配置ARSCNView 。 如果您喜欢在编写自己的代码之前先试用工作代码,我们建议您使用AR模板,尤其是它带有一些清晰的解释性注释。 另外,如果您希望控制每段代码,那么从头开始显然更好。 在此演示中,我们使用了模板和情节提要,但是即使您从头开始创建项目,您也应该能够继续进行。 每个AR应用程序都需要一些关键点: 您将需要ARSCNView 。 大多数人将其实例命名为sceneView 。 这是所有AR魔术发生的地方。 您可以将其设置为占据整个屏幕或仅作为UI的一部分。 您需要实现ARSCNViewDelegate协议,该协议包括用于将模型呈现到View中的方法。 […]

使用ARKit制作AR短片

应用中的标题卡。 对于HoloLens, ARnold面临的最大挑战之一是无法在场景之间切换。 我们想讲一个故事,故事发生在狗的整个生命过程中,但是当全息图始终出现在您面前时(如果不做俗气的“五年后”的声音,过度)。 我们通过让每个场景淡入和淡出部分解决了HoloLens中的此问题,但从未真正满意。 在适用于iOS的ARnold中,您会注意到,在每个场景之后,我们都剪切了一张标题卡片,其样式类似于经典的儿童读物。 在这些削减中,玩家可以像其他任何非AR应用程序一样放手休息并读取卡。 这也帮助我们解决了移植应用程序时遇到的问题,即iPhone扬声器很少听到旁白旁白。 现在,您可以边听边读旁白。 但是,除了这些差异之外,我们在为HoloLens移植到ARKit进行开发时学到的大多数技术和技巧。 但是,我不一定认为从长远来看移动AR的开发是一个好主意。 当然,在未来几年中,VR / AR行业收入的大部分将流向移动AR开发人员。 但是这里有太多限制,我们已经感觉到我们已经达到了可以在智能手机的相机视图上显示哪些故事的极限。 我认为,从ARKit / ARCore项目中获得的任何知识都不会对下一代基于HMD的AR产生太大影响。 如果您不同意我的意见,请在下面的评论中告诉我-我很乐意就此进行讨论。 适用于iOS的ARnold适用于运行iOS 11的iPhone和iPad。如果您有兴趣撰写有关我们的信息(😍),请点击此处。 感谢FutureTense团队:Chinmay Chinara,Aakash Shanbhag和Kacey Weiniger。 也非常感谢我们的两个新成员,iOS开发专家Suraya Shivji和Jamie Haberman,他们设计了整个应用程序中所有令人惊叹的可爱图形和图像。

如何使用Mapbox和ARKit在增强现实中整合3D地图

最近,我想看看是否可以在增强现实中实现3D地图,以进行潜在的安装。 我从未使用过ARKit,我在3D方面的经验也相当有限,而且我对真正的本机应用程序iOS开发一无所知(React Native距我已经很近了)。 幸运的是,Mapbox是一个令人难以置信的插件,可用于在Unity中处理地图,并且还有一个(在撰写本文时为beta)(实际上是脚本和示例集)用于将ARKit集成到Unity中的插件。 通过一点点的试验和错误,我就能使事情正常进行,尽管我绝不是权威,甚至不是寻求帮助的好资源,但我可以分享自己的过程和对我有帮助的资源,以及使用Unity for AR的一些基本原理。 完成所有这些操作后,插入设备(iphone 6s或更高版本,运行iOS 11 beta),然后在XCode顶部的“播放”按钮旁边将其选择为要构建的设备,然后点击“播放” 。 XCode将编译该项目,这可能需要一些时间,最终它应该编译无误,并显示在设备的主屏幕上。 一旦构建完成,我的矿井就会自动启动,但是我听说有些设备无法自动启动该应用程序的问题,在这种情况下,您只需在主屏幕上找到它并单击即可启动。 您应该看到一个标准的摄像头,在适当的照明条件下(可能需要一点时间),您将看到代表ARKit的点云的黄色圆点,以及场景中心带有蓝色,红色的棋盘立方体以及代表3D轴线的绿色极点。 当您的相机找到可以识别为平面的东西时,黄色十字准线框将关闭以形成完整的矩形,您可以单击屏幕以放置3D立方体。 如果放置不带黄色矩形的3D立方体,则ARKit会尽最大努力确定将场景放置在空间中的哪个位置,但准确性不高。 我已经在[此处]上传了我的Unity文件。 恭喜! 希望您已经在Unity中使用ARKit! 如果没有,请前往支持论坛并寻求或寻求帮助。 在Unity中生成Mapbox地图 我不会在这里详细介绍,因为Mapbox在创建如何在Unity中构建3D地图的演练方面做得非常出色,但是基本上是以下过程: 按照此指南安装SDK,在成功完成每个步骤后,单击“下一步”。 完成本教程的所有三个阶段(您只需要第一步即可完成,但是有趣的东西出现在第2部分和第3部分中),并确保您可以成功构建一个新的Unity项目(没有ARKit),您可以单击在Unity中播放并查看。 如果您有麻烦或感觉到已发现错误,请在Github存储库中提交问题。 Mapbox使用最新的Unity beta版来快速响应我自己的问题,却看不到“ Mapbox”菜单项。 我还在[此处]上传了文件(您需要确保添加自己的Mapbox访问令牌)。 也许会有所帮助。 放在一起 尽管关于如何前进的文档对我而言并不是很直观,但是Unity ARKit插件实际上为您提供了将自己的内容集成到ARKit中所需的一切,对于这个特定示例,我们要做的就是向右拖动正确对象的脚本。 首先,我尝试将我的MapBox映射合并到Unity项目中时出现了一些错误,所以我做了相反的事情,从ARKit中获取了脚本,并在我的MapBox项目中实现了这些脚本。 要使一切正常运行: 将ARKit插件导入到您的mapbox项目中。 创建一个名为ARCameraManager的空游戏对象,然后从层次结构中拖动对Main Camera的引用。 在检查器的脚本选项中选择是否要Get Point Cloud和Light Estimation 。 其他所有内容均应为默认设置。 如果要生成平面,以便可以在ARKit找到要附着物体的表面时看到,请从ARKit示例中的UnityARKitScene复制GeneratePlanes游戏对象到Mapbox场景中。 创建另一个名为MapParent游戏对象,并将在其教程中创建的Mapbox Map游戏对象拖到MapParent中。 这在允许您缩放地图时很有用。 我将地图父级的比例任意更改为.05 ,但如果您想要一个巨大的生命尺寸的AR地图,请将其保留为1(或更大?)。 在实际的Map Game Object上,从ARKit > […]

ARKit和CoreLocation:第二部分

使用线性代数(和Trig)导航 示范代码 ARKit和CoreLocation:第一部分 ARKit和CoreLocation:第二部分 ARKit和CoreLocation:第三部分 数学和坐标之间的方位角计算 如果您没有机会, 请先 结帐 第一 部分 。 现在,我们需要弄清楚如何获得两个坐标之间的方位角(角度)。 找到轴承后,我们进行了旋转变换,以使节点朝向正确的方向。 定义 弧度: 弧度是一个角度度量单位,定义为使得一个弧度从单位圆的中心对向产生的弧长为1。弧度等于180 /π度,以便将弧度转换为度,乘以180 /π。 如果您有两个不同的纬度(地球上两个不同点的经度值),则借助Haversine公式 ,您可以轻松地计算大圆距离(球体表面上两点之间的最短距离)。 – 可动类型 sin =对立/斜边 cos =相邻/斜边 棕褐色=对面/相邻 atan2: 带两个参数的反正切或反正切函数。 棕褐色30 = 0.577 意思是:30度的切线为0.577 arctan 0.577 = 30 意思是:切线为0.577的角度为30度。 按键 “ R”是地球的半径 “ L”是 经度 θ是纬度 “ β ”轴承 ‘ ∆ ‘是增量/变化 通常,当您沿着大圆弧路径(正交运动)时,当前的前进方向会有所不同; 最终航向将与初始航向有所不同,具体取决于距离和纬度(如果要从例如35°N,45°E(≈巴格达)移至35°N,135°E(≈Osaka),将以60°的航向开始,并以120°的航向结束!)。 该公式适用于初始方位角(有时称为正向方位角),如果沿大圆弧沿直线直线移动,则将使您从起点到终点 […]

我如何自学iOS 11,Swift 4和Metal2 API,ARKit,并在2Weeks中制作了原型。

学习新知识很困难,但是当您通过实际编写不同的小型应用程序连续获得小额成功时,事情会变得更容易。 我强烈推荐两周前我已经从udemy购买的这门课程,我没有推荐这门课程的佣金。 https://www.udemy.com/ios-11-app-development-bootcamp/ 它具有iOS11,Swift 4和ARKit,以及许多其他功能,例如营销和设计。 我学习金属的方法是在一开始就编写一些小东西。 首先,我了解系统体系结构到底发生了什么。 Swift中的Metal 3D图形简介 前苹果工程师沃伦·摩尔(Warren Moore)最近被Swift语言用户小组拦下,对3D进行了介绍。 news.realm.io 然后我去学习有关Metal和Swift3的本教程 Swift 3的Metal教程第1部分:入门 更新:本教程已针对Xcode 8.2和Swift 3进行了更新。在iOS 8中,苹果发布了自己的GPU API … www.raywenderlich.com 入门金属–第2部分:入门 在本视频教程中,您将开始学习有关GPU并行处理和Metal管道的知识。 videos.raywenderlich.com Swift 3的Metal教程第3部分:添加纹理 更新:本教程已针对Xcode 8.2和Swift 3进行了更新。欢迎回到我们的Swift 3 Metal教程系列! 在… www.raywenderlich.com Swift 3的金属教程第4部分:照明 更新:本教程已针对Xcode 8.2和Swift 3进行了更新。欢迎回到我们的iOS Metal教程系列! 在里面… www.raywenderlich.com 带有Swift第5部分的iOS Metal教程:切换到MetalKit 更新9/30/16:本教程已针对Xcode 8和Swift 3进行了更新。欢迎我们的iOS Metal教程的第5部分…… www.raywenderlich.com 然后我尝试使用GPU计算 计算处理| Apple开发人员文档 编辑描述 developer.apple.com 这样我就可以使用GPU计算1024 […]

增强现实的设计与开发

当iOS 11于9月19日发布时,苹果一夜之间成为增强现实(AR)的最大参与者。 利用AR(允许虚拟对象覆盖在现实世界之上)的产品已经问世多年。 Snapchat的镜头使用AR,而App Store则堆满了较旧的应用程序,这些应用程序可带来相对错误的AR体验。 但是在iOS 11上,苹果通过发布名为ARKit的开发人员工具包改变了竞争环境。 该工具包由复杂的技术组成,开发人员可以以此为基础来提供高质量的AR体验。 自从90年代以来我就一直是AR的忠实拥护者,因此我一听说它就渴望在ARKit的基础上构建。 自从我将Float发布到App Store以来已经有几个月了。 在我从事硬件,移动,Web和VR产品的产品,市场营销和开发工作的同时,创建AR产品时出现的考量和挑战是新颖且令人着迷的。 这是我遇到的一些最重要的问题,以及我如何(或没有)解决这些问题。 增强现实的声音设计 Float的一些核心功能是允许用户创建虚拟屏幕,以循环播放用户的视频。 然后,用户可以在3D空间中以拼贴方式将视频布置在自己周围,将视频缩放到100英尺高,或者以其他方式重新混合其内容。 视频带来声音。 在测试早期版本的Float时,我的想法是“嗯……每个虚拟视频屏幕都应该播放自己的音频。 当然。” 当所有视频相互尖叫时,这导致了嘈杂的用户体验。 我的解决方案是在静音的同时播放最近播放的视频音频。 但是,那里有更好,更直观的解决方案。 虚拟屏幕的理想行为是随着用户靠近特定虚拟屏幕而变大的音频。 随着用户离屏幕越来越远,该视频的音频变得越来越安静。 从理论上讲,这种行为听起来不错,但是在实践中,这种设计可能会迅速变成一堆的屏幕静音,取消静音,增大或减小特定屏幕的体积,侵入性的UI覆盖或尴尬的UI交互,以及我没有做过的其他行为。认为将其内置到我的实验应用中是无益的。 最好的移动应用程序采用周到的声音设计,以令人赞叹的提示音和流行音来通知和激发我们,预示着新的聊天或通知。 此处的区别在于,我们每天使用的大多数应用都是二维的。 它们是生活在我们屏幕上的平面应用程序。 AR应用程序通过放置虚拟物品,数据或我们通过屏幕与之交互的其他事物来修改和改善我们周围的世界。 与常规移动应用程序相比,AR应用程序在玩法上有更多的选择,因此AR应用程序的声音设计需要更接近3D视频游戏的声音设计。 我认为我们已经离开了几年,发生了重大的硬件范式转变,并且进行了大量的产品实验,而无法起草用于处理增强现实音频的可靠设计准则。 增强现实的对象放置和信息架构 当您在普通的非AR移动应用中点击某些内容时,该应用通常会全屏显示或突出显示或放大您所点击的内容。 这些应用程序的设计可能会提示您要经过人工操作的深度和屏幕层次,但是您的交互仅限于触摸二维平面:手机的屏幕。 AR应用程序可帮助您浏览屏幕以与虚拟对象和真实对象进行交互。 与虚拟对象进行交互的一个示例是在Float中捏一个虚拟视频屏幕,以将其缩放到200英寸宽。 与真实对象进行交互的一个示例是浏览无数卷尺AR应用程序之一,然后点击房间的各个角落以测量墙的长度。 假设您正在开发一个AR应用,每次点击屏幕时都会生成一只闪亮的新飞小狗。 恭喜! 您的应用已经可以运行,您只需要处理一些小细节。 例如:新的幼犬应该在哪里产卵? 他们是否应该在轻按的屏幕前出现一只脚? 两只脚? 他们应该总是面对着你吗? 或以其他方式旋转? 它们应该总是一样大小吗? 那是什么尺寸 他们应该受到重力的影响吗? 好的,既然您已经做出了所有这些决定,那么您就决定添加功能,例如,轻按小狗即可显示带有小狗名称的标签。 但是那个标签应该是什么尺寸? 如果小狗在房间对面,是否应该在小狗上贴标签? 还是应该将标签从屏幕弹出18英寸,以便您可以不动地阅读它? 标签应该是什么字体大小? 哪种字体? 什么颜色? […]

iOS教程:使用ARKit和Vision框架进行人脸检测

在脑子里集思广益,跳上ARKit潮流并找到了一个快速致富的方案时,我想到了一些事情,其中​​涉及到在使用ARKit时查找iPhone前置摄像头上显示的所有面孔。 经过几天的实验,并看到其他人在网上完成了一些工作,我能够做到这一点,因此我决定编写一个有关它的快速教程。 我将向您展示如何使用ARKit和Vision框架扫描面部并在屏幕上获取其当前CGRect框架。 首先使用Xcode的默认工具包创建一个ARKit项目。 或者,您也可以根据需要在包含运行ARSession的任何AR视图的UIViewController中实现所有逻辑。 就是这样了。 对于您个人项目的需求,您可以保留对已翻译CGRects的引用,而不必使用它们来构建视图。 但是现在您将能够分辨出一张人脸在ARScene视图中的确切位置。 您可以在此处找到演示项目。 感谢您的阅读,并在评论中留下您的想法和想法以进行改进。

WWDC18:ARKit2与ARKit1.5 — 2D跟踪性能比较

去年,最有趣的技术趋势之一就是增强现实。 包括苹果在内的所有大公司都做了与之相关的事情。 他们花了大量的资源和时间来解决这个问题,正如蒂姆·库克(Tim Cook)所说的: “……增强现实可能是下一件大事……” 如果说2017年是引入一个完整的可处理AR框架的里程碑年,那么2018年无疑是ARKit2引入后该技术成熟的一年。 为了可用性,可维护性和简单性,许多事情已经发生了变化:所有可能有助于将技术大规模传播的事物。 本文的其余部分是关于我对新的ARKit框架的个人经验,重点介绍了iOS11和iOS12之间的改进和区别。 就像任何优秀的开发人员文章一样,我们需要进行案例研究以更好地解释该主题。 所以,就在这里。 我们将创建一个简单的应用程序,该应用程序使用增强现实技术在指出名片时向您显示特别优惠和其他信息。 (可选)应用程序将从remte JSON加载所需的信息,然后在需要时向用户显示相应的视觉增强功能。 首先是打开Xcode并创建一个填充所有相关内容的新AR项目: 默认情况下,Xcode创建一个供使用的起始场景,而该场景对于本文中的内容完全没有用。 删除它并打开为我们自动创建的ViewController.swift文件。 由于我们不再关心自动生成的场景,因此将修改viewDidLoad方法以反映此行为。 我们所需要做的就是用正确的委托实例以及一些用于调试目的的有趣的东西来指示sceneView出口。 覆盖func viewDidLoad(){ super.viewDidLoad() sceneView.delegate =自我 sceneView.showsStatistics = true sceneView.autoenablesDefaultLighting = true sceneView.automaticallyUpdatesLighting = true } ARSCNView类是任何AR应用程序的入口点。 它将虚拟内容与通过摄像头设备看到的真实单词混合在一起。 它还负责许多其他非常有趣的东西,例如将触摸映射到现实世界坐标。 ARSCNView依赖于委托方法。 通过实现其ARSCNViewDelegate ,我们可以将虚拟内容添加到ARKit自动检测到的任何真实对象中。 您可能会猜到ARKit是负责增强现实的框架。 为了正常工作,应该首先正确初始化它。 让我们添加一个方法来做到这一点: 右键单击左侧,创建一个新的AR资源组: 将其命名为Photos并添加一些卡片。 这里最重要的是为每张卡添加相对估计的尺寸。 这很重要,因为3d引擎需要此信息来正确估计3d世界中的对象。 您可能会注意到其中一张卡具有警告信号。 让我们点击它: Xcode警告我们,卡上的直方图和对比度对于图像识别而言并非最佳。 让我们暂时忽略它。 我们的玩具应用程序应该能够使用锚点来跟踪2D图像并将其映射到现实世界中的对象。 ARAnchor是负责现实位置和方向的类,用于在AR场景中映射检测到的对象。 除其他有趣的属性外,它还包含一个matrix_float4x4,用于定义锚点在世界坐标系中的旋转,平移和缩放。 打开var转换:matrix_float4x4 {get} […]

生日快乐-优惠券内有95%的折扣

大家好, 作为两个孩子的骄傲的父母,我一生中最快乐的日子是我孩子的生日。 我打算给我的女儿(明天明天7点大)送一个虚拟蛋糕,但她说服我,真正的粉红色公主蛋糕会更合适,更美味。 为了庆祝我女儿的生日,我将为我所有课程赠送折扣券。 您只需花10美元即可获得我的任何课程。 该交易将于下周结束,因此请不要等待太久。 掌握iOS版ARKit 精通iOS版Core ML 使用Java Spring Boot掌握微服务 使用蒸气2的服务器端Swift 使用Kitura掌握服务器端Swift iOS精益控制器的完整指南 我认为我的学生是我家庭的一部分,而你的成功就是我的成功。 工作中最好的部分是,当我收到一名学生的电子邮件,其中显示了他们在完成课程后构建的应用程序时。 这是我的一个学生的屏幕截图,该学生使用该课程为他的孩子创建了一个应用程序。 在线网络研讨会: 我将于下周10月26日(美国中部时间)下午在“使用ARKit构建增强现实应用程序”上举办我的第一个免费在线网络研讨会。 您可以在这里注册。 非常感谢您支持我的课程! 如果您能对课程进行评分和评价,我也将不胜感激。 评分确实有助于添加更多内容并支付账单😉 谢谢, Azam

ARKit之旅-第4部分,物理

下弗雷泽 结果 虽然这确实会按正确的方向创建塔,但结果是塔始终会自行倒下。 仅使用2或3行效果更好,但是在更长的时间内,如果没有任何用户交互或施加额外的力,它仍然会崩溃。 所有块节点共享相同的SCNPhysicsBody。 有一些不同的属性会影响物体之间的相互作用,因此我们尝试更改这些属性以查看效果。 摩擦力增加到最大值1,质量减小,恢复原状设置为零,但无济于事。 对于不熟悉恢复的人来说,它代表物体的弹跳,可以认为在撞击过程中可以节省尽可能多的能量。 例如,有弹力的球的复原力就很高,这意味着放下弹力球会导致弹跳回到弹起的高度。 下一步 我们将计划添加其余的UI功能,以允许从塔中删除块然后将其堆叠。 尽管跳到这一步似乎很愚蠢,但我知道即使塔的行为异常,也可以实现此功能。 这应该让我们在其他团队成员在塔楼上工作时取得进步。