Skip to content
View TheButlah's full-sized avatar
🦀
Oxidize everything
🦀
Oxidize everything

Sponsoring

@probe-rs
@imsnif
@cart
@messense

Organizations

@SleightOfMindDev @CornellDataScience

Block or report TheButlah

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
TheButlah/README.md

Hi, I'm Ryan 👋

I'm a Rust developer, passionate about building realtime systems. I do a lot of open source VR development, especially for full-body motion tracking in games like VRChat.

I also like to dance and go bouldering.

If you would like to support my open source projects, you can fund me at ko-fi.

Current Projects

Click to expand

SlimeVR

SlimeVR is an open source organization for full-body motion capture in VR. It uses IMUs and a forward kinematics model to allow social VR users to have legs in games like VRChat. I am a core contributor in the org, and the primary author of several components of the ecosystem.

The four main things I work on under this umbrella, are located in the SlimeVR-Rust monorepo or in SolarXR.

I develop bare metal embedded rust on the ESP32C3 and NRF52840 microcontrollers, which takes IMU sensor data, does sensor fusion, and sends that data over WiFi or BLE. I use async/await and embassy for concurrency without the need for an RTOS1.

This firmware has been really fun to work on and is what I spend most of my time on right now.

If that sounds exciting to you, open a PR or support my work so I can buy more hardware :)

I also am the primary author of an OpenVR overlay for SlimeVR, which renders a simple 3D view in VR of the pose of the user. This has been critical in debugging SlimeVR, and allows power users to tweak their settings in real time.

I also created ovr_overlay, which allows rust code to access the C++ based OpenVR API. Prior to this work, only fairly out of date and unmaintained bindings to the C API existed. I used autocxx to easily write FFI for the C++ code.

I created an experimental skeletal model that can solve the user's pose. The goal is to be more general purpose than the current (trigger warning) Java based model that the official server uses, with several new features like arbitrary positional constraints, adjusting mounting calibration without a full reset, and supporting languages other than Java, via FFI.

Unfortuantely, a lot of the skeletal model is still feature incomplete. If you are interested in helping me build this, reach out to me on the SlimeVR discord.

I maintain and co-authored the SolarXR protocol, which is a Websocket and Flatbuffer based networking protocol that allows applications (like the GUI and overlay) to work with the SlimeVR server.

After we adopted the protocol, it allowed the team to break the gui code into its own app and adopt technologies like tauri, typescript, and react, with clearer separation of concerns, less code, and prettier UI/UX.

Tech I think is cool

Rust Neovim Bazel Buck2
WebAssembly Bevy WebGPU

Footnotes

  1. Real time operating system

Pinned Loading

  1. worldcoin/orb-software worldcoin/orb-software Public

    Software for the orb

    Rust 250 40

  2. NexusSocial/identity NexusSocial/identity Public

    Identity services for social vr

    Rust 7

  3. SlimeVR/SlimeVR-Rust SlimeVR/SlimeVR-Rust Public

    🦀 + SlimeVR = 💖

    Rust 70 26

  4. slimevr_pcb slimevr_pcb Public

    A collection of PCBs designed for SlimeVR full-body trackers

    Roff 16 4

  5. fatchord/WaveRNN fatchord/WaveRNN Public

    WaveRNN Vocoder + TTS

    Python 2.1k 698

  6. tomthecarrot/constellation tomthecarrot/constellation Public

    Spatio-temporal data model and logic system for 3D applications with real-time networked synchronization across devices.

    Rust 10 3