Project Icon

arcore-depth-lab

ARCore Depth API在Unity中的高级AR交互示例

ARCore Depth Lab项目包含多个利用深度API的AR交互示例,如3D准星、深度可视化、碰撞检测和角色运动等。基于AR Foundation开发,支持特定Android设备。项目展示了深度数据在AR中的实际应用,为开发者提供了探索深度感知AR技术的示例代码。

ARCore 深度实验室 - Unity版深度API示例

版权所有 2020 Google LLC

深度实验室是一套ARCore深度API示例,提供使用深度进行AR交互和渲染的高级几何感知功能的资产。其中一些功能在这个深度API概述视频中有所展示。

深度实验室示例

ARCore深度API在部分ARCore认证的Android设备上启用。不支持iOS设备(iPhone, iPad)。在此处查看支持深度API的设备列表(标有支持深度API): https://developers.google.com/ar/devices。 更多信息请参阅ARCore开发者文档

今天就在Google Play商店下载预构建的ARCore深度实验室应用。

在Google Play上获取ARCore深度实验室

分支

ARCore深度实验室有两个分支:masterarcore_unity_sdk

master分支包含v1.1.0中的部分深度实验室功能,基于推荐的AR Foundation 4.2.0(预览版7)或更新版本构建。master分支支持的功能包括定向3D准星、深度图可视化、带深度网格的碰撞体、虚拟角色运动、原始点云可视化、录制和回放。

arcore_unity_sdk分支包含深度实验室的全部功能,基于ARCore SDK for Unity v1.24.0或更新版本构建。我们建议使用master分支使用AR Foundation SDK构建新项目,并在必要时参考此分支。

入门

这些示例针对Unity 2020.3.6f1,并要求AR Foundation 4.2.0-pre.7或更新版本,ARCore Extensions 1.24或更新版本。ARCore Extensions源代码通过Unity包管理器自动包含。

此项目仅支持Android构建平台。请将项目构建到Android设备上,而不是使用Unity编辑器中的播放按钮。

示例功能

示例场景演示了三种不同的深度访问方式。master分支中支持的功能标有:star:,其余功能可在arcore_unity_sdk分支中找到。

  1. 局部深度:在特定纹理坐标采样单个深度值(CPU)。
    • 定向3D准星 :star:
    • 角色在不平坦地形上的运动 :star:
    • AR对象放置的碰撞检查
    • 激光束反射
    • 雨雪粒子碰撞
  2. 表面深度:创建深度数据的连接网格表示(CPU/GPU)。
    • 点云融合 :star:
    • AR阴影接收器
    • 绘画喷溅
    • 物理模拟
    • 表面重新贴图
  3. 密集深度:处理每个屏幕像素的深度数据(GPU)。
    • 伪彩色深度图 :star:
    • AR雾效
    • 遮挡
    • 景深模糊
    • 环境重光照
    • 3D照片

构建示例

可以通过启用特定场景(例如,OrientedReticle来尝试定向3D准星)和场景中的ARFDepthComponents对象来构建和运行单个场景。在使用DemoCarousel场景构建所有演示时,记得禁用单个场景中的ARFDepthComponents对象。

我们还提供了一个演示用户界面,允许用户无缝切换示例。请确保将构建平台设置为Android,并验证主DemoCarousel场景是否为构建设置构建中的场景列表中的第一个启用场景。启用作为演示用户界面一部分的所有场景。 Assets/ARRealismDemos/DemoCarousel/Scenes/DemoCarousel.unity Assets/ARRealismDemos/OrientedReticle/Scenes/OrientedReticle.unity Assets/ARRealismDemos/DepthEffects/Scenes/DepthEffects.unity Assets/ARRealismDemos/Collider/Scenes/Collider.unity Assets/ARRealismDemos/AvatarLocomotion/Scenes/AvatarLocomotion.unity Assets/ARRealismDemos/PointCloud/Scenes/RawPointClouds.unity

以下场景可以在arcore_unity_sdk分支中找到,但尚未在AR Foundation SDK中提供。

