为什么ARCore支持的设备数量有限?

6
什么使得支持ARCore的设备支持ARCore? 哪些功能使得该设备支持ArCore? ARCore设备与其他不支持设备有何区别?

1
有人会给出更完整的答案,但基本上,该特定设备的传感器需要进行高水平的校准,这并不像听起来那么容易。这取决于制造商与谷歌合作完成工作。我认为还会有版本和性能要求,但我有印象任何现代智能手机都可以满足这些要求。 - Jethro
@jethro 谢谢回答问题,但我对答案不太满意,我想要详细了解。谢谢。 - Sunny Sommanek
@SunnySommanek 这篇文章可能有助于理解:https://medium.com/6d-ai/how-is-arcore-better-than-arkit-5223e6b3e79d - Morrison Chang
3个回答

5

发生的事情与手机有多新无关,而在于设计和构建时是否进行了一些测试和测量。

  • 它的意思是,今天您的手机需要一些硬件,例如:

加速度计:测量加速度,即速度变化除以时间。简单地说,它是速度变化的衡量标准。加速度力可以是静态/连续的 - 如重力 - 或动态的,比如运动或振动。

陀螺仪:测量和/或维持方向和角速度。当您在使用AR体验时更改手机的旋转时,陀螺仪会测量该旋转,并确保ARCore正确响应数字资产。

enter image description here

手机相机:在移动AR中,您的手机相机提供周围真实世界的实时反馈,上面覆盖了AR内容。除了相机本身外,像Google Pixel这样支持ARCore技术的手机还依赖于补充技术,如机器学习、复杂图像处理和计算机视觉,以生成高质量的移动AR图像和空间地图。 磁力计:为智能手机提供与地球磁场相关的简单定位。由于磁力计的存在,您的手机始终知道哪个方向是北,从而使数字地图根据您的物理方向自动旋转。该设备对于基于位置的AR应用程序至关重要。 GPS:全球导航卫星系统,为GPS接收器(如您的智能手机)提供地理位置和时间信息。对于支持ARCore技术的智能手机,该设备有助于启用基于位置的AR应用程序。

enter image description here

显示:智能手机上的显示器对于清晰的图像和显示3D渲染资产非常重要。例如,Google Pixel XL的显示规格为5.5英寸AMOLED QHD(2560 x 1440)534ppi显示屏,这意味着该手机可以显示534像素每英寸 - 呈现出丰富,生动的图像。
您可以在Google AR&VR的介绍增强现实和ARCore中找到此信息和更多信息。

2
为了获得AR体验,ARCore兼容设备必须具备4个传感器:
- 加速度计 - 陀螺仪 - 后置RGB相机 - 磁力计(将来会支持)
如果您的智能手机没有陀螺仪(或者它有一个虚拟陀螺仪)来测量空间中的方向(旋转),则您的Android设备被视为不兼容ARCore。每个ARCore兼容设备必须使用6自由度(XYZ位置和XYZ旋转)进行3D跟踪。
在为Google Play商店开发AR应用程序时,您应编写检查ARCore兼容性的代码。
如何执行运行时检查。
检查ARCore是否受支持(仅适用于AR可选应用程序)。
引用:
AR可选应用程序可以使用ArCoreApk.checkAvailability()来确定当前设备是否支持ARCore。在不支持ARCore的设备上,AR可选应用程序应禁用与AR相关的功能并隐藏相关的UI元素。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Enable AR related functionality on ARCore supported devices only.
    maybeEnableArButton();
}

void maybeEnableArButton() {
    ArCoreApk.Availability availability = ArCoreApk.getInstance().checkAvailability(this);

    if (availability.isTransient()) {
        // Re-query at 5Hz while compatibility is checked in the background.
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                maybeEnableArButton();
            }
        }, 200);
    }
    if (availability.isSupported()) {
        mArButton.setVisibility(View.VISIBLE);
        mArButton.setEnabled(true);
        // indicator on the button.
    } else {                            // Unsupported or unknown.
        mArButton.setVisibility(View.INVISIBLE);
        mArButton.setEnabled(false);
    }
}

ARCore 不使用磁力计:https://github.com/google-ar/arcore-android-sdk/issues/362 - Chrystian
以上方法存在问题。availability.isSupported()总是返回true,因此代码的else部分没有被执行。这就是为什么我无法为不支持的设备放置消息的原因。 - rocco
四年前这个方法还可以。查看文档,也许有一些变化。- https://developers.google.com/ar/reference/java/com/google/ar/core/ArCoreApk - Andy Jazz
1
@AndyJazz,你能否在这个问题下添加你的评论?对我来说将非常有帮助,因为我在这方面遇到了很多困难。 - rocco
嗨@rocco,很不幸,目前我同事中没有任何一台不支持ARCore的Android设备,因此我无法以任何方式测试这种方法。 - Andy Jazz
显示剩余3条评论

0

AR Core 需要具备六自由度的设备,不支持的设备通常只有三自由度(DOF)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接