Notes on Optitrack skeleton, RigidBody & VR HMD tracking

First off Im using a local network which has the Optitrack cameras and the Mocpa pc and the Backpack pc on it.

VR HMD Steaming

HMD needs to be powered on (green light on the connector box.)
HMD clip needs to be set up as an HMD in Motive
– and I’ve found that you need to use Motive 2.3 to add it for some reason, but then it will show up in motive 2.1. (I was using 2.1 because I have that licence and want to look at my old recordings)

Run SteamVR
Run Optitrack OpenVRDriverConfiguration tool
click Retry if driver status is ‘Not intitialized’ – this happens when SteamVr isn’t running


Make sure Connection type is set to Unicast in both Motive and Optitrack OpenVRDriverConfiguration.

Make sure the server is set to the mocap PC and that the Local address is set to the HMD machine. We need to use Unicast as we are strreaming over Wifi to a BP PC
These are the settings im using and I can stream HMD, rigid body and skeletons

Make sure Motive is set to Passive and Active mode in the 3d window!

when its tracking correctly the T icon is lit up. The VR view below responds when the HMD is moved

you may need Wiggle the HMD in real life to wake it up

Save
& Load the config & possibly restart both the SteamVR and Optitrack OpenVRDriverConfiguration. After its set-up one time it seems to be pretty reliable.

In Unreal you will need to create a custom pawn go to content browser add new add, a Blueprint of type Pawn, open it then add a camera component, and set ‘LOCK to HMD’, and set ‘base eyeheight’ to 0.

if Unreal play modes shows no option to Play in VR check that ‘Optitrack VR latency optimisation’ is enabled in Unreal plugins. The Optitrack plugins will all need to be there and active

Make a new game mode of and set the default pawn to be your OptitrackPawn
Set the world settings to use your new OptitrackGameMode.
The player start should be a 0,0,0 –you do not need to  set input/audo receive Input – leave as disabled.
in the OptitrackPawn you do not set ‘AutoPossesPlayer’ – leave it disabled – The game mode will take care of this

Stream Skeleton

Correct method (not quite normal ways around)
is to make first an Anim BP of type ‘OptitrackAnimInstance’ with your skeleton.
Add an ‘OptitrackSkeleton’ and a ‘source skeleton asset name’ and a ‘streaming client origin’. wire it up
Select the OptitrackSkeleton and do the bone remapping.

Then make a blueprint of type Character add your skeletal mesh and anim BP. etc. then add an OptitrackSkeleton component to the character. Then set the ‘source skeleton asset name’ and inside that component. You don’t have to set the Optitrack client origin it will default to the first one found.

Drop it in level and Play or simulate to test.

(if the thing won’t animate double and triple-check that you are using the correct skeleton when you make the anim BP)
Right click on the Skel mesh in the content browser and look for Find Skeleton near the top)

If you want to offset the character from the world zero which would normally be the OptitrakClient origin then use a second OptitackClientOrigin, apply offsets and set just that character to use that origin.
If you want to scale the mesh up to make a giant character, the set the Character scale AND the OptitackClientOrigin scale AND in the animBP set the Optitrack Skeleton Scale Bones to false (otherwise it will stretch the character) (This seems really counterintuitive.)

You will also need to set up the Optitrack client origin in the level. It will probably auto find it but you may need to set the IP;s

Optitrack docs Skeleton streaming with video:

https://v21.wiki.optitrack.com/index.php?title=Unreal_Engine:_Skeleton_Streaming

Rigid body guide:

https://v21.wiki.optitrack.com/index.php?title=OptiTrack_Unreal_Engine_4_Plugin#Live_Streaming

Further notes