VR IK Body - Support

There are few problems with the skeleton. Some of them are specific for my plugin and some are general for UE4.

  • bones hierarchy: clavicles should be attached to ribcage bone (i.e. last bone of the spine), and not neck. Fix it (recommended) or use name of neck bone as ‘Ribcage’ in settings of the VRIKSkeletalMeshTranslator component.
  • root bone should be located at the ground in location (0, 0, 0) with rotation (0, 0, 0), because it specifies component’s location and rotation in UE4. Its Y axis should be equal to forward (backward in 3ds max) direction of the character. And character rotation (before skinning) shoudld be zeroed in this position for corrent import to UE4.

See changed fbx (in the project’s folder) as a reference for your main skeletal mesh.

Not related to skeleton, but should be mentioned:

  • skeletal mesh component within BP_MotionControllerPawn should be rotatated in a direction of camera
  • Anim graph: after retargeting of animation blueprint, update names of bones in all ‘Blend Bone by Channel’ and ‘Layered Blend per Bone’ nodes, because they aren’t updated automatically in a process of retargeting.
  • VRPawn actor at the level: select SM_Avatar component and update animation blueprint (‘Anim Class’ property), because it isn’t updated when you change it in the blueprint itself.

Project: https://drive.google.com/open?id=1pfa8P6UeoRHI_DpGTsCPFnNa9NnvwKt1

Thanks YuriNK, got it working.
Do you have a technique other than trial and error for finding the correct hand offsets for Oculus?

Unfortunately, no. that’s how I do that.

My entire spine appears to being rotated 180 on calibration.
Im wanting to use CAT rig in 3ds max for this but the plugin dosnt seem to like the spine

Disable flexible spine in settings of the VRIKSkeletalMeshTranslator component. I know about this issue and going to submit update soon.

I cant find that setting in the component settings

Hello,

Unfortunately we’ve run into a few issues with this system and were hoping you could give us a few pointers as to how to approach fixing it. Namely our feet seem to be swapped - left foot is on the right and vice versa. Secondly, the head clips into the torso when you duck. If you need any more info or need us to do some tests let me know.

Best regards,
Damir H.

I need more details about these issues. Are feet swapped with default legs simulation or with overriding animation (blend space)?
As for head, small video would help me. This issue could be related to proportions of skeletal mesh (can be fixed by adjusting settings) or it could be caused by bug.

After using IKbody, there are some details of the problem. After changing the model, the hand is distorted. How to solve it?

  • check names of bones in VRIKSkeletalMeshTranslator component
  • if necessary, adjust RightHandOffset and LeftHandOffset in VRIKBody component.

I mean this kind of deformation, how can I solve it? Can you talk in detail? thank you very much.

Oh, got it. It’s about twist bones.
First of all, make sure that there is no outdated twist bones correction in animation blueprint: https://pp.userapi.com/c849216/v849216683/fce5d/AODk9dh6XAo.jpg

Then, open player blueprint and adjust twist values here: https://pp.userapi.com/c851520/v851520634/86cbe/S2KNJiiz-Po.jpg
Try 0 (to disable twisting), 0.5 and 0.75 with appropriate number sign.

The skeleton dosnt work on my shipping or dev build, but runs fine in the vr editor preview.

Error shows in the output log of the editor too but the skeleton functions,
[SPOILER]


