LogoLogo
API Status
  • 👋Welcome
  • 🌐What is Morpheus Platform?
    • Interoperability
  • ℹ️Help
    • 📗Glossary
    • 🆘Support
    • Firewall problems
    • EULA
  • CREATION
    • 🎮Unreal Development
      • ⚡Get Started
        • ⚒️Download the Editor
        • ⏫Upload Content
        • 🌎Creating your own map
        • 📝Morpheus Base Project
        • ❓Differences from Unreal
          • 🧍Character Configuration
        • 📡Morpheus Networking
          • Introduction to Morpheus Networking
          • Network Levels
          • Replicated Properties
          • RPCs
          • Morpheus Render Targets
          • Morpheus Array
          • Networking FAQ
          • Replicating Sublevels
      • 📚Features & Guides
        • 📒Example Plugin
          • Nameplates
          • In-game roles
          • Resizing
        • 🏊Actor Pooling
        • 🔊Audio
        • 🎭Avatars
          • Creating an Avatar
          • Attachments
            • MML Attachments
          • Custom Animation Variables
          • Importing an NFT collection
          • Capsules and Mesh Transforms
        • 🤖Bots
        • 🎙️Chat
          • Unreal Text Chat
        • 🎛️Control Panels
          • Control Panel Configuration
          • DJ booth mission control
          • Observer Controls
        • 🔉Crowd Audio
        • 🤼Crowd Rendering
          • Legacy Animated Crowd
            • Animated Crowd Console Commands
            • Attaching static meshes to crowd members
          • Crowd Materials
          • Performance Parameters
          • Live Config Settings
          • Crowd Animation
            • Crowd Anim Blueprint
              • User Guide - Crowd Anim Blueprint
              • Reference Guide - ABP Nodes
                • Animation Playback
                • States and State Machines
                • Variables
                • Transitions
                • Special
                • Blends
                • Additional Notes
        • 🍱Helpers & Extras
          • "Instanced Objects" in Blueprints
          • Objects with "world context"
          • Making DataAsset classes
          • Duplicate Objects
          • The Bootflow Subsystem
          • The "Wait For Condition" System
          • Advanced Graphics settings
          • Listening to inputs on UObjects
          • Morpheus UserID
          • World Services
          • M2Extras: Skins System
        • 🖥️Loading Screen
        • ⚡Live Config
          • Editing for a World
          • Editing Locally
          • Default Settings
          • Accessing via Blueprint
          • Adding New Settings
          • Overriding Defaults
          • Using Arrays
        • 🧊MML
        • 🕺Motion Capture
        • 📡Networking
        • 📢Notifications
        • Raycastable Crowd
        • 🌐Singletons
        • 📱Streaming & Multiplatform
          • GFN on mobile
        • 🖥️UI
          • "UI Mode"
        • 🗃️User Collections
          • Creating a New Object Definition
          • Accessing from Unreal
            • Creating Objects Definitions
            • Transfer Objects
            • User Collection Views
            • Receiving Updates
        • 📺Video Players
          • Embedded Video Player
          • Millicast video streaming
            • How to Setup an In-Game Video Stream
            • Picture-in-Picture mode
          • Streaming Video Player
            • How to Setup a URL Video Player
            • Picture-in-Picture mode
        • 🐞Visual Debugging
          • Inspector
        • 🪟Web UI
        • Online Services
          • KV Store Service
        • 💠Web Requests
          • Http Requests
            • Legacy HTTP Nodes
          • JSON Handling
          • WebSockets
          • Identity Validation
          • Allowed External URLs
          • Walkthrough Example
            • Example Counter Service
        • ✈️World Travel
          • World Travel in the editor
        • Avatar Physics Assets
        • Action Gameplay Helper Components
      • 🔑Workflows
        • ↗️Upgrade the Editor
          • 🖥️Version History
        • ⚙️Editing Project Settings
        • 📈Profiling
        • 🧺Marketplace Importing
        • 🛠️Extra Workflows
          • Setup Play-in-Editor
          • Setup Local Asset Validation
          • Adding Gameplay Tags
          • Validating Game Assets
          • Custom Connection Modes
          • Connect Editor to a World
          • Common Issues
      • 📚Useful Reading
        • ⭐Best Practices
    • 🌎Worlds
      • 📩Invite Players
        • Setting Role Groups
      • Persistent Worlds
      • Always on Worlds
    • 📅Running events
      • ✅Large scale events - Checklist
      • 👾Anti-Cheat (EAC)
      • 🎮Player Entry
        • 📱React Native
        • Steam
        • 💻Hardware Reqs
      • 🎥Broadcast
        • 📹OBS Integration
      • Failover
      • 🏁Capacity And Queue Management
  • ADMINS
    • 👪Access Control
      • Adding metaverse contributors
      • Creating a new project
    • 💲Pricing
      • Development Support
      • Included Usage & Overages
      • Cloud Streaming
      • Access Modes
      • War Room Support
      • Platform SLA
    • ⚙️Settings
      • 🗃️Projects
  • APIs and Tooling
    • 🖥️API Reference
      • Accounts
      • Events
      • Key/Value Store
      • Organizations
      • Realtime
      • User Profile
      • World Builder
      • Worlds
    • 💻Template Web App
      • 💢Moderation
    • Pixel Streaming
    • 🚀Launcher
  • Integrations
    • 📊Analytics
      • Sending events from web
      • 🎮Sending Events from Unreal
    • 💬Chat
      • 🎮Integrating Pubnub with your Unreal Project
      • Adding Moderation to Chat
