VR Expansion Plugin

We are running into an issue when utilizing the Oculus Rift S. With the Oculus touch controllers there is a difference in the transforms of the motion controllers between the client and the server. The client notices no discrepancy but the server (and other clients) observes a significant delay in the transforms. is noticeable as any item that the client holds in their hand does not suffer from the delay which results in the item being offset from the hand. issue is not experienced when using the Samsung Odyssey + HMD. Although the Samsung Odyssey does suffer if even one client is using the Oculus Rift S. The Unreal Engine version is 4.22.

There is always going to be a transform delay, so that isn’t unexpected. However what IS strange is that you are saying that grips are not following 1:1 with the delayed hands, which doesn’t make any sense at all since the grips only move to track the hands on each connection.

Are you trying to use full body or arms? It may be mismanaged tick ordering on your animation graph.

Thanks, it’s work now

Hi everyone, i’m having an issue with gripping objects. I was following Raven’s videos to setup gripping, however i can’t grip any object. The have objects have grippable static mesh actor as base class, i also tried to migrate objects over from the example projects( like the potion) i can’t grip it either. The line trace breaks on the objects, from there i check the if it implements the vr grip interface. It’s true, so i get to the Grip Object by Interface function. I can’t debug it any further from BP, any help would be apprecieted, it’s driving me crazy haha :slight_smile:

If its failing on the actual grip node it should be printing to console why it failed. If its not failing on that then its likely gripped but is a physical grip and it doesn’t have valid collision or the drop distance is too small and it is automatically dropping right away.

Thank you for putting together VR plugin with multiplayer capability which resolved many problems we faced. It was working in single-player scenarios without any issue but in multiplayer we ran into a recurring issue that has been randomly causing a crash. The call stack for the crash is below along with the parameters we use for gripping as the issue appears to be caused by gripping/dropping. We are using the 4.23 plugin.


