Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@
- [OSC](server/osc-information.md)
- [IMU Calibration](server/imu-calibration.md)
- [Alternative Wi-Fi Options](server/alternate-wifi.md)
- [Motion Capture (Mocap)](mocap/Mocap-index.md)
- [BioVision Motion Capture (BVH) recording to file](mocap/BVH-Recording-to-File.md)
- [OSC Live Recording](mocap/OSC-live-recording.md)
- [Applications and Variants](tools/README.md)
- [owoTrack App](tools/owoTrack.md)
- [SlimeVR Wrangler](tools/slimevr-wrangler.md)
Expand Down
105 changes: 105 additions & 0 deletions src/mocap/BVH-Recording-to-File.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# BioVision Motion Capture (BVH) Recording to File

BVH (BioVision Hierarchy) is a common file format used for storing humanoid motion capture data.

SlimeVR Server can record and export your tracking sessions as BVH files, making them compatible with common 3D animation software like Blender, Maya, MotionBuilder and game engines like Unity, and Unreal Engine.

## Table of Contents

- TOC
{:toc}

## Recording BVH in SlimeVR

1. **Prepare Your Setup**
- Calibrate your trackers
- Ensure all trackers are connected
- Verify tracking quality

2. **Open Recording Interface**
- In SlimeVR Server, go to **Home** tab
- Use the **Record BVH** button, on tracking preview.
![alt text](./assets/img/BVH/Record%20BVH.webp)
- Provide file name in opened dialog and press save.
- Once you finished recording, use **Save BVH recording** button to save.
![alt text](./assets/img/BVH/Save%20BVH%20recording.webp)

## Recording Best Practices

**Before Recording:**
- Perform a fresh calibration
- Ensure stable trackers connection and signal strength
- Clear the recording area

**During Recording:**
- Start with a neutral pose for 1-2 seconds
- Keep within tracking volume

## What Is BVH?

BVH is a text-based file format that contains:

- **Header**: Hierarchy and initial pose of a human skeleton
- **Data**: Motion Data

### BVH File Structure

A BVH file consists of two main sections:

#### 1. HIERARCHY Section

Defines the skeletal structure:

```
HIERARCHY
ROOT HIP
{
OFFSET 0.0 0.0 0.0
CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
JOINT WAIST
{
OFFSET 0.0 0.055808146 0.0
CHANNELS 3 Zrotation Xrotation Yrotation
JOINT CHEST
{
...
}
...
}
...
}
```

#### 2. MOTION Section

Contains animation data:

```
MOTION
Frames: 2331
Frame Time: 0.01
0.01291846 -0.6221236 0.004236113 -3.8948145 3.2102284...
...
```

## Importing BVH into Applications

### Blender

**Import Process:**

1. **File → Import → Motion Capture (.bvh)**
2. Select file
3. **Import** - skeleton appears in viewport

**References**
- Blender Manual: [BioVision Motion Capture (BVH)](https://docs.blender.org/manual/en/latest/addons/import_export/anim_bvh.html)

## Additional Resources

- SlimeVR Discord #motion-capture channel
- Wikipedia: [Biovision Hierarchy](https://en.wikipedia.org/wiki/Biovision_Hierarchy)

---

_Created by Shine Bright ✨ and [Depact](https://github.com/Depact)_
21 changes: 21 additions & 0 deletions src/mocap/Mocap-index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Motion Capture (Mocap)

This section covers SlimeVR's motion capture functionality.

## What You'll Find in this Section

### [BVH (BioVision Hierarchy) Recording to File](./BVH-Recording-to-File.md)

Record and export motion capture data in BVH format:
- Recording mocap sessions
- Exporting to BVH for animation software
- Understanding BVH file format

### [OSC (Open Sound Control)](./OSC-live-recording.md)

Learn how to configure and use OSC protocol for sending tracking data to applications:
- Setting up OSC output for Blender

---

_Created by Shine Bright ✨ and [Depact](https://github.com/Depact)_
86 changes: 86 additions & 0 deletions src/mocap/OSC-live-recording.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# OSC/VMC (Open Sound Control) Live Recording

## Table of Contents

- TOC
{:toc}

## Protocols Used

### OSC (Open Sound Control) Protocol
OSC (Open Sound Control) is a protocol for networking sound synthesizers, computers, and other multimedia devices for purposes such as musical performance or show control.

SlimeVR uses OSC as output protocol to send tracking data to various applications in real-time.

### VMC (Virtual Motion Capture) Protocol

Virtual Motion Capture Protocol (VMCProcotol, OSC/VMC Protocol) is avatar motion communication protocol for virtual motion capture.

SlimeVR uses VMC as motion tracking format in payload of OSC.

## Known Recording Approaches

### Recording Motion with Blender Through VMC4B Add-On

**Requirements**

- VMC4B add-on: https://booth.pm/ja/items/3432915
- Paid
- Supported blender versions: 2.93.5, 3.0.0, 3.2.2
- Blender 2.93.5, 3.0.0 or 3.2.2

#### Video Guide

<div class="video-container">
<iframe
width="100%"
height="auto"
src="https://www.youtube.com/embed/WuQsmxaALx8"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay muted; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen>
</iframe>
</div>

#### Text Guide

In SlimeVR Server:

- Open **Settings**
- Navigate to **OSC/VMC** tab
- Enable **OSC Tracker** output
![alt text](./assets/img/OSC/VMC-Enable.webp)
- Disable **Anchor at hips**
![alt text](./assets/img/OSC/VMC-Enable-Anchor-at-hips.webp)

In Blender:
- In Blender tools panel open VMC4B panel.
- Ensure VMC4B port is matching SlimeVR OSC/VMC "Port Out".
- Click **Connect** on VMC4B panel
![alt text](./assets/img/OSC/VMC4B-Click-Connect.webp)
- At first you will get rough looking pose in blender. It's okay
![alt text](./assets/img/OSC/VMC4B-Cursed-And-It's-okay.webp)

In SlimeVR Server:
- In **Home** tab do "Full Reset" and "Reset Mounting"
Head needs to tilt forward during "Reset Mounting"

In Blender:
- In Blender tools panel on VMC4B panel click "Start Recording"
![alt text](./assets/img/OSC/VMC4B-Start-Recording.webp)
- When you finished recording, you press "Stop Recording" in same panel

If you play recording, without disconnecting, it will bug out. This is purely visual glitch.

## Additional Resources

- SlimeVR Discord #motion-capture channel
- OSC Specification: [https://opensoundcontrol.stanford.edu/](https://opensoundcontrol.stanford.edu/)
- Open Sound Control wikipeia: [https://en.wikipedia.org/wiki/Open_Sound_Control](https://en.wikipedia.org/wiki/Open_Sound_Control)
- VMC Protocol specification: [https://protocol.vmc.info/english.html](https://protocol.vmc.info/english.html)
- VRChat Documentation: [OSC Overview](https://docs.vrchat.com/docs/osc-overview)

---

_Created by Shine Bright ✨, [ZRock35](https://github.com/ZRock35) and [Depact](https://github.com/Depact)_
Binary file added src/mocap/assets/img/BVH/Record BVH.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/mocap/assets/img/OSC/VMC-Enable.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.