Android ARCore新增Depth API(深度图)的遮挡效果、开发、渲染方法、支持设备

前言

深度图的用途有遮挡、碰撞、距离测量、重新照明场景、替换现有物体纹理、设置背景或前景的景深效果、设置雨和雪的环境效果等。

一、遮挡效果

左图是虚拟Android机器人和行李箱重叠,右图是机器人被遮挡,看起来更加逼真。

二、支持的设备

深度API只在部分设备上可用,或者说ARCore支持的设备不一定支持深度API。

支持深度API的设备请见本文末尾。

三、深度图

深度API使用“depth from motion”(从运动获取深度)算法来创建深度图。算法从不同角度拍摄多个图像,并将其进行比较,估计用户移动设备时,设备与每个像素的距离。

如果设备有深度传感器,比如ToF摄像头,则数据会被包含在处理后的深度中。此时,即使相机不移动也可以使用深度。深度传感器可以在几乎没有特征的表面或物体移动的场景提供更好的深度。

下方是墙上挂着自行车的走廊,左图是相机图像,右图是深度图的可视化。

四、运动要求

当设备上没有深度传感器(比如ToF摄像头)时,深度API使用SLAM(同步定位和地图构建)。

注:SLAM是一种将相机图像和设备IMU的惯性测量值结合在一起,以估计相机相对于现实世界的位置和方向的技术。

“depth from motion”(从运动获取深度)算法将成对的相机图像视为静态场景的两次观察。如果场景中某些部分移动了,则场景的静态部分有准确估计的深度,但移动部分不会。

没有深度传感器时,用户需要移动设备几厘米。

五、提供的深度范围

提供的深度范围从0米到8米,最佳深度范围为从0.5米到5米。随着与相机的距离增加,误差会增大。

没有深度传感器时,很少特征或没有特征的表面(比如白墙)的深度会不准确。

六、深度图的4个API

Config.setDepthMode:设置使用深度API的模式。并非所有支持ARCore的设备都支持深度API模式。

Config.getDepthMode:返回当前的深度API配置值(自动或禁用)。“自动”表示:在支持的设备上,根据硬件和软件估算深度。可用来源是运动和深度相机。 此选项会增加大量的计算负担。

Session.isDepthModeSupported:检查当前设备和当前摄像头是否支持深度API模式。

Frame.acquireDepthImage:尝试获取与当前帧对应的深度图像。

深度图像每个像素包含到相机的距离,单位为毫米。

使用深度API的示例代码

// 1.检查是否支持深度API
boolean isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC);
if (isDepthSupported) {
  // 2.设置使用深度API
  config.setDepthMode(Config.DepthMode.AUTOMATIC);
}
session.configure(config);
try {
  // 3.获取深度图像
  Image depthImage = frame.acquireDepthImage();
} 
catch (NotYetAvailableException e) {
}

七、遮挡效果的渲染方法

方法1:使用深度图确定虚拟内容中的某些像素是否可见,如果看不见像素,则对其裁剪。

方法2:进行两遍渲染。第一遍将虚拟内容渲染到缓冲区,第二遍使用深度图将虚拟内容和相机图像组合在一起。这种方法可以不使用着色器。

注:着色器是一种实现图像渲染的可编辑程序,需要3D图形开发知识。

2种方法的效率取决于场景的复杂性和应用程序自身的限制。

八、支持深度API的设备清单

从ARCore 1.18版开始,新增深度API。只有部分设备支持深度API。

注:这个设备清单仅表示ARCore 1.18版的支持情况,没有进入清单的新款或旧款手机,可能未来被加入ARCore新版本中。

以下设备是从《ARCore supported devices》中备注的“Supports Depth API”筛选得到。

1、Huawei

Honor 10、Nova 3、Nova 4、P20、P30、P30 Pro

2、Oppo

Reno Ace

3、Samsung

Galaxy S9、Galaxy S9+、Galaxy S10e、Galaxy S10、Galaxy S10+

4、Sony

Xperia XZ3

5、一加

OnePlus 7、OnePlus 7 Pro

(完)

