如果Apple的ARKit支持像Vuforia那样的3D对象跟踪(甚至图像跟踪),我找不到任何信息。我不想在世界任何地方放置3D模型。相反,我想检测特定的3D对象并将AR对象放在该对象的前面和顶部。
简单的例子:我想跟踪现实世界中的特定玩具车,并在AR场景中添加扰流板。
有人可以向我提供有关可能的信息吗?
iOS 12的更新:在“ARKit 2”(在iOS 12或更高版本上称为ARKit)...
有关详细信息,请参阅the WWDC18 talk on ARKit 2。
iOS 11.3更新:在“ARKit 1.5”(在iOS 11.3或更高版本上称为ARKit)中,ARKit中有一个新的图像检测功能。如果您有一个已知图像(如海报或扑克牌或其他类似图像),您可以将其包含在Xcode项目中和/或从其他地方作为ARReferenceImage
加载它并将其放入会话配置的detectionImages
数组中。然后,当ARKit在用户环境中找到这些图像时,它会为您提供ARImageAnchor
对象,告诉您它们的位置。
请注意,这与您从其他工具箱中看到的“基于标记的AR”不太相似 - ARKit只找到一次参考图像,它不会告诉您它是如何随时间移动的。因此,它有助于“触发”AR内容体验(例如那些将手机指向商店中的星球大战海报并且角色走出它的宣传片),但不是说,例如,虚拟角色保持附加的AR棋盘游戏游戏片。
除此以外...
可以在每个捕获的ARFrame中访问摄像机图像,因此如果您有其他软件可以帮助完成此类任务,您可以将它们与ARKit结合使用。例如,Vision framework(在iOS 11中也是新的)为这些任务提供了几个构建块 - 您可以检测条形码并找到它们的四个角,并在手动识别图像中的感兴趣区域后,跟踪它在帧之间的移动。
注意:这绝对是一个黑客,但它为ARKit Unity添加了持久的图像跟踪。同样的想法也可以应用于Native lib。
下载ARKit 1.5 beta https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/branch/spring2018_update
在ARSessionNative.mm中,添加以下代码块:
extern "C" void SessionRemoveAllAnchors(void* nativeSession) {
UnityARSession* session = (__bridge UnityARSession*)nativeSession;
for (ARAnchor* a in session->_session.currentFrame.anchors)
{
[session->_session removeAnchor:a];
return;
}
}
在UnityARSessionNativeInterface.cs中,在SessionRemoveUserAnchor下添加此代码:
private static extern void SessionRemoveAllAnchors (IntPtr nativeSession);
这在RemoveUserAnchor下:
public void RemoveAllAnchors() {
#if !UNITY_EDITOR
SessionRemoveAllAnchors(m_NativeARSession);
#endif
}
然后从Update或Coroutine中调用它:
UnityARSessionNativeInterface.GetARSessionNativeInterface().RemoveAllAnchors ();
移除锚点后,可以再次识别图像。它不是非常流畅但绝对有效。
希望你发现这个有用!如果您需要进一步的帮助,请告诉我。