VR Expansion Plugin

Hi , I updated the plugin from 4.17 to 4.19 and I suddently don´t see the meshes in my hand when I grab them. Do you have any idea why? I haven´t changed the code (the plugin works fine with 4.17). I call grip actor and pass the same parameters as before, and the grip actor is a static mesh actor (a sword)

Thanks!

I’ve got a question. I have an object which is being moved with “Interactive Collision with Physics”, and I want all clients to have it synchronized, so I’m using “Force server side movement” and I set “replicate movement” to true on the component involved.

It works but it looks very laggy on the client. How can I improve it? Should I send the position from the server with a Multicast and do some kind of interpolation on each client?

Likely have an unlinked node, you need to check in on the migration guides and make sure you make the adjustments and/or step through the blueprints and find out what unlinked.

Migration guides

Yeaaaaaaa… Non physics movement replication is not smoothed or predicted in engine at all. However that grip type is simulating so it falls under physics but the constraint is server sided only so the predictive part doesn’t work anymore since the constraint effects it (its a velocity prediction, nothing fancy). Perfectly sync’ed physics prediction and replication is a hefty topic and not something the engine supports natively.

is why the default movement mode is client side and creates the constraint on all clients so the movement is “sync’d” as well as possible without latency.

You can run interpolation and manually send the location yourself but when the object is colliding its not going to look good, if you ran a non physics grip than interpolation between most current known state and the one before it would be the best choice likely.

(I would delete my previous post, but it’s awaiting approval…)

I realized I got the wrong template, so I got the right one time, but I can’t build the project files. It gives me the error

“2>LogFileManager : error : MoveFile was unable to move ‘C:/Users/Destroyer/Downloads/-vrexppluginexample-f62d5b04063c/-vrexppluginexample-f62d5b04063c/Plugins/VRExpansionPlugin/VRExpansionPlugin/Intermediate/Build/Win64/UE4Editor/Inc/VRExpansionPlugin/VRBaseCharacterMovementComponent.gen.cpp.tmp’ to ‘C:/Users/Destroyer/Downloads/-vrexppluginexample-f62d5b04063c/-vrexppluginexample-f62d5b04063c/Plugins/VRExpansionPlugin/VRExpansionPlugin/Intermediate/Build/Win64/UE4Editor/Inc/VRExpansionPlugin/VRBaseCharacterMovementComponent.gen.cpp’, retrying in .5s…”

And it always fails. I tried giving it admin permissions, still failed.

I have checked out the info reaching that node and everything is coming correctly; the target (GripMotionController component) the actor to grip (Static mesh) and the world offset. I noticed that only happens with “Interactive Hybrid Collisions with Sweep”, is there anything special about mode that might make actors disappear?

If an actor collides with something with that grip then it will stop on it, but otherwise, no.

ok so i figured out that the character code in the template is overflowing with technical codes. if i where trying to did out the example codes for arm-swinger and climbing locamotion. mainly armswingger that i cant find. what parts should i be looking in. i think i can figure it out from there but i just cant find it in all code.

Thanks a lot for the help (and sorry for the late reply!). For now I think I’ll try to make it completely server authorative and just interpolate the position in the client, and see what happens from there.

The warnings will say what is wrong, there aren’t that many nodes that changed since 4.17 so it should be a fairly simple fix if you look at the migration guide.

Epic deprecated a few nodes too but those warnings are going to tell you what is missing.

You can post the log to me privately if you want and I should be able to glance through it quickly.

No no. The code works great. Im using 4.19 that updated from the snapshot releases. Everything is working.

Im just trying to find the code that i need to pick through and learn. I cant figure out what section of codes pretains to arm swinger. Or is there a post somewhere that explains some of the example codes for the template scene

Armswing is literally just handled in the main event graph, its a movement input off of GetRelativeVelocityForLocomotion. Uses the results of CalculateRelativeVelocities for the input velocity.

L/R Hand D Pad Press Based Movement Comment grouping contains it.

The running in place locomotion has a function dedicated to it because it merges multiple velocities and has a low/high ramp.

