top of page

Feature Redesign #2

Insight into the new Interaction System

My main concern this time around was to make the systems not only work nicely, but be easy to setup in-editor and look good at runtime. My first focus then became how to setup and set hand poses as easy as possible, and looking as good as we could get. Using set animation poses had ended up being a very poor choice for the original system. So I started looking into procedural animation. I ended up using dummy hands whose position, rotation and bone transforms would be imitated by the real hands in a procedural fashion (this way the hand bones flex into and out of their desired pose at runtime). With this in place our designers have the power to setup whatever pose they can imagine, by just rearranging the bones in the dummy hands parented to the pickup.

I then remade the hand snapping into something I like to call "Pre-grab". One big issue in the previous hand system was that the hand could often get into strange positions or become completely occluded if the object to be picked up was not upright. One way to solve that would have been to allow multiple grabpoints and hand poses, which would then be picked depending on the object's rotation and distance from the hand. But this would create a lot of extra work for the designers, so I decided to make sure the pickup itself would always be in the right "pose" to be grabbed. The Pre-grab then forces both the hand AND the pickup to get into the appropriate position and rotation, giving the player a preview of the hand holding the object.

Next I looked into NewtonVR to see how they used physics. NewtonVR provides some really nice Physics by moving the pickups directly through their Rigidbodies. This allows the objects to keep a sense of weight and to react correctly with other Rigidbodies in the world (preventing missed collisions, so common when using Kinematic bodies), the downside is NewtonVR was not designed for Hands. Pickups held using this method tend to drift around ever so slightly due to gravity, which makes it bad for pickups held by a hand, since they'll risk not aligning and cliping the hand's mesh, or if the hand itself is made to move this way they would not look stable.

I decided to use newtonVR's technique my own way. I made my hands Kinematic and the pickups Kinematic only while held. This made moving and aligning the meshes a lot easier. Then, to mitigate the bad physics for Kinematic objects I setup an invisible collision object or objects (optional for the pickups). This object(s) then moves in a similar way to NewtonVR's method. This gave us the best of both worlds: pretty good physics behaviours and total control of the mesh's position and rotation. I also enforced a "force limit" to prevent players throwing objects as fast as Superman or the Flash.

Next: Creating new Interactables.

bottom of page