Tag: AR

AR @ wehkamp

我在WWDC 2017 作为我个人的背景故事,当时我在VWO 4中,至少可以说我度过了美好的一年。 自从我4岁开始学习以来,学校一直是我生活中的“问题”,而此时,我的“水桶即将溢出”。 我感觉不舒服,从字面上想起每天上学和变得不快乐的事实,我已经厌倦了。 让我前进的一件事是编程。 我于2015年开始进行iOS开发,几个月后发布了我的第一个应用程序,直到今天,我仍然每天都在学习新知识。 WWDC是我一生中最酷的一周之一,遇到了很多新人,他们都和我iOS开发一样感兴趣。 我开始感觉好些,但回到家后,我又回到了以前的“学校疾病”中。 在这一点上,我和父母决定放慢脚步。 我开始更多地待在家里,在那里我可以学习iOS开发并跟随我的热情。 然后,夏天来了,在暑假里,我盛开了,我再次感到高兴,得到了一份假期工作,赚了些钱,总之,一切都很好。 我以良好的希望开始了我的新学年(VWO 5),历时约2天。 两周之内,我在家比在学校多,一个月之内,我再也没有去学校了。 在这段时间里,我们与学校举行了多次关于“现在做什么”的会议,我再也不能去学校了,但是一直都呆在家里也不好。 长话短说,最后,我问是否可以作为iOS开发人员开始实习来扩展我的知识,而不仅仅是一直坐在家里。 学校对此还可以,我联系了该地区的几家公司。 其中之一就是wehkamp。 大约6个月后,即2017年12月,在几次会议之后,我正式开始在wehkamp担任iOS实习生,每周工作2天。 因为这是我想出的实习生,并且不是我的学业所必需的,所以我没有要完成的任务或要做的任务。 Wehkamp和我有完全的自由决定在那做什么。 由于其他方面的优先考虑而搁置了一段时间的项目是AR。 所以我们决定要做的是,我将开始使用AR来创建所谓的POC(概念证明)。 在wehkamp,我们拥有自己的生活产品系列,因此决定在AR中展示这些产品非常好。 确定了我们想要的东西之后,我就可以开始做/尝试事情了。 从简单地能够检测到表面开始,到从网络动态加载模型并重新映射纹理结束。 因此,让我们进一步深入。 开始时,我们必须弄清楚基本内容。 我有大约3天的ARKit使用经验,而这仅仅是超级基础。 我也几乎没有使用ARKits基础的SceneKit的经验。 因此,对于第一部分,我经常查看Apples文档和示例代码。 这样,我就能获得一个预加载的模型来旋转和移动,这在当时真是太神奇了! 转换次数 因此,对于我们的最终应用程序,我们需要的不仅仅是4个预加载模型,因此我们需要第三方参与为我们创建模型。 效果很好,但是我们遇到了一个问题。 这些文件以DAE文件(数字资产交换)的形式提供,这是一种流行的3d建模格式。 这里的问题是这些文件不适合移动设备,我们不得不将它们转换为SCN文件,SceneKit Node文件,这是Apple的格式,可与移动设备一起使用。 存储 我们的下一个障碍是模型的存储位置。 我们有了模型,现在我们需要将它们存储在某个地方,由于多种原因,将它们全部存储在设备上似乎不是一个好主意,最明显的一个就是存储空间。 因此,我们决定将它们在线存储,并且很好地解决了一个主要问题,我们将如何获取模型并将其显示在电话上? 为了解决这个问题,我们创建了一些功能,可以从服务器下载模型并进行渲染。 这花了一段时间才能弄清楚,但最终我们使它起作用。 然后,下一个问题出现了,或者实际上没有出现,这就是问题所在。 在将模型从DAE转换为SCN文件的过程中,所有纹理文件路径都被弄乱了,因此纹理将一直指向../现在指向我的Mac上的绝对位置。 在手机上渲染模型时,在该位置未找到任何内容,因为好吧,这不是我的Mac,因此该位置不存在。 我希望其他人也有这个问题,所以我可以将粘贴复制到解决方案中并完成。 但是事实并非如此……所以我们最终要做的是编写一个自定义的重映射函数,该函数将每个纹理文件从其怪异的URL映射到设备上的正确URL。 灯光 所以现在我们在房间里有了一个带纹理的3D模型,可以移动它,但是仍然有一些问题。 首先,一切看起来都像是一个充气的,反光的塑料模型。 简而言之,它们很丑! […]

