VR IK Body - Support


For support and quicker response, please contact me via e-mail:

Thread for feedback, questions, support, suggestions and rage.

Since 2021/06, the plugin contains two independent solvers.

  1. Original VRIKBody+VRIKSkeletalMeshTranslator. It’s simplier (not in setup) and works in Android.
  2. New Ynnk VR-Avatar component. Based on neural net. Setup process is simplier, but only works in Windows.

Both are replicated, but Ynnk VR-Avatar wasn’t deeply tested yet. Description below is for VRIKBody+VRIKSkeletalMeshTranslator.

Note 1: for better results you need to adjust settings in VRIKBody / Body Params rollout for your skeletal mesh. Most of them are overwritten by body calibration though, but not all.
Note 2: legs animation works atop of strafe blendspace which you need to setup manually for your skeletal mesh. If you don’t have walking animations, you can remove this part from animation blueprint. But default walking cycle (inside of PoseSnapshot object) doesn’t look very good.
Note 3: I update the plugin often for three lastest version of the engine (it’s Marketplace limitation), so older versions have some already fixed bugs and don’t include newer features.

Video Tutorial for VRIKBody+VRIKSkeletalMeshTranslator: VR IK Body - Setup - YouTube
Video tutorial for Ynnk VR-Avatar: VR IK Body Plugin Update: Ynnk VR-Avatar tutorial - YouTube

Older Example Projects

4.20+ old project (with multiplayer map):…-ZZmoMWVPKdlUr
4.24 old project (with multiplayer map): - Google Drive
4.20-4.22 default project:…w8is0S5A7/view

Common Issues

  1. Skeletal mesh remains in T-pose.
  1. Elbows bended in a wrong direction.
  • Set “Invert Elvows” property in the VR IK Skeletal Mesh Translator component.
  1. Hands can’t reach controllers when hands are stretched up/down.
  • Modify “Spine Vertical Offset” in the VR IK Skeletal Mesh Translator component.
  1. Legs aren’t animated.
  • Make sure that “Compute Legs IK” adnd “Compute Hands IK” are checked in the VR IK Body settings.
  • If animation blueprint was retargeted from the sample project mannequin blueprint, check the follow animation nodes: “Layered Blend per Bone” and “Blend Bone by Channel”. Retargeting manager doesn’t update names of bones in this nodes, so you need to do it manually.
  1. Wrists have wrong position relative to motion controllers.
  • Modify “Right Palm Offset” and “Left Palm Offset” propertis of the VR IK Body component.
  1. Plugin don’t work in packaged project.
  • Add “Delay” node in BeginPlay event before initialization of the plugin’s components. [planned to fix]

Setting Up Custom Mesh

These additional steps will help you to adjust all settings and get an accurate result:

  1. Uncheck VRIKBody → Calibrate Ribcage at T-Pose

  2. Measure offsets (vector) from chest to first neck bone and from neck to face/eyes. You can add three Arrow Components, approximately at desired locations, measure offsets and then delete them. Fill results to:
    VRIKBody → RibcageToNeckOffset
    VRIKBody → NeckToHeadsetOffset

  3. Launch VR Preview, calibrate, take T-pose and check if hands can reach motion controllers. If not, adjust VRIKBody → CalibrationArmSpanAdjustment value.

  4. Launch VR Preview, calibrate, stretch hands up and down. If hands can’t reach controllers in one position and bended at the other, adjust VRIKSkeletalMeshTranslator → SpineVerticalOffset.

  5. Launch again, take a look at feet. a. Can’t they reach ground? Increase VRIKSkeletalMeshTranslator → ScaleMultiplierVertical.
    b. Feet are above ground, but legs are bended? Change VRIKBody → FootOffsetToGround.

  6. Launch again and make sure everything works fine. Adjust ScaleMultiplierVertical и ScaleMultiplierHorizontal if needed.

Critical update 1.0.4


Bug fix: body calibration functionality is restored
(New: functions ResetCalibrationStatus, IsValidCalibrationData, IsBodyCalibrated)
Bug fix: bumpy/rough artificial movement (see update notes)
Bug fix: one-frame delay with artificial movement (see update notes)
Bug fix: skeletal mesh scaling (if RescaleMesh set to true) now works as expected
Known bug: bad scaling factor if skeleton has a scaled root bone
Bug fix: support of skeletal meshes without separate root bone (pelvis is a root) added
Bug fix: wrong hands bending at some skeletons (Mixamo)
(Added: boolean VRIKSkeletalMeshTranslator::InvertElbows variable for better control, isn’t necessary for all currently tested skeletons)
Bug fix: broken calibration on networking
(New: function VRIKSkeletalMeshTranslator::ForceSetComponentCalibrated)
Known bug: VRIKBody::ReplicateFullBody = true breaks replication.
New feature: spine twisting
(VRIKBody::EnableTorsoTwisting flag to enable/disable, enabled by default)