Cool So thats why i couldnt find it I was looking all through the running in place and i though it was mixxed with that, and nothing elsehad the label. Thats super helpful.

Im thinking a free running style control set where armswing is sprint. And the offhand dpad is a slow walk. mostly because its really hard to armswing and aim a gun, but realistically you only swing your arms when you run.

Hey , I’ve been working on integrating hand models into the template. I realized that the bulk of animation control takes place in the “Check and Handle Grip Actions” function in the Pawn, what I’m trying to figure out, is where the best place to hook into having an animation play anytime the user pulls the trigger. Currently the template only plays an animation (or attempt) when it’s near an intractable object, I’m just not sure where I should hook in at.

Secondly, I’ve been looking at the recently released “Hand Presence” demo that popped up on the forums. All of it’s grab-able object derive themselves from an actor component, which has a reference slot for calling a specific hand Animation Sequence. It doesn’t look like your plugin has a similar setup. What would be the best place to implement such a feature. I assume it should be added to the VRGrip Interface, but I haven’t figured out how to make such an edit yet.

Thanks again!

No, the grip interface is not a correct place to put it (not that you can edit it in BP anyway). It can be significantly more complex than just a single animation return (supporting per finger placements and the like), also the grip interface is attached to the held object, the data input is in the wrong direction for controlling the holding animation directly as things happen (it would be a single static animation or you would have to keep checking on it).

I would rather leave animation decisions up to the end user since there is a lot of creative freedom there and options. The only reason I copied over epics hand animations is because I was already transferring over their teleport system, I normally wouldn’t have added anything as I prefer for such things to be gameplay driven and the addition of extra data to control it is very simple.

Also obviously since I do not have freely available animations and hands for the template to use and it is originally intended as implementation examples for the plugin, not an all in one template.

You’ll have to consider how you want to mix controller driven animations and held object driven animations, can be as simple as calling a function on the owning controller to notify that you want a new animation (IE: OnGrip.HoldingController.SetHandAnimation(MyAnimation), to binding a dynamic event to throw new states back to the holding hand to mix into the animation graph.

Basically any generic system I incorporated for it into the plugin wouldn’t cover enough cases for me to feel it worth the addition.

Edit I’ll mention, if enough people pooled thoughts on just what would end up in a comprehensive animation feedback loop I would be willing to implement one.

We are having crash running in the VR Preview. Crash report doesn’t mention anything but after looking at the log file, is something related to GripMotionCOntrollerCompoment. Here is Log details:

[2018.03.23-21.15.41:526] 11]LogWindows: Error: Error reentered: Assertion failed: [File:D:\Build++UE4+Release-4.19+Compile\Sync\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp] [Line: 819]
Rendering thread exception:
Assertion failed: !IsUnreachable() [File:D:\Build++UE4+Release-4.19+Compile\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp] [Line: 1189]
GripMotionControllerComponent /Game/Maps/UEDPIE_0_MASTER.MASTER:PersistentLevel.Vive_PawnCharacter_C_0.Right Grip Motion Controller Function: ‘/Script/HeadMountedDisplay.MotionControllerComponent:OnMotionControllerUpdated’