VRMULTIPLAYER.exe!UObjectBase::IsValidLowLevel(void) C++
VRMULTIPLAYER.exe!FBodyInstance::GetSimplePhysicalMaterial(struct FBodyInstance const *,struct TWeakObjectPtr<class UPrimitiveComponent,struct FWeakObjectPtr>,struct TWeakObjectPtr<class UBodySetup,struct FWeakObjectPtr>) C++
VRMULTIPLAYER.exe!ComputeMassProperties(struct FBodyInstance const *,class TArray<struct FPhysicsShapeHandle_PhysX,class TSizedDefaultAllocator<32> >,struct FTransform const &) C++
VRMULTIPLAYER.exe!<lambda_b4d83c49273524519a7aea54c54c84b3>::operator()(void) C++
VRMULTIPLAYER.exe!FPhysicsCommand_PhysX::ExecuteWrite(struct FPhysicsActorHandle_PhysX const &,class TFunctionRef<void >) C++
VRMULTIPLAYER.exe!FBodyInstance::UpdateMassProperties(void) C++
VRMULTIPLAYER.exe!<lambda_b4d83c49273524519a7aea54c54c84b3>::operator()(void) C++
VRMULTIPLAYER.exe!FPhysicsCommand_PhysX::ExecuteWrite(struct FPhysicsActorHandle_PhysX const &,class TFunctionRef<void >) C++
VRMULTIPLAYER.exe!FBodyInstance::UpdatePhysicsFilterData(void) C++
VRMULTIPLAYER.exe!FBodyInstance::PostShapeChange(void) C++
VRMULTIPLAYER.exe!<lambda_b4d83c49273524519a7aea54c54c84b3>::operator()(void) C++
VRMULTIPLAYER.exe!FPhysicsCommand_PhysX::ExecuteWrite(struct FPhysicsActorHandle_PhysX const &,class TFunctionRef<void >) C++
VRMULTIPLAYER.exe!FBodyInstance::Weld(struct FBodyInstance *,struct FTransform const &) C++
VRMULTIPLAYER.exe!FBodyInstance::SetInstanceSimulatePhysics(bool,bool) C++
VRMULTIPLAYER.exe!UGripMotionControllerComponent::SetUpPhysicsHandle(const FBPActorGripInformation & NewGrip, TArray<UVRGripScriptBase *,TSizedDefaultAllocator<32>> * GripScripts) Line 4324 C++
VRMULTIPLAYER.exe!UGripMotionControllerComponent::NotifyGrip(FBPActorGripInformation & NewGrip, bool bIsReInit) Line 2344 C++
VRMULTIPLAYER.exe!UGripMotionControllerComponent::HandleGripReplication(FBPActorGripInformation & Grip, FBPActorGripInformation * OldGripInfo) Line 344 C++
VRMULTIPLAYER.exe!UGripMotionControllerComponent::OnRep_GrippedObjects(TArray<FBPActorGripInformation,TSizedDefaultAllocator<32>> OriginalArrayState) Line 504 C++
VRMULTIPLAYER.exe!UGripMotionControllerComponent::execOnRep_GrippedObjects(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 134 C++

I’ll note that generally it would be better to be using the GripObjectByInterface node as you have more control with it on a per object basis.

Regardless, what engine version are you on? There was a crash with UpdateMassProperties that I fixed a couple of months ago, haven’t had any re-occuring reports of it since.

Finally i got it working by deleting the Intermediate and Saved folders :slight_smile: Something must have been messed up on my side.

Hi , thank you for your great work. Is the ArmIK ready for use and will be available for 4.23?

When/if it releases it won’t really be engine version based, aside from some animation node differences.

But its something that is going to take a lot of tweaking to get to where I want it to be and I am not exclusively working on it.

Nice, I think it would prove to be more valuable as a stand-alone. It’s highly desirable for me to implement ArmIK with the ultimate goal of having a responsive body. Even if it’s not where you want it, your videos show that it’s at a good stage and I would certainly pay for it now. I understand you have priorities so will wait in anticipation!

Thank for your reply,

We are using the 4.23 Engine version.

In the past couple of days, we think we managed to narrow down the cause of the issue. It seems caused due to gripped objects having welded physics bodies which can be detached and reattached (eg. Gun and Magazine). Removing the magazine and destroying it happens on the Server (Magazine and gun are replicated, actors). It seems like magazine detachment is not replicated as expected on the client. Since the client tries to update the mass properties of the gun with a gripping or dropping event and the magazine is still attached yet destroyed there is a crash. We suspect that the same issue can occur due to net culling also so we made relevant physics bodies always relevant. Is something you have encountered previously and do you have any thoughts on ?

The crash I was talking about was specifically that, I added a


if (!root->IsPendingKill())

flag above the mass properties update to work around it.

I don’t know how old your copy is but that should have resolved it, more so from the log you posted where its specifically that section that was throwing it and it shouldn’t get that far anymore on an up to date copy of 4.23 if the object is pending kill. (though I’ll note that from the log it also appears that you are gripping the object again for some reason even though you are destroying it).

If you have a reproduction on a up to date copy though I can look into resolving it.

Hi,

i’m using the oculus source version of ue4 4.24.1
when i put the plugin into the plugin folder it says it’s for 4.20.0 but i get to choose to try rebuild it and when i do the plugin shows up. Allthough after enabling it and restart the editor, it doesn’t show anything from your plugin even if i choose ”show engine content and show plugins content”.
Any idea what i can to do to make your plugin work?

best regards

Sounds like you downloaded the wrong version? Make sure you get the default / master branch copy.

Also source builds are all unique builds so the plugin has to specifically be compiled against it.

I had the same issue with the Oculus version of the engine. Copy the plugin to YourProject/Plugins folder, generate visual studio files and build your project from visual studio.

Hello Again!

I was wondering,

Is there a way to set the tracking origin to “Stage-mode” (Oculus Quest)? What I want to achieve is that the position of the player is always matching with the real-world room.
Currently I have to start the game from a fixed center point and when something goes wrong, I have to restart the game from center again so that it is matching.

I know there is a node called “Get-Pose” which gives you the position in the guardian, but the problem with that is that the center is based on where the quest was re-centered.
If I understand correctly, with stage mode it doesn’t matter where you reentered the quest, as it’ll always take the center of the play-area as zero-point.

Has anyone figured out (yet)?

Thanks in advance,

Marcel.

Hi,
I’m using great plugin, and learning something new everyday, but don’t know how to solve : I have a building with two floors and some furniture; I’ve created a Navmesh that occupies all the floor area , and when you’re in the first plan and point to somewhere you’re teletransported (using in teletransport mode), ok. If you point to the second floor (looking to the ceiling you’re teletransported,ok. But if you’re in the first plant and point to a place there’s a furniture (that has collision) the teletransport are icon is drawn in the ceiling and you’re send to point; the furniture has to have collision volume (chairs, tables that you can grab).
I have tested with independent Navmesh in every floor, but the problem is present; I can’t deactivate volume collision in objects because I want to hit with them and grab them…do you have any idea how to solve ? I could modify the system to go up to the second floor (with stairs or with a lift) , but because the floor has volume collision , it’s detected from down when pointing to a furniture and don’t want ; and the obviously answer: “don’t point to furniture“ it’s not valid, because the place is a school with lots of tables and chairs. Thanks

Either move the checking point downwards so that it projects to the correct nav mesh or run some clamping logic that prevents teleporting outside of a set range where it attempts to get the teleport location. You can also make things ignore the teleport trace.

Wow, what a fast response! sorry, but…how can I make things ignore the teleport trace? Do you mean with a clamping logic or is a specific tag or propriety that you can activate on some objects ? Thanks