VR Expansion Plugin

You know…I normally put requests like that on my list of items to get to someday, but I had some time over lunch today and it sounded like fun, so I threw it in with the latest updates.

Thanks for the help. I just wanted to try it out on Quest. It ran like crap whenever I wasn’t facing a wall with nothing behind it, and it crashes the HMD after a few minutes, but it definitely works.

Build the lightning, I keep the lighting dynamic in the example project to reduce its memory footprint.

Also the mobile scalability settings are not set for quest.

its so weird having something you suggest end up exactly as you image. moreso when it gets added the same day. Thanks dude.

You can have a physical “body” beyond the arms, just be aware that it will be limited in capability.

I’ve been working on this myself, and Boneworks has quite a few limitations in it’s implementation, but I generally find it convincing enough that you wouldn’t need to compensate for those limitations unless it was something specific you wanted.

Boneworks’ collision capsules are less expansive than you think. There’s the chest, feet, hands and head, but the arms and legs aren’t completely connected by collision - they extend partially beyond the ankles and wrists, but nothing up until the shoulders and pelvis. You can verify this in-game, just take an item and try to shove it through various parts of your body. You can’t even receive damage on these locations, go ahead and shoot right at your bicep. This allows the body to have collision without that collision also impacting the collision and IK of the feet and hands.

The feet are also almost completely simulated. The only animations they have in place are cardinal directions and turn-in-place, no transitions for crouching or jumping, just manipulation of the pelvis as far as I can tell.

As far as an actual implementation, you can look at how ALV4 is doing foot IK (…tion-system-v1), and the simplest version of the hands is just a FABRIK node that affects the hands from the clavicle to the location of the motion controllers (potentially with an offset.) This can lead to some weirdness, however, and Boneworks has a more sophisticated solve for their IK to approximate an actual persons’ hand motions (for instance, flaring of elbows when hands are parallel to floor.) You’ll also see a lot of “snapping” if you don’t lerp, and there’s a chance your arms are longer than the models, which will result in your hands coming totally detached. You’ll also look pretty dumb in third person - take the third-person view in Pavlov, for example, where your arms clip into your body and generally don’t look very real.

If you’re looking for an example on a better hand IK solve, then you’re in a club with many members. There’s a paid package on the marketplace, but I’m not sure how good it actually is without being able to try and break it. Mordentral has a promising-looking implementation he showed off on his Youtube, but that’s a “when it’s ready” kind of thing, and I know he’s been busy with other work.

If the body IK isn’t blocking progress on your project right now, and you don’t feel like tackling it yourself, then I’d suggest perhaps working on other aspects until Mordentral can save us from ourselves.

Looks like I’m outta luck. The editor crashes as soon as I lower the engine scalability settings. If I go one by one, I can set everything to low except Effects, which crashes the editor if I try to go below High. Let me see what this is like, in any case…

[USER=“3764716”]Benjamin Paine[/USER] You can not use IK and Physic at the same time, it will look so weird. And 1 more thing, i suggest using CCDIK over Fabrik for arm IK. Ue4 only implement joint rotation limit in CCDIK.

That is not true, you can use the PhysicalAnimationComponent to drive simulated bones to try and match the final animation pose. The component is just very simplistic currently is the main issue.
I built the welded bone driver on top of it so that I could go in and extend it eventually.

Also CCDIK is a spherical joint limit, so its quality is still fairly low for good VR IK.

No, you can not. I had issue using it in my game. Normally, it worked well, but when the lowerarm collide with world object, the hand bone still go out to reach the final position. I did setup the constraint of the lowerarm to hand with lock position, but it not worked. About CCDIK, i did not tell anything about perfect solution there! And it not LOW there. I can tell that you did not test it. Combine it with the right pose, and the anim IK will looked good.

BTW, we are developing a physic system that player can interact with everything in VR. We begin with climbing system
This is not something like addWorldOffset, fully physic base climb. Also, player hand can push, pull the body.

Then you set your physical animation component up as world based and not local space. I have multiple users using it just fine, even though it is simplistic, the basic concept works, its just driving bones with constraints on kinematic actors.

Local or not, the position of the controller is the same as the calculation. But i found 1 thing that is very interesting. I think it the bug of animation layer! After i copy paste all the node to anim graph, it work just fine lol, and i still using world space!

Not sure which version of the VREP you’re trying to use, but I do see you have unreal engine 4.14 in use. In 4.24, SteamVR had their plugin updated to no longer require an external marketplace plugin for SteamVR input (see…put-for-unreal). If you’re using the latest VREP, I’m relatively certain this has been changed to use that.

Talking about how it handles the constraints, setting it to world based it constrains the bones to the world location, which means each acts independently somewhat. If you set it to parent/relative then the constraints follow their parent orientations instead and it works better.

By that, do you mean that you would only use the active swinging controller if only one ControllerMovement axis button is being pressed? I’m working on bringing the ArmSwinger locomotion into a different project, and I noticed that Get DPad Movement Facing is always using both controllers’ directions.

its only using both if both are set to that movement mode from what I remember.

Right, but the one game I’m aware of that uses ArmSwinger in a similar way ignores the other controller’s direction unless its ControllerMovement button is also being held. Ostensibly because the other controller is being used to hold a weapon.

In any case, I was just curious if that’s what you meant, since I’m messing with it right now.

@mordentral Can i use your code in the VR physic constraint component? ah, i suggest you should expose more function like setup the linear stiffness and damping of the linear soft constraint and the angular soft constraint, its pretty useless to use the hard constraint in real project! Anyway, thank you for your suggestion above.

Its just an expanded normal constraint, I don’t use it for gripping because I use a hand coded setup instead. You can already alter all of that on normal constraint components by reinitializing.

Hi all,
i am just starting with the VR expansion plugin and thus do not rly know my way around yet. So excuse me if my questions seem obvious. I am currently struggeling with how to set up hand poses for grabbed objects. So broadly my question is, how would i go about setting up hand poses for certain objects, e.g. the rifle while using index controllers? I like how the fingers automatically snap around an object like e.g. the grabbable cubes in the example scene. However i would like to set up predefined hand poses for weapons, so that the fingers correctly wrap around gun handle or the bolt of a bolt action rifle for example. So basically i would like to know the following:

  1. Is there some place in some BP where i would store predefined hand poses and how would i create the poses in the first place? Can the latter be done in the editor or do i need to do it an external software like Blender?
  2. How would i assign those poses to the objects (e.g. gun) which shall use those poses?
  3. How would i trigger setting those poses active?

Is there already some kind of tutorial (e.g. one of your Youtube vids) on this or other documentation covering this? I looked through the Wiki but couldn’t find anything. I would really appreciate some hints on where to look in the components / BPs / objects and how the overall flow of for hand posing should look like.

So cheers for any feedback!

Great work on what your doing here!

I’m working on a project with this plugin but I have a question. The template with the Steam VR Controller and Vive Pawn does it work with Oculus VR and the Touch Controllers? I’m currently trying to port over the template to the Oculus Quest.

(Edit: fixed this just had to turn off mobile HDR) Also after quite a few attempts to make the project mobile compatible. The quality isn’t changing. I’ve changed it to mobile and scalable 3D/2D but still hasn’t changed,