Breaking News

Let’s Get Ready To Rumble – With bHaptics

Virtual Reality experiences are super immersive. Exploring a completely different world, being absorbed by it, feeling as if one is really there… until somebody shoots you and all you see is a bit of red glow indicating you were hit.


Inside-view of the bHaptics vest showing all the individual haptic points

Using small vibrations it is now also possible to give haptic feedback to the player. Some of the coolest gear around comes from bHaptics and I just added support for it to traVRsal. They have multiple accessories, most importantly the vest, followed by the arm pieces and even a headset piece for facial haptics.

Is it any good? You bet. In my research how to best implement it I played multiple games like Half Life: Alyx and Population one and I have to say: the gear always adds to the immersion, and it especially shines with shooters.

Take the A.I. Take-Over world in traVRsal. All of a sudden you feel the impact of a shot and even more impressive, the direction it came from. That actually gives you an advantage as you can now react much faster to enemies.

The vest supports a vast array of different possible patterns. Many are already included in the SDK to make it easy to start but there is even a designer to go full out and create custom patterns. One cool example is a slashes when a virtual sword hits you, impacting you diagonally from top left to lower right. Another one would be a heart-beat.

My Implementation

I made a big brainstorming list where haptics could add to the experiences. Here is what I finally ended up with implementing (see github for details):

  • click (arms): using pointer in menu
  • collect (arms): collecting items in-game with hands
  • death (all): when dying
  • exit-found (all): when having found the exit of a world
  • falling (all): when falling from heights
  • health-critical (vest): when health is below 20%
  • impact-all (all): when hit by explosion
  • impact-arm (arms): when hit by projectile
  • impact-body (body): when hit by projectile
  • impact-head (head): when hit by projectile
  • melee (arms): when destroying targets with arms
  • pistol (arms + body): when shooting
  • reload (arms): reloading weapon
  • slowdown (arms): when initiating time slowdown
  • startup (all): upon game start
  • world-loaded (all): after world has been loaded and player can start to walk

In order to add all this, I actually needed to enhance multiple core systems of the traVRsal engine. Most importantly, all player parts now react differently, meaning I now know which part of the player got hit and you get less damage on your hands than when shot in the head. Also, you cannot die anymore just because of hand damage. Items that can damage you now carry information about how such damage would feel like. E.g, a bullet hit or an explosion.

A bit tricky is that one cannot assume that players have all devices. Many players have only the vest so it is important to design the system in a way that either always the vest is giving feedback as well (e.g. a recoil in the shoulder and a vibration in the arm when shooting) or to have an intelligent fallback system with different haptic files to be played when only the vest is available. I decided for the latter approach as that let’s me design the experience even better.

Another tricky part is mirroring. A haptic clip is for example designed for a specific arm piece, let’s say the left one. To get it also on the right-hand side the pattern needs to be inverted. This means either create a second file or use the “reverse” property in the SDK, either at design or (luckily also) at runtime. I implemented a system which allows me to declare only one side and at runtime the correct mirroring will be done automatically, saving lots of time when designing the haptics. Also, I created a system to either play one out of multiple clips randomly for more variety or a whole group at once which is very hands to play effects in multiple devices at once.

A final learning is to dial up the intensity significantly. The default value of 1 is not enough for serious play, which was also feedback from testers. I usually have to dial it up to (not 11, beware) 1.5 or 2.

My haptic manager


Right now, traVRsal comes with many haptic experiences out of the box. For world builders I hesitated a bit if to open that can of worms, but ultimately I said, let’s go for it. So now, bHaptics is an integral part of my own SDK and the DamageInflictor supports custom haptics to be played. Go wild!

Custom haptics either by key or through files

With that I’m at the end of my short overview. If you have bHaptics gear, make sure to report back on how you liked it in my Discord!

Leave a Reply

Your email address will not be published. Required fields are marked *