ARCore Tracks consistently and ARKit doesn't?

Hello,

I am a complete beginner but using tutorials and feedback from the very helpful unity discussions people, I managed to create an AR app that tracks book pages and puts a prefab on top.
I am now on the final stages of publishing for Android and got a borrowed mac to test on IOS. It works, tracking initializes but for some reason images are stuck on the “Limited” tracking state. When I flip pages it instantly detects the new image, but as “Limited” only. It does every once in a while flicker to tracking, but only for a fraction of a second.
After searching it seems the most likely cause for this would be image quality, though I find it weird since ARCore is really consistent and the images were made to have a score of around 90 for ARCore. Even though these are different algorithms, a good image for one should be at least a “doable” image for the other no?
Is there any other reason why this would happen? The book has already been produced so I can’t really change the images, so I am really hoping it is something else…

Thanks in advance!

In addition to what I said here, you can learn more about ARKit Requirements for Image Tracking here.

Indicated Page by Apple, contains Xcode project, and you can play with it.


Be aware of image detection capabilities. Choose, design, and configure reference images for optimal reliability and performance:

  • Enter the physical size of the image in Xcode as accurately as possible. ARKit relies on this information to determine the distance of the image from the camera. Entering an incorrect physical size will result in an ARImageAnchor that’s the wrong distance from the camera.

  • Scoring for ARKit: When you add reference images to your asset catalog in Xcode, pay attention to the quality estimation warnings Xcode provides. Images with high contrast work best for image detection.

  • Use only images on flat surfaces for detection. If an image to be detected is on a nonplanar surface, like a label on a wine bottle, ARKit might not detect it at all, or might create an image anchor at the wrong location.

  • Consider how your image appears under different lighting conditions. If an image is printed on glossy paper or displayed on a device screen, reflections on those surfaces can interfere with detection.

As Apple’s Engineer said:

Not all images are equally suited for using them as ARReferenceImages. Good reference images typically have high contrast, good texture, clear edges, and are printed on a flat, non-glossy surface. Low-texture and low-contrast images will likely not work so well. When you add reference images to an ARResourceGroup in an Xcode asset catalog, Xcode will show quality estimation warnings, which may provide additional insights about the specific issue with that particular image.

In some cases, you can try using an image editing tool to tweak contrast, exposure, or emphasize edges. Depending on the subject, cropping may work as well. For example, a picture showing mostly a blue sky with a small airplane could be cropped to just the region showing the airplane. If you can’t get detection to work at all for a particular image, you probably need to consider replacing it.


Based on my experience, ARKit works better than ARCore in terms of Image Tracking. But personal results may vary, as always.


In theory, you can use a separate ReferenceImageLibrary for each platform using separate Scenes or separate ARTrackedImageManager.

And this can be a Feature Request to assign a separate image for each platform inside the only “entity” in the library @andyb-unity

Hello, thank you for the thourough response. I’ve been messing around to try to find the root cause but to no avail. I tested on Xcode and the images gave me no “Low Quality” warnings. Which kind of makes sense since I get this exact behavior with every single image and they are very different from each other.

About the separate ReferenceImageLibraries, the books have already been produced so I can’t really change the images for IOS… I am starting to think this is maybe a runtime issue from AR kit?

I guess, you need to test with different iOS versions to prove this suggestion.

This is a known issue in ARKit, yes. A couple years ago they had an update that suddenly changed all images to stay stuck in the Limited state.

So there is no fix? AR Foundation is simply broken in IOS?

iOS itself contains this bug. AR Foundation can’t change Apple’s code.