This is the record of an ongoing attempt to build a kind of virtual reality remote control for VCV Rack, a free and open-source software modular synthesizer.
It involves recreating much of the VCV Rack user experience in 3d in Unreal Engine, and building a dedicated Rack module to handle introspection on the Rack side and facilitate communication for syncing state between Rack and Unreal.
Time for a demo of the current state of the project. We have a library, context menus, super wiggly cables, and all the other stuff we’ve seen up to this point. Here it is, all coming together. I have a hard time believing this is all my work. I am beside myself, and so proud of what I’ve managed to accomplish in the last year.
Went off on a little tangent today and figured out how to semi-reliably pull the “main” color from an SVG, to use as the color of the non-textured faces of the mesh the SVG is painted on (ie the back and sides of a module, as seen above). Here’s how it works, for the curious…
No more putting it off. Let’s get this thing running in VR. A partial to-do list: give some thought to performance, support a head-mounted display and motion controllers, adapt my existing controls to two independent hands, and…
One of the biggest questions I had coming into this project was how I’d get the graphics from Rack into Unreal. On the Rack side, by default, everything is vector graphics. That’s handled by loading SVG files or drawing graphics dynamically with nanovg. Unreal, however, does not natively support vector graphics…
Before complicating things with VR motion controllers, I want to make sure I have the basic logic behind user interaction in place using only a mouse pointer…
As I begin working on user interaction I quickly find that I have merely arranged the component parts in space, and nothing is actually attached to anything else. Initial attempts to rectify this situation lead to some amusing outtakes…
Now that I’m confident I’m getting data into Unreal in a consistent and performant way, I’m adding some simple geometry sketches to get started on user interaction…
For the next step in sending data from Rack to Unreal, we’re going to start getting real-time with light updates. First, I need to get the position and size data for the lights over to Unreal like I’m doing for everything else, and while I’m at it…
My custom module is now sitting in the virtual rack with the other modules, and—after a thousand debug statements and recompiles to figure out how and where to find the data—it is introspecting the state of the running Rack instance. It is gathering data about the other modules…
For as long as I can remember I have been fascinated by synthesizers and electronic music. I had seen modular synthesizers, and I must have intuited that their purpose was to give an artist lower-level control over the sounds they were making, but they mostly remained a mystery to me. Recently, at the yearly Bandcamp employees offsite, one of the special guests they flew out to talk with us was Suzanne Ciani…