zSpace Haptics Demo

Article last updated:

What this application uses/demonstrates:

  1. Object interaction using the 6 DOF stylus.
  2. Haptic feedback via stylus vibration capabilities.
  3. Variability of haptic feedback according to physics engine collision strength
  4. Use of the zSpace plugin for Unity.

Download Link:

zSpace Haptics Demo

Known Issues:

  • The first time you launch any Unity app on a system after Windows bootup or tracking service start in full screen mode, the app will actually come up windowed and flickering.  To fix this, you can press Alt+Enter to put it back into full screen mode or close the app, restart it, uncheck the "Windowed" box on the front-end dialog and click Play to bring it up full screen.  This issue only happens on fresh bootup of Windows or recent starting of zSpace tracking service.
  • The app occasionally crashes on exit.  It is a demo and there are no plans currently to improve upon this issue.


  1. Double click zSpace Haptics Demo.exe and follow the prompts to install into the default path.
  2. At the end of the installation, you should have a startup menu group under Windows Start Menu - zSpace - zSpace Haptics Demo with a shortcut to launch and uninstall the demo.  You will also have a desktop shortcut.

Running the Demo:

  1. From the desktop icon or start menu group for zSpace Haptics Demo, double click on "zSpace Haptics Demo" to start the application.
  2. From the Unity menu, select 1920 x 1080 resolution, select quality level (GOOD is default and is recommended setting), and select whether or not you want to run full screen or windowed from the check box. If you want to run full screen, the zSpace display must be the primary display in a multi-display setup or the only display.
  3. Click Play to begin the demo.



R  -  Reset scene. 
~  -  Toggle options overlay on/off.


Options are configured in-app. Any changes made are saved to HapticSettings.json in the same directory of the executable. Default settings are restorable by deleting HapticSettings.json before launching the app again.

Per-collision options

There are 5 different collision classes.

  • Stylus Hover  Applies whenever the virtual stylus cursor hovers over a new object.
  • Any->Floor  Applies whenever a held or released object comes into contact with the floor.
  • Sphere->Any  Applies whenever a held or released sphere comes into contact with any other object in the scene.
  • Cylinder->Any  Applies whenever a held or released cylinder comes into contact with any other object in the scene.
  • Box->Any  Applies whenever a held or released box comes into contact with any other object in the scene.

Each collision class can be configured with different characteristic haptic responses.

  • Time On  The amount of time for the "on" portion of one vibration cycle.
  • Time Off  The amount of time for the "off" portion of one vibration cycle.
  • Count   The number of vibration cycles for this response.

Global options

There are a number of options that are applied globally to all or most collision and haptic events.

  • Detection Collisions After - If disabled, collision vibrations are enabled only while grabbing an object. If enabled, collision vibrations continue for collisions involving the most recently grabbed object.
  • Only Once - Applies only if Detection Collisions After = true. If Only Once = true, then only the very next collision after releasing an object will trigger vibrations. Subsequent collisions trigger no vibrations.
  • Events/sec Limit - This is a rate limiter that limits the number of haptic vibration clips that can be initiated per second. This is similar to rate limiters you may see when combining sound FX with physics.
  • Use Impact-based Vibration - If enabled, alters the per-collision options for each of the collision classes (except for Stylus Hover) dynamically according to the impact magnitude of the collision event. Strong collisions will act to strengthen the vibration response, while weak collisions will act to diminish the vibration response.
  • Impact Coefficient - Applies only if Use Impact-based Vibration = true. This value affects the multiplier used in converting collision impact magnitudes into vibration strengths.
  • Audio level hover - Audio level for the stylus hover sound effect. Can be 0 to disable.
  • Audio level collision - Audio level for collision sound effects. Can be 0 to disable.


Was this article helpful?
0 out of 0 found this helpful
Have more questions? Submit a request


  • Avatar
    Dominic Elm

    Is is possible to get the Unity project files and the source code?