Proximity grouping enables more than 70 Pulsar clusters to be used in a single volume. To achieve this, Evoke permits some duplication of patterns between Pulsars. It distinguishes between the duplicated patterns by linking the patterns to unique objects by their proximity to these unique objects.

For more information, see the following topics:

Introduction to proximity-based tracking

Origin uses ‘always-on’ tracking for its active LED devices, identifying objects by the spatial marker arrangement, rather than strobing LEDs on and off during tracking frames to create an ID. While this enables continuous tracking across every frame, even with the fully asymmetrical spacing of LEDs, this limits the number of Pulsars that can be tracked (4 from 8 LEDs, 4C8) to 70 unique patterns.

To exceed this number of tracked Pulsars, Evoke uses proximity-based tracking to ‘re-use’ patterns within a volume in a logical way, without compromising tracking performance.

What is proximity-based tracking?

 

Proximity grouping works by assigning the grouped identity (e.g. ‘Blue’) to an object based on both its pattern AND its distance to another object (that has a unique pattern), which acts as an identifier.

While the identifier must be unique, the related objects can share patterns with other smart objects.

Objects are labeled correctly as long as they are within a defined distance (the proximity threshold) of the identifying object.


To prevent Evoke from misidentifying objects, follow these guidelines when setting up proximity tracking:

  • Minimize use of template objects; use unique objects whenever possible.
  • Avoid similar objects coming within the proximity threshold of multiple unique objects. The default distance is 1.5 m: to change this, see Set the proximity threshold.
  • Where possible, avoid objects with similar patterns entering the same proximity threshold.

Although it is possible to use objects in the same template group interchangeably, doing so is not recommended as it complicates the management of the clusters.

Set up a proximity group in Evoke

Note
This section describes how to set up proximity grouping from within Evoke. In addition to setting up proximity groups by specifying the parameters described in this section, you can also do this via the API, which may be more convenient if you need to change the setup regularly.

Set the proximity threshold

The proximity threshold is the maximum distance between an object and another object that has both the same proximity group and a unique identity, within which objects can be labeled with their correct identity. The default proximity threshold is 1.5 m.

To set the identifying distance:

On the Process tab, in the Object Tracking section, set the required distance in millimeters, specifying a value that is appropriate for your environment.

Set up the objects to be used in proximity grouping

These types of objects are involved in proximity grouping:

  • Template objects. Objects with the same Template Group Name must have the same configuration of markers (LEDs). Any object with a non-empty string for Template Group Name is a template object.
  • Unique objects. Objects with no Template Group Name specified are unique objects, and must not have the same configuration of markers as any other object in the system.  

The template objects are identified by their proximity to unique objects that share the same Proximity Group Name. For an object in a template group to be labeled correctly, it must be within a pre-defined distance (known as the proximity threshold) of a unique object in the proximity group. The default distance is 1.5 m; to change this, see Set the proximity threshold.

To prepare objects for proximity grouping:

  1. Ensure you have created and linked the necessary objects in Evoke (see Work with Smart Objects and Work with basic objects).
  2. In the Tracking tree, select each object and on the Properties tab, set the following advanced parameters:



    • In the Proximity Group Name field, specify the proximity group to which the object belongs. Note that this name is case-sensitive.
    • If it's a template object, in the Template Group Name field, specify the template group to which the object belongs. If it's a unique object, leave this field empty. Note that this name is case-sensitive.
  3. Ensure you have set an appropriate proximity threshold (see Set the proximity threshold).

This table shows a simple example with two characters, Red and Green, each made up of three objects: Head, LeftHand, and RightHand:

Object

Proximity Group Name

Template Group Name

Pattern

Red_HeadRed
31
Red_LeftHandRedLeftHand47
Red_RightHandRedRightHand79
Green_HeadGreen
143
Green_LeftHandGreenLeftHand47
Green_RightHandGreenRightHand79

Run proximity-based tracking

After the objects are set up in Evoke, on the Processing tab, in the Object Tracking section, ensure Enable Proximity Grouping is selected. 


Use the Label Unambiguous Instances option

The Label Unambiguous Instances processing option enables you to control the labeling of template objects that aren't in proximity to a unique object in their proximity group.

  • If disabled (the default), template objects are not labeled unless they are in proximity to a tracked unique object in their proximity group.
  • If enabled, template objects are also labeled when there is no ambiguity (there is only one option for labeling).
    This is the case when all other template objects with the same pattern have already been labeled, due to proximity to a unique object in their proximity group.

If you enable this feature, template objects are labeled without a positive identification of the unique object in proximity. This means that objects are labeled more quickly than when this option is disabled, but introduces an additional risk of mis-labeling if unique objects were previously misidentified for any reason.

Use proximity grouping and auto-assignment together

To use proximity grouping and auto-assignment (see Assign clusters and calibrate characters (automated workflow)) together, the following setup is recommended. 

This example setup consists of several groups of people, Red, Green, Blue, etc. Each group consists of multiple users, eg, Red consists of Red1, Red2, ... ; Green consists of Green1, Green2 ...

Every user must have at least one unique object. This is usually the headset, eg, Red1_Headset, Red2_Headset, ...  

Each group also has a set of Pulsar objects, (Red : Red_AA, Red_AB, Red_AC ... ; Green : Green_AA, Green_AB, Green_AC ... ). Each user in the group takes several of the Pulsar objects and provided they are in the same group, those Pulsar objects can be used interchangeably between roles  (eg, LeftFoot, RightFoot, LeftHand, RightHand) for any of the users in the group.  

To ensure that proximity-based tracking works correctly, it is recommended that only objects in the same group are near each other in the volume (ie, come within the same proximity threshold). This works well when only a single group is in the volume at one time, or the volume is large enough to avoid groups merging. 

The following table shows how to set up the Proximity Group Name and Template Group Name for objects. 

ObjectProximity Group NameTemplate Group Name
Red1_HeadsetRed
Red2_HeadsetRed
Green1_HeadsetGreen
Green2_HeadsetGreen
Red_AARedAA
Red_ABRedAB
Red_ACRedAC
Green_AAGreenAA
Green_ABGreenAB
Green_ACGreenAC