Replication Live Link Pose

Hi,
I am currently developing a multiplayer system in which each user is represented by an avatar. The avatars are animated by Live-Link and the Meta Quest. Unfortunately, the animation can only be seen locally, the other clients do not see the Live-Link animation. If I change the animation to a simple running movement, it is visible to everyone. Does anyone have an idea how to replicate the LiveLink data correctly so that it is visible to everyone?

livelink_anim
walk_anim

2 Likes

Any updates ? We have something working but it’s complicated and involves broadcasting the final transform data of ALL the bones to each of the other players. Not ideal!

1 Like

I got close!

It works but lags very hard. Maybe someone can take it from here, or make some sort of optimization

You need to buffer the data and send at a steady rate. e.g. 60Hz

Take a look at how CMC works. It doesn’t send moves every tick.

1 Like

I’ve tried every quarter second and it runs decent, but obviously horrible. Getting it to run at even 60hz for me seems impossible, but VRChat does it, so I know its doable.

What is CMC? I am trying to maybe thinking of making a custom C++ Live Link Node?

Is replicating LiveLink’s internal UDP directly a lighter load to replicate than a PoseSnapshot struct or nearly the same?

Really looking into this recently

Character Movement Component (CMC). It’s Epics movement for the First/Third person templates. It has built-in client-side prediction and server authority correction. Fully networked.

1 Like

@RealAero You need to interpolate the movement changes snapshot to snapshot. Right now, based on what I see in the vid you are snapping to the new pose.

Personally I’d store Last Snap and compare to the next. Use margin of error (%) to determine what has changed enough to be relevant. Only send relevant. You’ll need to break a snap down to per bone data, send relevant, then build a new snap, then interpto.

Oh and Yeah, C++ will make this a hella lot more performant.

2 Likes

This sounds like the magic needed. I can granularly understand the concepts thanks to my blueprint knowledge, however I am unsure where to begin with C++ to do this on my own.

I’m dabbling in C++ to figure it out, using ChatGPT a ton haha.
Any chance this might be something you can help me program? Maybe as a project? If not, maybe know someone who could?

VRIK, especially Meta’s FBT is an extremely solid social presence feature, and it makes a world of a difference in my VR platform/game. I would love to have it in multiplayer and I am sure the Quest dev community is looking for a solution as well

Thanks!

I can granularly understand the concepts thanks to my blueprint knowledge, however I am unsure where to begin with C++ to do this on my own.

Prototype it in BP. Then translate to C++. Faster process.

Any chance this might be something you can help me program? Maybe as a project?

I’m up to my eyeballs in my own project atm.

1 Like

Is there any update? I’m thinking about storing incoming Livelink Frame packet at 60Hz into a variable as a format of structure inside GameInstance class and replicate it to every client.