Polidea实验室:使用iPhone增强现实

在Polidea Labs系列的下一集中,我们以增强现实为主题。 关于Web AR的文章即将发布,如果您想阅读有关我们的VR实验的全部内容,可以在这里找到。 这次,我们正在处理iOS上的增强现实。 苹果无情地对AI话题保持沉默的黑暗时代已经一去不复返了。 苹果公司最近的WWDC真正爆发了利用机器学习的新闻介绍框架。 这些有很多口味。 在Polidea Labs,我们快速浏览了其中两个工具:ARKit和Vision。 您可能要记住,这些都是beta。 (我们希望您像我们一样喜欢Apple的beta版🙂 在使用上述工具进入增强现实之前,需要执行以下几个步骤。 在Mac上安装Xcode 9 Beta,并在设备上安装iOS 11 Beta。 顺便问一下,您知道这意味着什么吗? 无线构建,是的! 最后! 除了不是真的。 Vision和ARKit都做很多繁重的事情,结果他们像疯了一样吞噬了电池。 因此… 请将充电器放在手边。 请耐心等待-Xcode 9尽了最大努力,但往往会发生很多崩溃。 忘掉文档-Apple工程师要做的工作比编写文档要好。 经过所有这些工作之后,您就可以开始了。 ARKit提供了一个平台,可用于开发iOS应用中的AR(增强现实)体验。 这意味着可以从iPhone或iPad的摄像头向实时视图中添加2D或3D元素,以使这些元素好像生活在现实世界中。 ARKit集成了iOS设备的摄像头和运动功能,以创建增强现实体验。 它还提供与SceneKit和SpriteKit的集成,以及与Metal 2的更底层控制。 ARKit可以分为三个主要层: 跟踪 ,它提供有关设备在物理环境中的相对位置的实时信息。 ARKit使用视觉惯性测距法,听起来像火箭科学,对吗? 但简单来说,它使用引擎盖下的AVFoundation和CoreMotion来估算设备相对于其起始位置的3D位置。 场景理解 ,提供平面检测,命中测试或光线估计等功能。 借助这些功能,ARKit使我们能够将任何虚拟内容集成到物理世界中。 渲染。 特别是向SpriteKit和SceneKit开发人员致敬-ARKit为您实现了大多数渲染。 好消息是,据说Unity和Unreal都支持所有ARKit功能(这在我们最近对PolideaLabs的调查之后为我们打开了一些有趣的机会。 您需要做的就是告诉ARSceneView的会话 (显示为常规摄像机视图)以指定的配置运行。 ARKit处理所有处理。 您可以创建一个ARWorldTrackingSessionConfiguration ,以六个自由度跟踪设备的移动:三个旋转轴(滚动,俯仰和偏航)和三个平移轴(在x,y和z中移动)。 ARSession对象输出快照( ARFrame对象),其中包含有关会话状态的所有数据。 您将完全根据自己的意愿来做这些事情-想象力是极限(或者实际上,可能是ARKit的神秘崩溃)。 特别感谢 吉卜林先生 […]

迅捷世界本周(11.06–11.12)

增强现实 AFathi / ARVideoKit ARVideoKit –捕获并记录ARKit视频📹,照片🌄,实时照片🎇和GIF🎆。 github.com iPhone X iOS安全区 Rosberry medium.com的iOS开发人员Evgeny M. 苹果系统 开始进行macOS编程:学习在Swift中开发Image Uploader App 码 Juanpe / SkeletonView SkeletonView –一种向用户展示正在发生的事情并为他们准备他所要包含的内容的优雅方法 。github.com 互动工作室/无风 通过在GitHub上创建一个帐户为无风开发做出贡献。 github.com insidegui / AnimojiStudio AnimojiStudio –制作不限时的Animoji视频,并在任何地方共享 github.com 文章 在Swift中使用工厂进行依赖注入 在swiftbysundell.com😉medium.com上阅读这篇文章,并突出显示语法 在iOS 11中写入时复制 基金会收藏变得更贴切| 更聪明| 更有效率的 medium.com 鸣叫 市场行销 新的App Store营销准则和资源—新闻— Apple Developer 您现在可以下载具有更新的字体和选项的App Store徽章,以及iPhone X,iPhone 8,iPhone 8 Plus,Apple Watch […]

如何保存和加载AR世界地图数据以创建持久的AR体验

保存并加载ARKit世界地图数据,以允许用户返回相同现实环境中的以前的AR体验。 本教程要求您对ARKit有基本的了解。 如果您不熟悉ARKit,建议您阅读 AppCoda 和 RayWenderlich的 这些教程 。 iOS 12上的ARKit 2.0提供了在会话之间持续提供AR体验并可以在以后恢复的可能性。 用户可以在桌子上启动一个AR拼图,然后以相同的状态稍后再使用它,也可以在几天之内解决室内装饰项目而无需重新开始。 通过在此处下载入门项目开始教程。 入门项目具有预构建的UI元素和操作方法,因此我们可以专注于使用ARKit的世界地图持久性的核心元素。 在Xcode 10的帮助下,在运行iOS 12并支持ARKit的iOS设备上构建并运行下载的入门项目。 应提示您允许在应用程序中访问相机,请点按确定。 一次,允许摄像机访问,ARKit借助特征点映射可见区域,点击屏幕上的任意位置以在该点添加球体节点。 因此,现在我们可以借助UITapGestureRecognizer将3D对象添加到真实表面。 现在,让我们跳到教程的主要部分,以保存世界地图。 什么是ARWorldMap? ARWorldMap对象包含ARKit用于在现实世界中定位用户设备的所有空间映射信息的快照。 ARWorldMap对象表示物理世界中的映射空间。 我们可以将ARWorldMap对象存档到Data对象中,并将其保存在设备的本地目录中。 如果要加载地图,请进入设备的本地目录,在该目录中保存了世界地图Data对象以将其取消存档。 您可能已经在入门项目中注意到,直到完全映射可见区域后,才启用保存按钮。 ARKit提供了一个worldMappingStatus值,该值指示当前是否是捕获世界地图的好时机(或者最好等到ARKit绘制更多的本地环境时再捕获)。 我们使用worldMappingStatus提供视觉反馈,并选择何时使saveButton可用。 首先,我们首先声明一个URL类型的变量,该变量为我们提供了用于写入和读取世界地图数据的文档目录路径。 将属性添加到ViewController类: 现在,将以下代码复制到func saveButtonAction(_ sender: Any)方法中。 这样您的方法看起来像这样: 因此,基本上,当我们点击saveButton ,将调用getCurrentWorldMap(completionHandler:)从正在运行的ARSession捕获地图,然后使用NSKeyedArchiver将其序列化为Data对象并将其写入本地存储。 我们使用.atomic选项进行写入,因为这样可以保证文件是否完全写入您的设备。 现在,将以下代码复制到func loadButtonAction(_ sender: Any)方法中,使其看起来像这样: 在这里,我们检查本地存储中是否存在世界地图文件,如果该文件存在并且可以反序列化为ARWorldMap对象,那么我们告诉ARWorldTrackingConfiguration通过使用该地图创建并运行ARWorldTrackingConfiguration来尝试恢复在该世界地图中捕获的会话。作为initialWorldMap 。 然后,ARKit尝试重新定位到新的世界地图-也就是说,将接收到的空间映射信息与它对本地环境的感知进行协调。 如果用户移至他们在上一个会话期间访问过的本地环境区域,则此过程更有可能成功。 现在让我们尝试测试我们构建的应用程序。 在设备上构建并运行该应用程序,然后在绘制区域后,在现实世界中添加一些3D球体,然后点击“ Save按钮以Save地图。 收到“地图已保存”警报后,请点击“ Reset按钮以还原AR世界地图,或者也可以通过从应用程序抽屉中关闭该应用程序来完成。 如果您完全关闭了该应用程序,请重新启动该应用程序,然后点击“ Load ,然后移至保存该应用程序的同一区域。 […]

开始学习如何制作第一个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,他们设计了整个应用程序中所有令人惊叹的可爱图形和图像。

增强现实的设计与开发

当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英寸,以便您可以不动地阅读它? 标签应该是什么字体大小? 哪种字体? 什么颜色? […]