0x00000000496A3FB8 KERNELBASE.dll!UnknownFunction ]
0x0000000005C57884 UE4Editor-ApplicationCore.dll!UnknownFunction ]
0x00000000DE1C6D9B UE4Editor-Core.dll!UnknownFunction ]
0x00000000DE101939 UE4Editor-Core.dll!UnknownFunction ]
0x00000000DDC08B08 UE4Editor-CoreUObject.dll!UnknownFunction ]
0x00000000BA8D34B2 UE4Editor-VRExpansionPlugin.dll!UGripMotionControllerComponent::GripPollControllerState() [d:\parth\unreal estprojects\vrfour19test\plugins\vrexpansionplugin\vrexpansionplugin\source\vrexpansionplugin\private\gripmotioncontrollercomponent.cpp:3700]
0x00000000BA8F56FC UE4Editor-VRExpansionPlugin.dll!UGripMotionControllerComponent::FGripViewExtension::PreRenderViewFamily_RenderThread() [d:\parth\unreal estprojects\vrfour19test\plugins\vrexpansionplugin\vrexpansionplugin\source\vrexpansionplugin\private\gripmotioncontrollercomponent.cpp:3749]
0x00000000D4AD6E88 UE4Editor-Renderer.dll!UnknownFunction ]
0x00000000D4AAA194 UE4Editor-Renderer.dll!UnknownFunction ]
0x00000000DDFDB723 UE4Editor-Core.dll!UnknownFunction ]
0x00000000DDFDBD4A UE4Editor-Core.dll!UnknownFunction ]
0x00000000085B3CC9 UE4Editor-RenderCore.dll!UnknownFunction ]
0x00000000085B4CF6 UE4Editor-RenderCore.dll!UnknownFunction ]
0x00000000DE3AA36C UE4Editor-Core.dll!UnknownFunction ]
0x00000000DE39F0D3 UE4Editor-Core.dll!UnknownFunction ]
0x0000000049911FE4 KERNEL32.DLL!UnknownFunction ]
0x0000000049BDEF91 ntdll.dll!UnknownFunction ]
0x0000000049BDEF91 ntdll.dll!UnknownFunction ]

[2018.03.23-21.15.41:526] 11]LogWindows: Windows GetLastError: The operation completed successfully. (0)
[2018.03.23-21.15.41:526] 11]LogThreadingWindows: Error: Runnable thread RenderThread 11 crashed.
[2018.03.23-21.15.41:526] 11]LogWindows: Error: === Critical error: ===
[2018.03.23-21.15.41:526] 11]LogWindows: Error:
[2018.03.23-21.15.41:526] 11]LogWindows: Error: Assertion failed: (GIsCriticalError || !NumMarks) [File:D:\Build++UE4+Release-4.19+Compile\Sync\Engine\Source\Runtime\Core\Public\Misc/MemStack.h] [Line: 89]
[2018.03.23-21.15.41:526] 11]LogWindows: Error:
[2018.03.23-21.15.41:526] 11]LogWindows: Error:
[2018.03.23-21.15.41:526] 11]LogWindows: Error:
[2018.03.23-21.15.41:526] 11]LogWindows: Error:
[2018.03.23-21.15.41:526] 11]LogWindows: Error: Crash in runnable thread RenderThread 11
[2018.03.23-21.15.41:530] 11]LogWindows: Error: HandleError re-entered.
[2018.03.23-21.15.41:544] 11]LogExit: Executing StaticShutdownAfterError
[2018.03.23-21.15.41:544] 11]LogWindows: FPlatformMisc::RequestExit(1)

I grab the 4.19 Plugin from the link on the forum page. Is there new update we are missing?

Thanks,

You grabbed the pre-compiled or the source?

I may have forgot to update the pre-compiled to a version that I fixed an Epic bug in that causes that assert (its not a crash). Its important if you are still getting it on a current source build though because it should be fixed, let me know which one.

I’ll package up 4.19 to pre-compiled again though since I think it is missing the fix.

The bug is reported to Epic but I fixed it locally until then.

Edit Uploaded a current build to the pre-packed binaries

ok so 1 harddrive death later. some backups, and fortunately some recovered files. im back at it. and im still fighting with the arm swinger mode. every time i try to separate it from the mode selector it stops working. so i tried ripping out just what it needs. and i cant figure it out for the life of me. so please take it easy on me. coding is not yet my strengh, its a weakness. how wrong did i do . and can you help me get working. ive already got climbing working. i cant get armswinger working.

Did you actually hook up the Relative Velocity to get calculated with the lowpass filter?

Also really using both hands it should use both velocities, not just one.

edit. i read your statment wrong. im looking at the code again.

im not sure how the velocity works. im pretty sure i got direction.

“Did you actually hook up the Relative Velocity to get calculated with the lowpass filter?”
i couldn’t figure that out. i left it the way it was when i found it and couldn’t make heads or tails of how it did its job.
im fairly new to coding. getting the forward vector made total sence. but i really don’t know what the rest of the code means.