lk::StackWalkAndDump -  5.652 s
LogOutputDevice: Error: === Handled ensure: ===
LogOutputDevice: Error: Ensure condition failed: !RotationQuat.ContainsNaN() [File:D:\Ue4Source\Ue4wVXGI\UnrealEngine\Engine\Source\Runtime\Core\Private\Math\UnrealMath.cpp] [Line: 448]
LogOutputDevice: Error: Invalid input to FRotator::Quaternion - generated NaN output: X=nan Y=nan Z=nan W=-nan
LogOutputDevice: Error: Stack:
LogOutputDevice: Error: [Callstack] 0x00007ff928fb016c UE4Editor-Core.dll!FRotator::Quaternion() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\core\private\math\unrealmath.cpp:448]
LogOutputDevice: Error: [Callstack] 0x00007ff9407e74af UE4Editor-VRIKBodyRuntime.dll!UVRIKBody::GetHandTransform() [d:\ue4source\ue4wvxgi\unrealengine\engine\plugins\marketplace\vrikbody\source\vrikbodyruntime\private\vrikbody.cpp:1871]
LogOutputDevice: Error: [Callstack] 0x00007ff940813d27 UE4Editor-VRIKBodyRuntime.dll!UVRIKBody::VRInputTimer_Tick() [d:\ue4source\ue4wvxgi\unrealengine\engine\plugins\marketplace\vrikbody\source\vrikbodyruntime\private\vrikbody.cpp:877]
LogOutputDevice: Error: [Callstack] 0x00007ff9407d26ec UE4Editor-VRIKBodyRuntime.dll!UVRIKBody::ComputeFrame() [d:\ue4source\ue4wvxgi\unrealengine\engine\plugins\marketplace\vrikbody\source\vrikbodyruntime\private\vrikbody.cpp:279]
LogOutputDevice: Error: [Callstack] 0x00007ff940815d42 UE4Editor-VRIKBodyRuntime.dll!UVRIKBody::execComputeFrame() [d:\ue4source\ue4wvxgi\unrealengine\engine\plugins\marketplace\vrikbody\source\vrikbodyruntime\public\vrikbody.h:299]
LogOutputDevice: Error: [Callstack] 0x00007ff929d11da4 UE4Editor-CoreUObject.dll!UFunction::Invoke() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\coreuobject\private\uobject\class.cpp:4861]
LogOutputDevice: Error: [Callstack] 0x00007ff929f11e19 UE4Editor-CoreUObject.dll!UObject::CallFunction() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:816]
LogOutputDevice: Error: [Callstack] 0x00007ff929f365ac UE4Editor-CoreUObject.dll!UObject::ProcessContextOpcode() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:2330]
LogOutputDevice: Error: [Callstack] 0x00007ff929f38cbf UE4Editor-CoreUObject.dll!UObject::ProcessInternal() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:1031]
LogOutputDevice: Error: [Callstack] 0x00007ff929f127de UE4Editor-CoreUObject.dll!UObject::CallFunction() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:940]
LogOutputDevice: Error: [Callstack] 0x00007ff929f38cbf UE4Editor-CoreUObject.dll!UObject::ProcessInternal() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:1031]
LogOutputDevice: Error: [Callstack] 0x00007ff929d11da4 UE4Editor-CoreUObject.dll!UFunction::Invoke() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\coreuobject\private\uobject\class.cpp:4861]
LogOutputDevice: Error: [Callstack] 0x00007ff929f38269 UE4Editor-CoreUObject.dll!UObject::ProcessEvent() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:1480]
LogOutputDevice: Error: [Callstack] 0x00007ff925991123 UE4Editor-Engine.dll!AActor::ProcessEvent() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\engine\private\actor.cpp:713]
LogOutputDevice: Error: [Callstack] 0x00007ff926d5600a UE4Editor-Engine.dll!AActor::ReceiveTick() [d:\ue4source\ue4wvxgi\unrealengine\engine\intermediate\build\win64\ue4editor\inc\engine\actor.gen.cpp:1040]
LogOutputDevice: Error: [Callstack] 0x00007ff9259b07ae UE4Editor-Engine.dll!AActor::Tick() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\engine\private\actor.cpp:934]
LogOutputDevice: Error: [Callstack] 0x00007ff9259b0f1f UE4Editor-Engine.dll!AActor::TickActor() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\engine\private\actor.cpp:914]
LogOutputDevice: Error: [Callstack] 0x00007ff92596ca53 UE4Editor-Engine.dll!FActorTickFunction::ExecuteTick() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\engine\private\actor.cpp:137]
LogOutputDevice: Error: [Callstack] 0x00007ff926bb73cc UE4Editor-Engine.dll!TGraphTask<FTickFunctionTask>::ExecuteTask() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\core\public\async	askgraphinterfaces.h:829]
LogOutputDevice: Error: [Callstack] 0x00007ff928e2a0c8 UE4Editor-Core.dll!FNamedTaskThread::ProcessTasksNamedThread() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\core\private\async	askgraph.cpp:679]
LogOutputDevice: Error: [Callstack] 0x00007ff928e2a310 UE4Editor-Core.dll!FNamedTaskThread::ProcessTasksUntilIdle() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\core\private\async	askgraph.cpp:586]
LogOutputDevice: Error: [Callstack] 0x00007ff926c0cb80 UE4Editor-Engine.dll!FTickTaskSequencer::ReleaseTickGroup() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\engine\private	icktaskmanager.cpp:573]
LogOutputDevice: Error: [Callstack] 0x00007ff926c1cbb2 UE4Editor-Engine.dll!FTickTaskManager::RunTickGroup() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\engine\private	icktaskmanager.cpp:1474]
LogOutputDevice: Error: [Callstack] 0x00007ff92631d874 UE4Editor-Engine.dll!UWorld::RunTickGroup() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\engine\private\leveltick.cpp:783]
LogOutputDevice: Error: [Callstack] 0x00007ff926329a29 UE4Editor-Engine.dll!UWorld::Tick() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\engine\private\leveltick.cpp:1473]
LogOutputDevice: Error: [Callstack] 0x00007ff92441a583 UE4Editor-UnrealEd.dll!UEditorEngine::Tick() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\editor\unrealed\private\editorengine.cpp:1726]
LogOutputDevice: Error: [Callstack] 0x00007ff924cf4ca6 UE4Editor-UnrealEd.dll!UUnrealEdEngine::Tick() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\editor\unrealed\private\unrealedengine.cpp:403]
LogOutputDevice: Error: [Callstack] 0x00007ff6569061bc UE4Editor.exe!FEngineLoop::Tick() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\launch\private\launchengineloop.cpp:3699]
LogOutputDevice: Error: [Callstack] 0x00007ff656914d50 UE4Editor.exe!GuardedMain() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\launch\private\launch.cpp:174]
LogOutputDevice: Error: [Callstack] 0x00007ff656914dca UE4Editor.exe!GuardedMainWrapper() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\launch\private\windows\launchwindows.cpp:145]
LogOutputDevice: Error: [Callstack] 0x00007ff656923b4a UE4Editor.exe!WinMain() [d:\ue4source\ue4wvxgi\unrealengine\engine\source\runtime\launch\private\windows\launchwindows.cpp:276]
LogOutputDevice: Error: [Callstack] 0x00007ff6569257f2 UE4Editor.exe!__scrt_common_main_seh() [d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
LogOutputDevice: Error: [Callstack] 0x00007ff9af813034 KERNEL32.DLL!UnknownFunction ]
LogOutputDevice: Error: [Callstack] 0x00007ff9afe31471 ntdll.dll!UnknownFunction ]