New: VRIKSkeletalMeshTranslator::LockRootBoneRotation setting. Use it if you need to keep component rotation in zero.

Demo Project

Bug fix: broken multiplayer map restored
New (4.18 only): single-player map in the demo project now has new blueprint-only player pawn BP_PlayerPawnNew (instead of BP_SlidingLocomotionPawn). It has new interaction features in addition to default grabbing. Legacy hand meshes are removed.
Known bugs: artificial locomotion isn’t replicated from client. Instead of copying this built-in system use replicated FloatingPawnMovement Component.
New (4.18 only): BP_SlidingLocomotionPawn now has teleporation mechanics enabled by default (switch to BP_SlidingLocomotionPawn in game mode).

Update Notes

  1. Add VRIKSkeletalMeshTranslator::UpdateSkeleton call in player pawn’s Tick function right after VRIKBody::ComputeFrame and before applying artificial locomotion.

  1. Remove Skeletal Mesh position update code in Animation Bleuprint (if VRIKSkeletalMeshTranslator::RootMotion is true).

Is it possible to use this Plugin with a default Pawn or Character?
Or is it binded on using the BP_SlidingLocomotionPawn?
Nice work b.t.w.! :slight_smile:

In the updated demo project (for 4.18 only) I changed default player pawn from BP_SlidingLocomotionPawn to BP_PlayerPawnNew, a child of Pawn. And going to do the same for multiplayer pawn.

Yea, I got that.
Maybe my question was a bit mistakable.
We are using a Character-Class for VR and I was wondering, if I am able to use the plugin with this type of class.

Yes, it isn’t class-dependent. It just takes input from VR, takes a reference to skeletal mesh component and returns PoseSnapshot object for this skeletal mesh.

Is there anything I need to do other than changing the level blueprint, making a child pawn and retargeting the animBP to make a new skeletal mesh use this?

When I did those I get an editor crash when trying to play every time when starting as the new pawn. It’s not the animBP causing the crash as I disabled the code inside and still get it. Can’t narrow it down any further.

Hi, couldn’t find the documentation you’re talking about ‘Docs’ folder, dare to help ? Thanks

Program Files/Epic Games/[eigine version]/Engine/Plugins/Marketplace/VRIKBody/Docs or here

I don’t know plugin-specific problems with it.
1 Do you use 4.17 or 4.18? In 4.17 you need to remove actual player pawn from the scene and set up game mode.
2 Can you show the log and say what else you changed?
3 Try to turn off anim blueprint at all (select anim sequence instead).

  1. I use 4.18
  2. I attached log, didn’t see anything of note in it though
  3. Turning off the anim blueprint doesn’t fix the crash, so something else must be causing it. The crash crashes the engine as well.

Here is exactly what I am doing

>Start new project with the plugin on, and on the example/demo map
>Add Synty Studios “Polygon Knights” series
>Make Child Blueprint of BP_Avatar called BP_Avatar_Knight
>Retarget AnimBP to the knight, set it up in BP_Avatar_Knight
>Replace BP_Avatar in the level with BP_Avatar_Knight and replace the refence in the level blueprint
>This causes an editor crash after a half second

Edit: I’ve narrowed down the crash to the “initialize Components Input” section of the BP_PlayerPawnNew. Specifically the “initialize” call on the translator. Maybe my skeleton isn’t set up right?

I managed to fix the crash by changing the bone names in the translator component to the proper ones, since the skeleton has different names. I also had to use the old locomotion pawn though. The PawnNew crashes the editor at the initialize section on the translator, even with the bone names correct. Will see if I can still fix that since I’d like to use that new pawn.

Oh, sorry, I already forgot it. Wrong bone names cause crash in 1.0.4. Fix will be added in the next update.

Hello YuriNK,
sorry but in your 4.18 demo map, there’s a few things I don’t understand. Where are the VR IK BODY and VR IK Skeletal Mesh Translator ? All I see is the BP_Avatar, not having any of these, but working fine. I must be missing something for sure, actually I’d just like to be able to edit the floor/col on your demo project to fit a landscape… and I’m getting a bit dizzy and lost. Thanks for your time, regards

They’re in the player’s pawn blueprint BP_PlayerPawnNew (see game mode blueprint BP_GameModeSP). BP_Avatar is just external an container for the skeletal mesh.

Just found it via level blueprint casting to playerpawnnew ! thanks !

Is there a way to get everything to rotate? I can only manage to turn the camera and not the avatar nomatter what I apply rotation to. I want to turn the joystick and have everything turn so I can rotate.

Hello, usually you can rotate a whole actor. Doesn’t it work?

Try to call VRIKBody::ResetTorso function after you rotate player character.

Hello, stupid question, but how would handle the shoulder length ? Actually, even in your demo, when you put any hand in the air, it makes your shoulders go backward, and won’t really stick to your real motion controller.

This doesn’t work, neither does any form of rotating any actor.