Assets/ARRealismDemos/MaterialWrap/Scenes/MaterialWrap.unity Assets/ARRealismDemos/Splat/Scenes/OrientedSplat.unity Assets/ARRealismDemos/LaserBeam/Scenes/LaserBeam.unity Assets/ARRealismDemos/Relighting/Scenes/PointsRelighting.unity Assets/ARRealismDemos/DepthEffects/Scenes/FogEffect.unity Assets/ARRealismDemos/SnowParticles/Scenes/ArCoreSnowParticles.unity Assets/ARRealismDemos/RainParticles/Scenes/RainParticlesScene.unity Assets/ARRealismDemos/DepthEffects/Scenes/DepthOfFieldEffect.unity Assets/ARRealismDemos/Water/Scenes/Water.unity Assets/ARRealismDemos/CollisionDetection/Scenes/CollisionAwareObjectPlacement.unity Assets/ARRealismDemos/ScreenSpaceDepthMesh/Scenes/ScreenSpaceDepthMesh.unity Assets/ARRealismDemos/ScreenSpaceDepthMesh/Scenes/StereoPhoto.unity

示例项目结构

主要的示例资产放置在Assets/ARRealismDemos文件夹内。每个子文件夹包含示例功能或辅助组件。

AvatarLocomotion

此场景中的AR角色会沿着用户设置的路径点移动,同时保持贴近不平坦地形的表面。该场景使用CPU上的光线投射和深度查找来计算地形表面上的3D点。

Collider

这个物理模拟游乐场使用屏幕空间深度网格,实现Unity刚体对象与物理环境之间的碰撞。

按下屏幕上的按钮后,会根据最新的深度图程序化生成一个Mesh对象。这用于更新MeshCollider对象的sharedMesh参数。然后,随机选择一个原始刚体对象投入环境中。

CollisionDetection

这个AR对象放置场景使用CPU上的深度查找来测试虚拟对象的顶点与物理环境之间的碰撞。

Common

此文件夹包含在功能样本之间共享的脚本和预制体。更多详情,请参阅下方的辅助类部分。

DemoCarousel

此文件夹包含主场景,提供一个轮播用户界面。该场景允许用户无缝切换不同功能。可以通过直接触摸预览缩略图或将轮播UI拖动到所需位置来选择场景。

DepthEffects

此文件夹包含三个密集深度着色器处理示例。

DepthEffects场景包含一个片段着色器效果,可以从AR相机视图过渡到假彩色深度图。暖色表示深度图中较近的区域。冷色表示较远的区域。

DepthOfFieldEffect场景包含一个模拟的散景片段着色器效果。这会模糊AR视图中不在用户定义焦距处的区域。通过触摸屏幕在物理环境中设置焦点锚点。焦点锚点是锁定在环境中并始终保持焦点的3D点。

FogEffect场景包含一个片段着色器效果,在物理环境中添加虚拟雾层。近处的物体比远处的物体更加清晰可见。滑块控制雾的密度。

LaserBeam

这个激光反射场景允许用户通过触摸屏幕任何位置发射缓慢移动的激光束。

这使用了:

  • DepthSource.GetVertexInWorldSpaceFromScreenXY(..)函数查找光线投射的3D点
  • ComputeNormalMapFromDepthWeightedMeanGradient(..)函数根据提供的2D屏幕位置查找表面法线。

MaterialWrap

这个体验允许用户通过触摸改变真实世界表面的材质。它使用深度网格。

OrientedReticle

这个示例使用深度命中测试来获取光线投射屏幕点的3D位置和表面法线。

PointCloud

这个示例使用深度数组在CPU上计算点云。按下更新按钮根据最新的深度数据计算点云。

RawPointClouds

这个示例在CPU上使用深度数组融合点云和原始深度图。拖动置信度滑块可以根据相应原始深度的置信度值改变每个点的可见性。

RainParticles

这个示例使用GPU深度纹理计算雨滴粒子与物理环境之间的碰撞。

Relighting