Powered by GitBook
On this page
  • Motion Builder setup
  • Unreal setup

Was this helpful?

  1. CREATION
  2. Unreal Development
  3. Features & Guides

Motion Capture

M² supports the use of real-time motion capture for VIPs, using LiveLink. This requires specialist equipment and setup - speak to your named engineer if you wish to use motion capture.

Motion Builder setup

The simplest solution is to Epic's LiveLink plugin for Motion Builder. Set this up as per the Unreal documentation. In Motion Builder take note of the Provider Name, and the Subject Name of the source skeleton data you wish to use.

Unreal setup

In Unreal you use M2_MocapCoordinatorComponent and M2M_SkeletalMocapReplicatorComponent to receive mocap data, retarget it to the player avatar and replicate the animation to other players.

Add a M2_MocapCoordinatorComponent to the pawn actor, and add a M2M_SkeletalMocapReplicatorComponent to the Morpheus actor. When mocap is enabled for the pawn on the local client it will listen for incoming mocap data and replicate it out, while enabling it on remote clients will cause them to listen for replicated animations being received by the Replicator component and update the local pose.

Connecting to LiveLink data

To connect using the Message Bus protocol (which is used by the Motion Builder plugin) you should call M2_MocapCoordinatorComponent::InitMocapMessageBus on every client when enabling mocap for that player. BusName should be the Provider Name specified in Motion Builder - this parameter is only used for the mocap broadcaster, and is ignored on remote clients.

Motion Builder should already have been configured to send data to the IP of broadcaster's machine.

Once connected, the actual transform data is pulled from the stream by the ReceiverSkeletalMesh animation blueprint (see below).

Client setup

Broadcasters must use a Test build of the client. This is because UDP messaging is disabled in Shipping builds for security reasons.

The broadcaster must also pass the -messaging command line argument when booting the client. Speak to your designated engineer to set up a Role for your broadcaster that will include this additional argument when using the Launcher.

M2_MocapCoordinatorComponent setup

Mocap data is a series of frames of named joint transforms. The simplest case is when this data uses the default UE5 skeleton joint names and hierarchy, however the component can be configured to support other formats. Use these properties on the component:

  • ReceiverSkeletalMesh - This skeleton should match the joint hierarchy of the incoming mocap data. In unspecified it will use the pawn's skeleton. Incoming joint transforms will be applied directly to this skeleton by the MocapReceiverAnimClass.

  • MocapReceiverAnimClass - This ABP is applied to the ReceiveSkeletalMesh. It will usually contain a LiveLinkPose node to read the LiveLink transform data. If joint names differ between the source data and the receiver skeleton, a RetargetAsset can be specified on the node to do name remapping. See ABP_M2_Human_Mocap_UE5Skel for a simple example where no remapping is required.

  • RetargettingAnimClass - After receiving the data, the receiving skeleton is retargeted onto the pawn skeleton for display. Specify the ABP to use here. In the simple case where no retargeting is required, you can use ABP_M2_Human_MocapRetargeted_CopyOnly.

Debugging options

To assist with debugging issues with input data and retargeting, there are options in editor to show the various intermediate meshes and data. Set these options on the component:

  • Show Mocap Receiver Mesh - This will render the ReceiverSkeletalMesh after it has had the mocap data applied.

  • Show Retargeted Pose Mesh - This renders the mesh that will be replicated, after retargeting, on the broadcaster only.

  • Show Replication Driven Mesh - This renders the replicated mesh, on remote clients only. These meshes are used as Leader Pose Components for the actual avatar mesh.

  • Message Bus Debug Subject Name - Set this to the subject name to render a wireframe of the raw skeletal data for that subject.

  • Message Bus Debug Draw Transform - An additional transform to apply to the debug skeleton, to correct for any rotation differences or to move it off to one side, for example.

PreviousMMLNextNetworking

Last updated 2 months ago

Was this helpful?

🎮
📚
🕺