ARCore 客户端 (Android)

NVIDIA CloudXR SDK 包含一个用于 AR 流媒体的示例 ARCore 客户端,该客户端旨在与支持 ARCore SDK 的 Android 平板电脑和手机配合使用。该客户端从 Android 设备收集运动数据,并将其作为“姿势”数据发送到 CloudXR 服务器。服务器根据客户端位置渲染场景帧,并将其流式传输到客户端。客户端解码从 CloudXR 服务器流式传输的视频(以及提供的 alpha 通道),并将其与 Android 设备的相机视图混合。

注意

请注意,没有什么可以阻止非 AR 场景,我们可以称之为 “2D-VR”,您可以在 3D 空间中移动并可以用相机“环顾四周”。但是,在空间中移动/位移将需要一些用户输入方面的自定义编码。

此示例基于 ARCore SDK 中的 hello_ar_c 示例应用程序启动。

构建 ARCore 客户端

在以下说明中,{cxr-root} 是 CloudXR SDK 的路径。

注意

在 Windows 上,由于路径长度限制,您可能需要将 SDK 移动到驱动器的顶层。您会从构建过程中收到关于文件不存在的奇怪错误,但也会注意到显示路径非常长。

  1. 将 ARCore SDK 解压缩到 {cxr-root}\Sample\Android\GoogleAR 文件夹中,解压后内容将位于类似 {cxr-root}\Sample\Android\GoogleAR\arcore-android-sdk-1.26.0 的子文件夹中。为了简化后续步骤,我们将使用 {arcore-root} 来指代该目录。

  2. 转到 https://github.com/NVIDIA/CloudXR/tree/master/arcore-android-sdk/samples/hello_cloudxr_c 并下载整个 hello_cloudxr_c 项目,并将其放置在 {arcore-root}\samples 中,与 ARCore SDK 示例位于同一级别。

  3. 将 Google Oboe SDK .AAR 文件 (oboe-1.5.0.aar) 复制到 {arcore-root}\samples\hello_cloudxr_c\libs 文件夹中。

  4. 将 CloudXR SDK 客户端软件包(即 CloudXR.aar 文件)从 {cxr-root}\Client\Lib\Android 复制到 {arcore-root}\samples\hello_cloudxr_c\libs

  5. 运行 Android Studio。

  6. 完成以下任务之一

    • 在欢迎屏幕上选择 打开现有的 Android Studio 项目

    • 点击 文件 > 打开

  7. 导航到 {arcore-root}\samples 并选择 hello_cloudxr_c 项目/文件夹以打开。

  8. 选择 构建 > 编译项目

此过程应在 {arcore-root}\samples\hello_cloudxr_c\build\outputs\apk\debug 目录中生成一个 .apk 文件,该文件可用于调试或手动安装。

注意

如果构建失败并出现关于 manifest 的错误,请在左下角选择 文件 > 设置 > Experimental 并取消选中 Only sync the active variant 复选框。

注意

要从命令行构建,请从 hello_cloudxr_c 文件夹中的命令提示符运行 gradlew build

  1. 准备设备以进行运行/调试

    1. 将设备置于开发者模式,并在设备上允许 USB 连接调试模式。

    2. 使用 USB 数据线将 Android 设备连接到开发系统。

    3. 如果在设备上提示允许连接,请选择 允许

安装 ARCore 客户端

注意

如果您想从命令行手动安装,则此部分是必需的。如果通过 Android Studio 运行,它将处理安装,因此您可以跳到 运行 ARCore 客户端

  1. 在命令提示符窗口中,导航到包含构建示例应用程序所创建的 .apk 文件的文件夹。

  2. 使用 ADB 从 release .apk 文件安装应用程序。

    adb.exe install -r <APK name>.apk
    

    注意

    默认情况下,ADB.exe 程序由 Android Studio 安装在 C:\Users\{username}\AppData\Local\Android\Sdk\platform-tools

    安装完成后,ADB 将回复 Success 消息。

  3. 如果您正在使用 Gradle 从命令行构建,它可以进行安装:gradlew installRelease

运行 ARCore 客户端

注意

有关我们的命令行/启动选项系统的更多信息,以及所有可用选项的完整列表,请参阅 命令行选项,有关启动 Android 应用程序的各种方法的更详细说明,请参阅 如何在 Android 上启动

  1. 在服务器系统上启动 SteamVR 或其中一个测试服务器(请参阅 CloudXR 测试工具)。

  2. 在您的 Android 设备上启动 CloudXR ARCore 客户端 应用程序(通过您选择的任何方法)。

  3. 出现提示时,输入 CloudXR 服务器的 IP 地址或接受先前输入的值。

  4. 一旦您看到相机视图,您应该缓慢地左右或上下转动相机,直到它在屏幕上充分可视化目标“地面平面”,显示为一系列连接的白点。

    ../_images/arcore_surface_detect.jpg

    ARCore 表面检测

  5. 触摸网格以选择 AR 世界的锚点。

  6. 等待应用程序连接到服务器并开始流式传输。

  7. 对于 SteamVR,您将获得配置为主视图的内容,或者服务器上已在运行的任何 VR 应用程序。

    注意

    要使用 AR 内容流式传输 CloudXR,服务器应用程序在包含 RGBA 数据的左眼中提供主场景。数据中的 alpha 通道指示应与实时相机内容混合的区域。

    右眼数据将被忽略,但由于 OpenVR 需要提交双眼数据,我们建议应用程序也使用相同的纹理句柄提交左眼纹理作为右眼纹理,或者选择性地为右眼提交一个小的虚拟纹理。

    {cxr-root}\TestTools\ArCubeSever 文件夹中,提供了一个基本的 OpenVR 服务器应用程序 ar_test.exe,以帮助说明和验证 SteamVR 中的 AR 流式传输。连接建立后,在服务器上启动 ar_test.exe 以查看混合到当前相机视图中的巨大 3D 纹理立方体网格。

  8. 要重置相机视图中的锚点,请按住屏幕几秒钟。

    此步骤会重置锚定位置,并允许您扫描和设置新的根锚点位置。

注意

ARCore 示例除了所有默认选项之外,还有额外的命令行选项。有关更多信息,请参阅 ARCore 客户端命令行选项