这个示例使用GPU深度纹理通过AR相机计算性地重新照亮物理环境。靠近人工光源的物理环境区域被照亮,而较远的区域则被变暗。

ScreenSpaceDepthMesh

此示例使用深度网格。在CPU上一次性创建包含规则三角形网格的模板网格。GPU着色器根据GPU深度纹理提供的深度值的重投影,对规则网格的每个顶点进行位移。按下冻结可对网格进行快照,按下解冻可恢复到实时更新的网格。

StereoPhoto

此示例使用深度网格和ScreenSpaceDepthMesh。冻结网格后,我们缓存当前相机的投影和视图矩阵,让相机围绕一个圆圈移动,并使用缓存的相机图像在深度网格上进行投影映射。按下捕捉创建动画3D照片,按下预览返回相机预览模式。

SnowParticles

此示例使用GPU深度纹理计算雪花粒子与物理环境之间的碰撞,以及每个雪花的方向。

Splat

此示例使用Oriented Reticle和深度网格在物理环境中放置与表面对齐的纹理贴花。

Water

此示例使用修改后的GPU遮挡着色器,在物理环境中创建人造水的淹没效果。

辅助类

DepthSource

这个类的单例实例包含对深度图的CPU数组和GPU纹理的引用、相机内参以及许多深度查找和坐标转换工具。此类作为MotionStereoDepthDataSource类的高级封装。

DepthTarget

每个包含DepthTargetGameObject都成为GPU深度数据的订阅者。DepthSource会自动更新每个DepthTarget的深度数据。场景中必须至少存在一个DepthTarget实例,DepthSource才能提供深度数据。

MotionStereoDepthDataSource

此类包含低级操作和对深度数据的直接访问。仅供高级开发人员使用。

用户隐私要求

您必须prominently披露使用Google Play Services for AR(ARCore)以及它如何收集和处理数据。这些信息必须易于最终用户访问。您可以通过在主菜单或通知屏幕上添加以下文字来实现:"本应用程序运行在Google Play Services for AR(ARCore)上,由Google LLC提供并受Google隐私政策管辖"。

相关出版物

请参阅https://augmentedperception.github.io/depthlab/,了解我们在ACM UIST 2020上发表的论文、补充材料和演示:"DepthLab: Real-Time 3D Interaction With Depth Maps for Mobile Augmented Reality"。

参考文献

如果您在研究中使用ARCore Depth Lab,请按以下方式引用:

@inproceedings{Du2020DepthLab,
  title = {{DepthLab: Real-time 3D Interaction with Depth Maps for Mobile Augmented Reality}},
  author = {Du, Ruofei and Turner, Eric and Dzitsiuk, Maksym and Prasso, Luca and Duarte, Ivo and Dourgarian, Jason and Afonso, Joao and Pascoal, Jose and Gladstone, Josh and Cruces, Nuno and Izadi, Shahram and Kowdle, Adarsh and Tsotsos, Konstantine and Kim, David},
  booktitle = {Proceedings of the 33rd Annual ACM Symposium on User Interface Software and Technology},
  year = {2020},
  publisher = {ACM},
  pages = {829--843},
  series = {UIST '20}
  doi = {10.1145/3379337.3415881}
}

Ruofei Du, Eric Turner, Maksym Dzitsiuk, Luca Prasso, Ivo Duarte, Jason Dourgarian, Joao Afonso, Jose Pascoal, Josh Gladstone, Nuno Cruces, Shahram Izadi, Adarsh Kowdle, Konstantine Tsotsos, and David Kim. 2020. DepthLab: Real-Time 3D Interaction With Depth Maps for Mobile Augmented Reality. Proceedings of the 33rd Annual ACM Symposium on User Interface Software and Technology (UIST '20), 829-843. DOI: http://dx.doi.org/10.1145/3379337.3415881.

我们还要感谢Levana Chen、Xinyun Huang和Ted Bisson将DepthLab与AR Foundation集成。

附加信息

您可以根据Apache 2.0许可证使用此软件。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号