# VMC in UE5

## Introduction
- VMC protocol is an avatar motion communication protocol for virtual motion capture pioneered by VMC
- It's functionally using OSC communication protocol to send avatar pose transforms for VRM avatars
- Used by a wide range of VRM focused mocap/vtube solutions like TDPT, VSeeFace, MocapForAll, XR Animator, etc.
- This write-up covers a specific VMC implementation to drive VRM characters in UE5.
## Approaches
- There are 2 main approaches to accomplish this in UE5.
- VRM4U https://ruyo.github.io/VRM4U/
- A great open source VRM import plugin for UE5
- Has a bunch of features, and one being VMC blueprints for driving VRM characters using EPIC's OSC plugin
- https://docs.unrealengine.com/5.0/en-US/osc-plugin-overview-for-unreal-engine/
- VMC4UE https://github.com/HAL9HARUKU/VMC4UE
- An alternative VMC plugin for UE5, using UE-OSC plugin
- https://github.com/monsieurgustav/UE-OSC
## How to setup
- This write-up covers the VRM4U approach, it's a lot easier to implement than the VMC4UE plugin and uses the official EPIC OSC plugin.
- First, go to plugins in UE5 and enable OSC plugin
- 
- Go to VRM4U plugin and install the plugin following instructions
- Check out the VMC protocol map found in the VRM4U directory, usually in the "Latest" folder
- Once in the map, it's pretty straightforward
- All you need, is the VRMSimple skeletal mesh in your scene, then make sure the BP_VMCReceiver is also in the same scene
- Make sure your receiving port for VMC protocol is set to your VMC sender
- e.g. XR Animator is #35939

- Make sure the skeletal mesh is using the ABP_VroidVMC_Bone animation blueprint
- From there you're good to go, you can use the retarget functionality in VRM4U to runtime retarget to another imported VRM mesh using the VRM4U retarget anim BP
- If implementing this functionality in a new map, just make sure there's the VRoidSimple skeletal mesh in the scene with the BP_VMCReceiver and if the VMC receiver is setup proper, it'll send the data to the VRoidSimple in the scene.
- Here's an example of it working using XR Animator streaming to UE5.1.1
- https://twitter.com/i/status/1664713670797168644