[/SPOILER]

Hi,

I’ll fix it in the next update. It you have no time, please switch to “Input from components” option:

  • in the settings of VRIKBody component set “VR Input Option” to “Input from components”
  • if you had no motion controller components, add two motion controller components for left and right hands (Motion Source = “Left” and “Right”)
  • in BeginPlay event instead if VRIKBody::ActivateInput call VRIKBody::Initialize. Use references to camera and motion controller components as input parameters.

Hey, sorry for the late reply. It’s the default leg simulation. I’ll PM you a small video where you can see the issue.

Man, is this a frustrating plugin. 10 hours and it barely works and doesn’t look right at all. My main problem right now is that my feet are twisted at crazy angles? It doesn’t make any sense.

In general I really expected better documentation and demo projects that actually open and that are created in the latest versions Unreal, especially for the price.

Just wanted to follow up. I got it work using modify bone in the animbp and rotating the feet to bonespace. Seems to work alright now, minus some problems bending over and the hands not reaching the motion controller targets when I lift my arms up.

But please let me know if you have a permanent solution because using the modify bones ruins my walk animation I’d like to blend.
And during the leg movement the legs cross each other (with no animation blends).

Edit: Packaging does not work with the hands! The legs work but the hands are stuck at 0 at the body. Help!
Edit2: Got packaging to work by changing inputs on IKBody to receive components rather than directVR

I also just wanted to clarify my frustration.
It seems it should work easier out of the box with the epic skeleton and mannequin. (I shouldn’t be getting crazy feet issues)
It really should come with a default values for Oculus. Like a bool you can switch in IKBody. I spent hours trying to the values for the offset right and they still aren’t great.
Your 4.18 demo will not open (yes I ran rebuild from source).
Major problem with the stuck in t-pose that was solved by a simple fix (snapshot pin on pose snapshot). You should have that under a common problems tab as during my searching I noticed other people had that issue too).
It would be awesome to include hand animations (grab, open, etc) for the epic skeleton. It just makes sense with this IK system you would use the full skeleton rather than floating hands. And put it in a AnimBP that is wired up.
So many links are dead and tutorials hidden inside. Make the resources easy to find.
And it needs a delay node before initializing.

You’re the only game in town since IKinema is not updating to the newer UE versions (or at least taking forever). Not trying to be demanding, just frustrated a bit and Just trying to help out. :slight_smile: Please let me know if you have a fix for those feet and legs crossing. Using the Epic skeleton and mannequin.

@Landseer

Do you use 4.18? Some problems you mentioned was fixed recently, incuding feets, but I only can update the plugin in the Marketplace for the last three versions (i.e. 4.19-4.21). Can you send me your skeletal mesh (via private message) for investigation?

You’re right, I’m going to write FAQ, but delay it for a long time.

I’ll check it. Also, you can switch to “Input from components”. That should help for sure.

Thanks. I think I owe you a bit of an apology. I redid everything from scratch and a lot of the problems I was having was caused by a faulty UE4 default skeleton. Which is crazy because it is the default and was taken straight from an epic template. ???

Now I am working on copying the movements to a puppet character. (so there will be other characters copying your movement) Trying to use direct input from variables, but the puppet character is always stuck at around 0,0,0 and their spine rotated so they are just kind of hanging. Obviously doing something wrong, so I’ll keep trying. Maybe I need to convert the values to local space?

Just thought you might have a solution to this already.

Cheers.

I tested it now (this way: https://pp.userapi.com/c850728/v850728923/9304d/Y4IJbDtrt6g.jpg), everything seems fine. But if you want copy movements to the same skeleton, you could also use “Copy Pose From Mesh” animation node (without my plugin).