VisionLib allows you to use 3D models from Unity's hierarchy for tracking (for more information on this, see › Using Models from the Unity Hierarchy). This enables you to dynamically add or remove parts of the tracking model depending on the situation. You can also switch between entirely different tracking geometries. Our SwitchingModels Unity sample scene shows you how to do this.
In VisionLibs model tracking, an individual tracking target is represented by a TrackingAnchor. This target's tracking geometry comprises one or more meshes (MeshFilters), each located on children of the TrackingAnchor in the hierarchy. A mesh is added to tracking by adding a TrackingMesh component to the same GameObject. The settings on the TrackingMesh control their role in their parent tracking target, as explained in the following sections.
You can add the TrackingMesh automatically to all GameObjects containing a MeshFilter by pressing the Add TrackingMesh components to all models button in the TrackingAnchor.
Note: In some cases, including many of our sample scenes in Unity, the same model is used for tracking and visualization. Despite this, the tracking geometry is generally independent of the geometry rendered by Unity (i.e. what is visible in the game view). You can use arbitrary meshes for visualization purposes. For more information about displaying different models for augmentation and/or init pose guidance, please consult Using Different Augmentation and Init Pose Guide.
If a TrackingMesh is located on the same GameObject as a MeshFilter, the model is added to VisionLib. To use the model for tracking, its TrackingMesh component has to be enabled. Toggling the enabled state of a TrackingMesh dynamically adds/removes the corresponding model to/from the current tracking geometry. E.g., you can progressively assemble your tracking geometry during runtime by starting with disabled TrackingMeshes and enabling them one by one.
An enabled TrackingMesh is generally used as tracking geometry. Some use cases call for tracking to ignore portions of the real tracked object. This is achieved by placing an appropriate geometry such that it covers these portions and set the occluder property in the corresponding TrackingMesh component to "true" (e.g. by checking the occluder box in the GUI).
For more information on tracking occluders, please see Model Tracking Occluders and explore our Tracking Occluder sample Scene.
Each tracking target comprises several constituent TrackingMeshes. TrackingMeshes themselves cannot stand on their own. They must be linked to a parent tracking target, i.e. a TrackingAnchor. This TrackingAnchor is specified in the TrackingMesh's RootTransform property.
The relative transform between a TrackingMesh and its TrackingAnchor (RootTransform) in Unity defines the transform of the constituent mesh within the tracking target's coordinate system in VisionLib.
The Scene Hierarchy in the Tracking Geometry section of a Tracking Anchor's editor gives a hierarchical overview of the TrackingMeshes connected to this anchor:
This scene hierarchy lists all GameObjects below the TrackingAnchor. It provides a range of settings and functions for each node. Settings made on a GameObject apply to the object itself and all its children. Mixed states under a GameObject – i.e. if child GameObjects have different values for the same setting – are indicated by a dash. The available settings and functions (from left to right in reach row in the image above) are explained in the following.
The leftmost column contains the name of the GameObject. The checkbox to the left of the name shows the presence of a TrackingMesh – i.e. whether the GameObject contains tracking geometry. You can add/remove TrackingMesh components by toggling the checkbox. The rows for disabled GameObjects are greyed out entirely.
The TrackingMesh can be enabled or disabled via this checkbox in the Scene Hierarchy. As explained above, this state decides whether the corresponding MeshFilter is used for tracking.
In the MeshRenderer checkbox enables/disables the corresponding MeshRenderer. This shows/hides the respective mesh in Unity's scene and game views. It does not affect VisionLib's tracking. For more information about this topic see Using Different Augmentation and Init Pose Guide.
The Occluder checkbox marks the TrackingMesh as a tracking occluder. This can only been activated, if a TrackingMesh is present on said GameObject. For more information on this setting, refer to our article on Model Tracking Occluders.
Pressing the Reveal in Hierarchy button highlights the corresponding GameObject in Unity's hierarchy.
Complex sub-model structures can be unpleasant to handle in unity. The Combine Meshes button reduces complexity by merging the Mesh on the GameObject whose button you pressed with all Meshes on its children. Children with different occluder/enabled settings are be combined into separate GameObjects, one object for each unique combination of settings.