近年来,人们对增强现实(AR)的兴趣明显高涨,苹果(Apple)和谷歌(Google)等主要科技公司发布的最新更新就证明了这一点。 有鉴于此,Grid Dynamics的移动开发团队进行了一些额外的 AR研究 。我们希望亲自了解当前可用的技术以及客户可以利用哪些技术来扩展业务。 为了做到这一点,我们构建了一个总体概述,然后决定深入研究这个主题。 所有行业的公司都必须紧跟最新技术趋势,以扩大业务范围。 增强现实是实现这一目标的最有希望的技术趋势之一。 然而,AR和摄影测量是相对较新的技术,目前市场上可用的解决方案很少。 此外,一些解决方案的功能比其他解决方案更多或更好,这使得希望将AR作为其业务战略的一部分来实施的公司必须研究市场上可用的解决方案,评估解决方案的质量,甚至开发自己的解决方案。 考虑到我们的零售和数字商务客户,我们选择了一项对他们的特定业务有用的任务。 因此,我们为一个名为“扫描和显示”的假设应用程序创建了一个解决方案和概念验证(PoC)应用程序。该应用程序扫描对象并以AR模式显示它。 这使客户能够以3D方式查看项目、试穿项目或查看它们如何适合室内空间。 此外,还有商店中3D扫描项目的实际应用程序,并将其添加到AR展示柜中。
前提
我们假设的应用程序“扫描和显示”可以扫描视频或照片格式的对象,使用云存储原始图像和最终3D模型。 该应用程序还包括摄影测量服务,用于将图像转换为3D模型,并渲染用于在AR模式下显示3D模型的应用程序。
扫描仪
有几种方法可以从真实世界的图像中渲染3D对象,包括数字单镜头反射(DSLR)相机、无人机、3D扫描仪和手机。 每种方法都有其优点。 例如,单反相机适合捕捉细节纹理并提供高图像分辨率,而无人机适合扫描大型开放区域和建筑物等物体。 3D扫描仪擅长捕捉物体的形状,手机是一个方便的选择,因为它们随时可用,并且可以提供高质量的图像分辨率和深度地图。 平均而言,手机可能是扫描3D物体最实用的选择。 让我们探讨一下这在实践中是否可行。 使用移动设备扫描物体有两种方法:录制视频或拍照。 录制视频更方便用户,因为它可以提供多帧的平滑过程。 然而,由于大多数摄影测量工具都需要照片输入,我们需要将视频转换为一系列照片才能使用。我们使用ffmpeg做到了这一点:
ffmpeg-i input.mp4-vf“fps=${2-'1'},比例=2160:-1”输出4K/img%03d.jpg
在进行了一些测试后,我们决定有比视频更好的方法。 并非所有手机都能以4K分辨率拍摄视频; 大多数仅限于全高清分辨率。 对于摄影测量,通常首选较高的分辨率。 即使是最基本的手机也可以拍摄分辨率为12MP的照片,这比4K视频的分辨率还要高。 另一个需要考虑的关键因素是深度图。 虽然手机摄像头可以使用深度地图数据拍摄图像,但这不是视频选项。 深度图对于某些摄影测量软件来说非常方便,并且可以显著提高最终结果的质量。
深度贴图
深度贴图是包含在照片文件中的附加数据,有助于区分前景和背景中的内容。 它对某些应用程序非常有用,例如在社交媒体上创建人像或视差效果。 现代手机可以通过激光雷达(LiDAR)(提供最佳效果)、双摄像头设置或使用单摄像头拍摄两张照片并使用智能算法生成深度地图数据。 您可以找到有关深度贴图的更多信息 在这里 .
为了我们的研究目的,最好的选择是拍照。 为了使过程更方便,我们添加了自动计时器和照片计数器等功能,以帮助用户拍摄足够数量的可接受质量的照片。 这只是如何改进图像采集过程的一个例子。 还有许多其他可能性,例如添加 AR圆顶 。但照片应用程序不是我们扫描解决方案的主要重点,摄影测量服务是。让我们把注意力转向它。
摄影测量服务
我们研究的关键部分是摄影测量学。 首先,我们建立了可以为该研究项目提供工具的关键平台:ArKit、Meshroom、PhotoModeler、MicMac和3DF Zephir。
当然,它们并不是唯一可用的选项。 但为了测试的目的,我们将重点关注这些特定的问题。
案例#1
我们从扫描应用程序中获得这些图像,但没有对其进行任何更改。
案例#2
119张照片
均匀的照明
转盘
白色背景
对象的几个位置
这是一个图像示例,具有其他工具,如转盘和专业照明。
你最好的选择是尝试不同的摄影测量软件和服务来处理这些图像并生成3D模型。 让我们比较一下结果,以确定哪个服务生成的3D模型最准确、最详细。
网格室
Meshroom是一个构建在 AliceVision公司 .
Meshroom的优点之一是它是免费的、开源的,并且可以在多种操作系统上使用,如Linux、Mac和Windows。 它还提供了可视化工具和命令行界面,供用户选择。
赞成的意见 欺骗 免费 需要带有CUDA的NVIDIA GPU卡 开放源代码 输出质量不太好 在Linux、Mac和Windows上受支持 具有可视化工具和CLI
经过一些微调,该框架产生了巨大的效果; 然而,我们的目标是比较即时图像结果。
果汁盒型号质量相当低。 鞋模质量一般,需要在3D编辑器中进行额外工作。
3DF Zephyr公司
3DF西风 是另一个摄影测量软件,它有一个视觉编辑器、终端应用程序和容器图像,更不用说自由层选项了。 它已经是一个强大且可扩展的 解决方案 这几乎符合当前的行业标准。 然而,考虑到我们的目标是比较不同的解决方案,让我们继续分析结果。
赞成的意见 欺骗 有一个Linux 容器 对于AWS(EC2或Fargate) Visual Editor是一个Windows应用程序 具有免费层(每个对象最多只能有50张照片,或 非商业项目1欧元许可证 ) 现成的图像质量并不完美 直接导出到 GLB公司 和 美元Z 格式 Fargate比EC2 Mac实例便宜得多(苹果解决方案所需),而且可扩展性更好
果汁盒的型号质量再次相对较低。 鞋模质量很好,但在细节上需要做一些额外的工作,例如拆除转台的其余部分。
ARKit和RealityKit对象捕获
使用 苹果公司的解决方案 ,我们使用了一个与RealityKit Object Capture API配合使用的命令行应用程序将图像转换为3D模型。
赞成的意见 欺骗 尝试摄影测量的最简单方法 需要具有4GB GPU或Apple Silicon CPU的功能强大的MacOS机器 开箱即用的最佳效果 输出格式为USDZ* 支持带有深度贴图的图像
如果你想构建一个功能齐全、可扩展的云解决方案,你应该记住,像谷歌云这样的平台目前还不支持Mac OS。 目前,最好的选择是将其托管在Amazon EC2上,但成本可能很高。 这些是没有深度数据的图像:
使用深度数据:
如果我们不提供深度数据,果汁盒模型的质量很低。 令人惊讶的是,即使没有深度数据,鞋款的质量也是一流的。 由此,我们可以得出结论,深度数据可以显著改变低质量图像源的性能。 对于高质量的源照片,不需要额外的深度数据。
Photomodeler和MicMac
尽管Photomodeler和micmac很有效,但我们将它们排除在研究之外,因为它们不能完全满足预先定义的要求和期望。 PhotoModeler主要使用标记捕捉真实世界中的对象和场景,进行测量,并在制造过程中提供帮助。 从一组照片中获取3D模型没有简单的方法。 因此,它不适合我们的情况。 MicMac是一种专门的软件,在某些情况下需要特定的设置,但它似乎不是一种满足我们需求的通用且用户友好的解决方案。
原始图像的云存储
这项研究和文章的主要目标不是创建一个完全可用于生产的应用程序,而是学习未来这样做的最佳实践。 因此,云存储提供商对我们来说不是一个关键因素。我们选择Firebase是因为它被认为是最简单、最具成本效益和最快的集成解决方案。 对于您的最终产品来说,这可能不是最好的,但从理论上讲,这就足够了。
使用照片扫描仪应用程序非常简单。 首先,我们创建了一个与扫描对象的名称类似的bucket。 接下来,该应用程序将所有捕获的照片上传到bucket,这就是全部内容。
由于scanner应用程序是iOS和Android的本机应用程序,我们可以使用本机SDK( 网间网操作系统 , 安卓 )用于与Firestore交互。
下一步,摄影测量应用程序下载图像进行处理。 使用可轻松从云端下载图像 gsutil公司 .
gsutil cp-rgs://{bucketName}/${objectName}输入
三维模型类型
Render应用程序是“通用解决方案”图的最后一部分,但在进入摄影测量处理解决方案之前,我们先讨论适用于不同平台的3D模型格式。
OBJ公司
OBJ(当前版本3.0)文件包含有关三维对象几何图形的信息。 这些文件用于交换信息、CAD和3D打印。 OBJ文件可以支持无限颜色,并且可以定义多个对象。 OBJ文件中的对象由多边形面(由顶点或点定义)、曲线、纹理贴图和曲面定义。 OBJ是一个向量文件,它使定义的对象具有可伸缩性。 没有最大文件大小。 该格式是Wavefront Technologies于20世纪80年代为其高级可视化动画软件创建的(Autodesk Maya后来取代了高级可视化软件)。 许多公司在其应用程序中采用了OBJ格式。
GLB和GLTF
发件人 Marxentlabs公司 关于 GLB公司 :
GLB是一种3D文件格式,用于虚拟现实(VR)、增强现实(AR)、游戏和网络应用程序,因为它支持运动和动画。 这种格式的另一个优点是体积小,加载速度快。 GLB文件是GL传输格式的二进制版本 (gLTF).file文件 它使用JSON(JavaScript对象表示法)编码。 因此,支持数据(如纹理、着色器和几何体/动画)包含在单个文件中。
Khronos集团于2015年开发了GLB和glTF格式。 他们认为需要开发人员可以在许多图形和3D应用程序中打开和编辑的格式。 规范2.0版 (2017年发布),添加了基于物理的渲染(PBR),该渲染允许阴影和灯光看起来更真实,并进行编码更新,以提高动画的速度和改进。
GLB和glTF一样,是一种对3D数据进行编码的免费方式。 GLB文件通常比glTF文件及其支持文件小(约33%)。 同样,将单个文件上传到服务器也比上传两个或三个文件更容易,因此GLB在这方面也有优势。 GLB文件可以通过 德拉科图书馆 .
美元
什么 Marxentlabs公司 说关于 美元Z :
USDZ是一种3D文件格式,可在iOS设备上显示3D和AR内容,无需下载特殊应用程序。 用户可以轻松共享这种可移植格式,开发人员可以在其3D-creation管道中的应用程序之间交换它。 USDZ格式允许iOS 12 iPhone和iPad用户查看和共享AR文件。 USDZ提供可移植性和本机支持,因此用户无需为每个观看情况下载新应用程序。 用户可以轻松地与其他iOS用户共享USDZ文件。 目前,Android不支持USDZ,并且有其等价物gLTF和gLB。 本质上,glTF是AR 3D文件的标准格式。 GLB与之类似,但采用二进制格式,而USDZ是苹果出于相同目的的专有格式。 OBJ是一种不适合现代3D引擎的旧格式,但它可以充当USDZ和GLB之间的桥梁。
摄影测量处理
在对各种摄影测量工具进行了初步审查后,我们重点关注了苹果公司的一个解决方案,该解决方案之所以引人注目,是因为它是免费的,提供了最好的现成结果,并且是最容易使用的(只是一个将图像作为输入并输出3D图像的控制台应用程序)。
如前所述,Android设备的最佳格式是gLTF和gLB,但不幸的是,苹果的解决方案没有提供这些格式。 唯一可用的格式是USDZ,这并不奇怪。 为了克服这个限制,我们对代码添加了一个小修改,所以现在可以 在OBJ中导出三维模型 格式化并将其转换为任何其他格式。
let objPath=“output/out.obj” let modelAsset=MDLAsset(url:url) modelAsset.loadTextures() 做{ 尝试modelAsset.export(到:URL(fileURLWithPath:objPath)) 打印(“导出到OBJ!”) }
就这样,现在我们两个都有了 OBJ公司 和 美元Z 格式。
下一步是将OBJ转换为gLTF或gLB。 为此,我们使用了 对象2gltf 工具。
npm安装-g obj2gltf obj2gltf-i模型.obj-o模型.gltf obj2gltf-i模型.obj-o模型.glb
3D模型的云存储
在这种情况下,我们在存储原始图像方面也遇到了类似的情况:我们不需要做一些特别的事情,所以我们坚持使用标准的存储选项。
我们已经熟悉了 gsutil公司 ,它还可以处理文件上传:
gsutil cp{objectName}.gltf gs://{bucketName}
操作系统和库
安卓
我们进行了测试 少许 Android上的不同解决方案:
场景查看器(Android内置查看器)
在Android上显示AR中任何3D对象的最简单方法是使用内置的查看器,它一直在您的移动设备上的口袋里。 你可以直接从谷歌搜索结果中试用。 例如:
搜索“dog”;
在搜索结果中查找“三维视图”; 和
试试看拉布拉多猎犬,看看它是否适合你的公寓。
这个 文章 描述了如何将build-it视图与自定义对象一起使用。 简而言之,您可以将其集成到您的网站中,或使用外部命令从Android应用程序调用它。
HTML格式:
<a href=“ 意图://arvr.google.com/scene viewer/1.0?file=https://raw.githubusercontent.com/KhronosGroup/glTF -Sample-Models/master/2.0/Avocado/glTF/Avocado.glTF#Intent; 方案=https; 包=com.google.android.googlequicksearchbox; action=android.intent.action。 视图; S.browser_fallback_url浏览器= https://developers.google.com/ar ; 结束; “>鳄梨
Java语言:
意向sceneViewerIntent=新意向(Intent.ACTION_VIEW); sceneViewerIntent.setData(Uri.parse(“ https://arvr.google.com/scene-viewer/1.0?file=https://raw.githubusercontent.com/KhronosGroup/glTF -Sample-Models/master/2.0/Avocado/glTF/Avocado.glTF“); sceneViewerIntent.setPackage(“com.google.android.googlequicksearchbox”); 启动活动(sceneViewerIntent);
简单快捷。 然而,我们的目标是尝试尽可能多的不同工具。 那么,让我们看看其他几个选项:
场景窗体
场景窗体 是一个图书馆,你可以在早期的谷歌研讨会和文章中找到。
然而,它已经存档,不再由谷歌维护。 因此,许多旧样本不再有用。
该库的一些维护版本仍可以在线使用,例如 链接 .
在我们的实验中,我们在使用Sceneform时遇到了一些问题,例如需要更多的动画支持和文件大小限制。 因此,我们决定探索其他选择,以找到更合适的东西。
场景回顾
这是一项旨在取代Sceneform的技术。 重要的是不要将其与场景查看器混淆。 发音相似的名称可能会令人困惑,但该技术使用Kotlin编程语言,具有一些明显的优势。
这个 项目 它得到了很好的维护,在我们的实验中,它在使用各种大小的GLTF时表现出了良好的性能,无论它们是否包含动画。
此外,它在直接从云中加载3D模型时表现良好。 因此,对我们来说,它是一个有价值的试验场。
ARCore公司
上述所有库都使用 阿科尔 在现实世界中配置AR对象。
它支持广泛的平台,包括原生Android和iOS,以及Unity和influe等流行的3D游戏引擎。 对于我们的特定需求,与Arcore交互的最佳方式是通过Android端的Sceneview,而在IOS端,另一个本地解决方案更适合。 然而,拥有联合代码库或共享资源可能是可取的,在这种情况下,使用跨平台解决方案(如Unity或Unreal引擎)是一个很好的选择。
iOS渲染应用程序
场景工具包
苹果的iOS平台提供了一个平滑、高质量的解决方案作为标准。 在这种情况下,解决方案是ArKit,这是一个由苹果开发的框架,用于实现增强现实。 ArKit公司 使用USDZ模型并使用 场景工具包 作为渲染引擎将它们放置在真实世界中。
SceneKit使开发人员能够创建3D场景和动画,并将3D对象添加到现有的iOS和macOS应用程序中。 它提供了一个简单的高级API,用于创建3D场景并在屏幕上渲染它们。 SceneKit自动处理许多与3D渲染相关的低级任务,例如创建和管理OpenGL上下文、工作内存和渲染场景。
统一与虚幻
还有一些跨平台解决方案。 例如,如前所述,Arcore有Unity和虚拟游戏引擎的插件。 同样,ArKit也为这些流行的3D引擎提供了插件。 因此,如果您没有本地Android或iOS开发经验,但有兴趣尝试增强现实,那么这些游戏引擎可能是一个不错的选择。
结果
以下是我们在旅程结束时发现的:
这个方案代表了我们的最终解决方案。 我们有两个本地软件扫描仪,一个用于iOS,另一个用于Android。 这些扫描仪捕获扫描对象的照片,并将其存储在Firebase云存储桶中。 保存照片后,会向我们的本地Mac OS笔记本电脑发送通知,这是Mac OS昂贵云计算实例的经济高效的替代方案。 这款笔记本电脑运行一个bash脚本,该脚本执行摄影测量任务,将照片转换为适当的3D格式,并将3D文件上传回云存储桶。 此外,我们还创建了两个本地移动应用程序,称为渲染应用程序,可以直接从云中读取3D对象,并使用AR技术进行渲染。 它是在实验室规模上开发的,但它是一个功能齐全的系统,可以使用摄影测量扫描物体,并使用AR技术将其覆盖到现实世界中。 它已经成为我们试验不同工具和平台的游乐场。 此外,它还让我们了解了AR和摄影测量如何应用于实际项目。 现在,我们更好地了解了我们可以期待什么,以及我们可以为客户提供什么。 可以在下面的视频剪辑中查看部分结果:
查看视频 在这里 .
那么,在利用AR技术方面,是否有一个一刀切的解决方案? 答案是否定的。这只是一种做事的方式,它使我们能够学习一些最佳实践和对未来项目的见解。 我们仍将尝试其他解决方案,如 三维流 甚至随着AR技术越来越流行,我们也在开发自己的产品。
为手机构建AR应用程序:结论
我们的实验表明,目前的AR技术已经准备好投入生产。 虽然有些在开箱即用时表现良好,但另一些可能需要额外的微调。 然而,使用这些技术已经可以创建功能性解决方案。 我们的研究还显示了摄影测量和增强现实的许多潜在应用。 诚然,这些技术仍处于早期阶段,但我们已经看到它们开始流行起来。 通过将这些技术引导到正确的方向,您可以为用户带来全新的体验,并显著影响客户对您的产品以及整个行业的看法。 这些技术的最佳工具之一是移动设备,因为它们随时可用,允许您快速渲染真实世界图像的3D模型,或将虚拟对象合并到真实世界中。 例如,你可以在虚拟商店的橱窗里摆满产品,虚拟试穿鞋子,或者在公寓里摆放家具。 在目前阶段,我们只能想象这些技术在未来的一些使用方式,但毫无疑问,还会有更多的创新用途。
工具书类
增强现实:未来就是现在
捕获具有深度的照片
关于USDZ文件你需要知道的一切
使用GLB文件需要了解的一切
使用场景查看器从Android应用程序或浏览器在AR中显示交互式3D模型
ARCore公司
AR套件
创建摄影测量命令行应用程序