<think>好的,用户想了解在UE5中如何为PICO4配置或实现MR遮挡效果。首先,我需要回顾一下MR(混合现实)遮挡的基本原理。通常,这涉及到将虚拟对象与真实环境中的物体进行深度交互,让虚拟物体能够被真实物体遮挡,或者反之,从而增强沉浸感。对于PICO4这样的VR设备,可能需要利用其摄像头和环境感知功能来实现这一点。 接下来,我需要查阅用户提供的引用资料,看看是否有相关的配置步骤或插件信息。引用[1]提到了UE4.27中使用PICOXR和OnlineSubsystemPICO插件,并提到需要移除其他可能冲突的插件。引用[2]和[3]则涉及UE5连接PICO设备的配置,包括安装必要的插件和设置项目参数。虽然这些引用主要针对UE4和基础配置,但可能UE5的流程类似,需要确认插件的兼容性。 在UE5中,实现MR遮挡可能需要使用到PICO的SDK,特别是PICOXR插件。需要确保插件版本支持UE5,并且已正确集成到项目中。另外,可能需要配置摄像头的访问权限,以便PICO4能够获取环境深度信息。 然后,考虑MR遮挡的具体实现方法。通常,这需要访问设备的深度传感器或环境网格数据。如果PICO4的SDK提供这些数据,开发者可以通过蓝图或C++代码处理遮挡逻辑。例如,使用场景捕捉组件获取环境深度,并在材质中应用深度测试,使虚拟对象根据环境深度进行遮挡。 还需要注意项目设置中的相关选项,比如启用移动设备的HDR、关闭可能冲突的插件如OculusVR,确保Android打包配置正确,包括SDK路径和包名设置。此外,可能需要调整渲染设置,启用后期处理效果中的自定义深度-场景深度,以便正确渲染遮挡效果。 测试环节也很重要,用户需要打包APK并部署到PICO4设备上进行实测,观察遮挡效果是否正确,并根据需要进行调整。如果遇到问题,可能需要检查日志或参考官方文档和社区资源,如B站的教学视频或PICO开发者平台。 最后,总结步骤:安装配置插件→设置项目参数→实现遮挡逻辑→打包测试。同时,提醒用户注意插件兼容性和环境配置的正确性,确保各步骤符合UE5和PICO4的最新要求。</think>### PICO4在UE5中实现MR遮挡效果的配置方法 #### 一、环境准备 1. **插件配置** 需确保项目中包含$PICOXR$和$OnlineSubsystemPICO$插件,移除冲突插件如$PicoSpatialAudio$[^1]。 UE5需使用适配的PICO SDK版本,建议从[PICO开发者平台](https://developer.pico-interactive.com/)下载最新集成包。 2. **项目设置** - 在`项目设置 > 平台 > Android`中启用`支持ARCore`和`深度API` - 关闭移动端冗余功能:`MobileHDR`设为关闭,禁用`OculusVR`插件[^3] - 配置渲染管线:在`渲染设置`中启用`自定义深度-场景深度` #### 二、遮挡实现原理 $$ \text{遮挡效果} = f(\text{环境深度图}, \text{虚拟物体深度}) $$ 通过PICO4的双目RGB摄像头实时生成$深度图$,与虚拟场景深度缓冲区进行比对,使用模板测试实现遮挡。 #### 三、具体实现步骤 1. **深度数据获取** 在蓝图或C++中调用$PICOXR$插件的接口: ```cpp // 获取环境深度纹理 FPICOXRMRFunctionLibrary::GetEnvironmentDepthTexture(); ``` 2. **材质配置** 创建自定义材质,添加`SceneDepth`节点与`PICODepthTexture`进行深度值比较: ```glsl if(SceneDepth < PICODepth) discard; ``` 3. **后期处理集成** 在后期处理材质中将混合现实层与虚拟场景叠加,使用深度测试控制透明度通道。 #### 四、调试与优化 - 在`PICO设备设置`中开启`透视模式`并校准摄像头 - 通过`stat scenerendering`查看深度缓冲性能指标 - 降低深度图分辨率(建议720p)以优化移动端性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值