Image

Image Tracking allows to detect a picture or photo in order to put virtual content over it.

The picture can be a magazine cover, poster, flyer, business card or whatever is plane and has enough identity or texture to be differentiable.

When creating a new Image scene inside Studio, you will be asked to upload the reference or marker image you want to detect and track, along with its real world size (when printed).

Entering a correct size is only needed for scaling purposes when using World Tracking mode.


Not every image is suitable for its use in AR, check How to choose a good marker image for more information.

See it in action

How to choose a good marker image

In order to differentiate one reference image from another or from any random frame taken by your device's camera, Onirix creates an Image Classifier every time you upload a marker image.

This classifier inspects your image looking for identificable features like corners, edges, high contrast zones, and so on. The following figure shows an example of detected features (green dots on right image).

After this process, the classifier outputs a quality score (percentage) based on the number of different features found and image resolution. You can check this score on the scene properties panel.

The more score you get, the better your reference will be detected and tracked over time. The following table illustrates how well your marker image will perform based on its quality score:

Quality Score Performance
< 50% It may not be able to be detected and tracking will fail very easily
> 50 % & < 75% It will be detected, but tracking may fail over time
> 75% Your marker image is almost perfect, tracking will only fail under severe lighting conditions, fast movements or on low-end devices

So, you should ensure to get at least a 50% quality score for your marker images. Here it is a list with some tips and recommendations to design or choose a good marker image:

  • Real world pictures are usually better than computer designed ones as objects are more complex, not perfect or symmetric and thus have more identificable features.
  • Avoid images with large textureless regions. Flat images or minimalistic logos won't work well as they don't have enough features to track.
  • Avoid repetitive features. A grid or similar pattern will add new features to the image but being all with the same shape will make image detector not able to differentiate one feature to another.
  • Different colors won't generate different features. Features are detected based on contrast changes so adding more colors won't make any effect.
  • Avoid printing or placing marker images under high reflective materials. Lighting reflections add artificial features to the image tracking process and may affect its performance.

Trick: If you use a printed image as a marker. It's usually better to use a real camera picture of printed image as the marker because printing process usually modify colors and intensities of designed image.


Example of good marker images

Example of bad marker images

Image-tracking vs World-tracking

By default, all your Image scenes will work on Image-tracking mode, but you may switch it whenever you wan't to World-tracking mode from project settings inside Studio. Let's see the difference:

  • Image-tracking: On this mode, the marker image will be detected and tracked over time, so virtual objects will seem anchored to the image at every moment. This mode especially excels in smaller scenes that are built around the marker image.
  • World-tracking: Using this mode gives the device environmental awareness by tracking flat horizontal surfaces. The marker image will be used only for triggering the experience, but all the virtual content will remain in the same place even if the marker is removed.

World-tracking and Image-tracking mode selection apply both for Image and QR Code scenes.

World-tracking mode is only compatible with ARCore & ARKit supported devices. If your project is configured for World-tracking but is run in a non-compatible device, Image-tracking will be used instead.