ProxyMan!

Where to begin... I've always had an interest in character and live capture animation. Being able to work with motion capture is what I've always wanted to do. But, I learned animation in a software package that didn't work well with motion capture data. Although I was familiar with other software that could (e.g. MotionBuilder), I wanted to work with my native animation package, Cinema4D. So, I made the decision to turn my mocap knowledge towards building my own 'mocap studio' inside of Cinema4D.

When I first started tinkering with this idea, I built myself a simple polygon character mesh and an Xpresso setup to drive it. After I had built the proxy character mesh to play with, I loosely coined him ProxyMan.

But, I soon found the Xpresso rig not enough to work with. I needed more editing control. So I learned to build simple plugins in C++ using the Cinema4D SDK. I started with the demo plugins that came with the software, and learned to change interface element names, or run simple commands inside an execution call. Once I was able to do these and understood the basic coding and compiling process, I moved onto more advanced things like creating my own interface and custom object plugins.

Once I'd reached this point, I thought I'd try to move the process of adding the Xpresso rig into an automated one, by adding some simple commands into a dialog interface. Unfortunately, I don't have any historic data for the Xpresso rig anymore, but the image below is the first version of ProxyMan with a C++ interface. After setting your attributes, it would add the Xpresso rig into the scene for you. Pretty simple really.

The original ProxyMan Dialog v1.0

From memory, you could add a nurbs object, weight tags, morph tags and even the early versions of Cinema4D's Xref object. I don't recall what the "Produce single object" option did, it may have crushed the nurbs to a plain polygon object for higher resolution mesh control, but I don't remember now.

Since the first dialog, I looked into ways to make my own custom scene objects. I remember a forum member by the name of Cactus Dan (CD) who built his own character animation plugins (which he sold before his passing a few years a go). His plugins were quite powerful, and many people used them. CD's plugins were more advanced than what I was trying to make, but it was a useful learning curve to have someone like him provide help along the way in the plugin forums. I was hoping to one day integrate my mocap plugin with his character tools, but Dan died before I was able to approach him with this idea.

From here on, I was largely on my own, with the plugin community forum not too far away if I needed help. Once I could see how things worked in code, I started to move the dialog commands into a scene object plugin, which is where ProxyMan now sits today. It's been a great introductory journey and transition to programming, albeit with a steep learning curve, which has been frustrating at times, but rewarding.

ProxyMan is probably the first proper C++ plugin I ever wrote.

While I was moving ProxyMan into programming land, I also updated his mesh. You can see in the original dialog image above that he was a pretty bare bones character. Nothing has really changed, he just now looks a bit more.... ProxyManish? In any case, he now looks like this:

ProxyMan! Well, this is actually DemoMan, he's the in-built test character for the ProxyMan plugin

The ProxyMan character you see above is actually DemoMan. He's the demo mesh I built into the plugin, to use as a test-bed character to demo the workings of my code.

So, how does he work? Well, I needed some sort of way to import and interface with the motion capture data. I played around with a few ways of doing this, but the only way forward was to really build my own motion editing dialog. This meant I had to program my own interface down to the pixel level in some places (I kid you not).

The motion editor dialog is pretty simple - it's just like a video editing timeline interface. Start by adding some timeline layers, load any mocap animation as clips into his memory, drag and drop them onto your motion timeline layers, edit them with some simple commands and hey presto - you have a motion capture animated character!

ProxyMan Motion Editor dialog, with layers and basic clip handling commands

The motion editor interface is a plugin of it's own, so it can be docked inside your Cinema4D layout. Control over which character to edit is easily switched. You can even save the dialog into your layouts, that is, you could create your own Cinema4D layout with the dialog already embedded in the interface.

I should add here as well, that you can animate any character with this plugin. The DemoMan character is just a character mesh I built into the plugin to test with.

While MotionBuilder is the cream of the crop for working with this kind of data, my ProxyMan plugin is turning out to be a pretty useful piece of software, not to mention fun to play with. The setup is intuitive and easy to use, so much so that I can get the DemoMan character into a new scene and animating in well under a minute from scratch.

I'm hoping to have more examples of ProxyMan in action sometime in the near future. A history of posts on this project can be found below.

Project post history:

Rebuilding the Man (latest)