ladder8
Writing & work

Project note

I just wanted 3D characters.

I learned a lot from building this tool and it's growing into something else. But long story short: the most valuable thing I got out of it was the MHR and MakeHuman body APIs I built to support other AI-driven tools.

Open Figurework
Figurework screenshot

Author’s note

Well, this is the first article on this new site, which I’m going to be using to document all of my fun experiments and tooling with AI.

There’s a lot coming. I’ve got some “extreme” Adobe Experience Manager things, and I’ve got video game tooling I’ve been working on, from open worlds to GTA-style experiments.

But I wanted this one out sooner rather than later, because I’ve got an immediate follow-up in the works. I wrote it on September 1st, and this stuff moves fast, so a lot has changed since. I haven’t actually touched the demo since July. I wanted it on the record so the follow-up has something to point back to.

ANYWAY…

It all kinda started with one idea.

This wasn’t my typical, “Hey, let’s do some Enterprising CMSing.” It was more about exploring something I don’t really get to explore in my day-to-day job.

When I was ten or twelve years old, my dream was to make video games for a living. There was one studio I specifically wanted to work at: Origin Systems. They made Ultima and Wing Commander, and I absolutely adored those games. To me they set the standard.

Then Electronic Arts absorbed them, and well before I was old enough to drive, Origin was gone. But that dream never really went away. It sat in the background while I started moving into my real career.

AI is what gave me a way back to it. I’ve been working on a few game projects in my off hours, and building tools to support them.

Figurework is one of those tools. Or at least it was. It recently found a new purpose, and if you’ve seen my LinkedIn profile lately, you’ll know what’s coming.

I needed characters

The goal was pretty simple: I needed characters for a video game. Originally I went down the rabbit hole of sprites, but the tedious hand animation required to do that properly annoyed me, and I’m an extremely busy person. So I shifted to 3D. Maybe I could sprite-ify them later.

I didn’t want to spend a bunch of time learning 3D the traditional way either. I know the big tools exist and I know they’re good. I wanted something that would jump-start the learning and get me closer to the part I actually cared about: sculpting and painting a character in one place, without bouncing between applications.

And I didn’t necessarily want realistic humans. I wanted stylized characters like the ones in Arcane or the Spider-Verse films. That painterly look was the thing I was chasing. I initially failed at that, as you’ll see.

So I started researching.

I didn’t want to start over

If you hop online and search for sculpting tools, you’re going to find a billion of them, including a few very big ones. I found a small open-source one called SculptGL. It ran in a browser, and it worked. Looking at the git history, the creators had moved on to bigger, badder things. The UI left a little to be desired for what I had in mind, but I could fix that. Not an issue.

The obvious engineering move would have been to rewrite it: new architecture, modern renderer, none of the inherited mess. That might have been fun, but it wouldn’t have gotten me any closer to making a character. I wanted a working tool, not another architecture project.

So Figurework kept the SculptGL engine and changed the workshop around it: body setup, character-focused controls, painting, projects, and export paths, with the direct sculpting that already worked left alone.

The Figurework launcher offering MHR Paint, MakeHuman, a blank sculpt, and saved projects
The current launcher. Two body foundations, a blank sculpt, and saved projects all enter the same workshop.

I did spend more time than I probably should have modernizing the older WebGL paths. Complex materials kept producing strange results on my hardware. At one point metallic surfaces just turned blue. The shaders compiled. Everything technically worked. The result was still blue metal.

Not good.

It came down to the older WebGL code, which didn’t handle metallic materials correctly. Until I reworked that path, anything metallic came out blue. That work mattered, but it was never the point. The point was having the body, the sculpting tools, and the painter close enough together that I could learn by making something and seeing where it broke.

Figurework in Sculpt mode with the MakeHuman topology shown as a wireframe and sculpt tools arranged at the right
Sculpt mode still runs on the inherited SculptGL engine, with the character-specific work built around it.

The bodies became useful somewhere else

Figurework can start from two human foundations: MHR and MakeHuman. I ended up configuring both behind a shared API with semantic controls, so another tool can ask for a starting body, adjust it, and pass it into a workflow without understanding every mesh and dial underneath. In practice that means asking for a MakeHuman body, setting a few semantic values like age or physique, and getting back a rigged GLB, without ever touching the 52 individual shape dials sitting under those controls.

That body API turned out to be more useful than Figurework itself. I don’t make characters this way anymore; I found a better method, and that’s what the follow-up is about. But other AI-driven tools are using those MHR and MakeHuman foundations, and Figurework is where they got figured out.

Figurework's body workshop with an athletic MakeHuman foundation, semantic controls, and the assistant receipt panel
The body workshop exposes broad controls over the MHR and MakeHuman foundations through the same interface.

Where it is now

Figurework is a working prototype. It can load those body foundations, apply semantic changes, sculpt, paint in layers, save projects, and export results. What it didn’t do was get me to the painterly characters I had in my head. My early results kept drifting toward generic or realistic humans.

Figurework in Paint mode with brush controls, a layer stack, and the shaped MakeHuman body
The painter works. The missing part is the stylized character I originally wanted to make with it.

I don’t think that makes the project useless. I got to explore a part of game development my career never took me near, I learned where the idea fell apart, and the most important thing that came out of it was an API that automates a lot of what I had been doing by hand.

What I learned

  1. Painting is hard. I had the tools. What I didn’t have was the talent to paint with them.
  2. MakeHuman and MHR from the Meta/Facebook Research folks aren’t the only parametric bodies out there. SMPL and SMPL-X from the Max Planck folks are the research standard, MB-Lab does something similar inside Blender, Daz has its Genesis figures, VRoid Studio covers the anime side, and Epic’s MetaHuman sits at the expensive end. Figurework includes MakeHuman and MHR.
  3. I’m tired of UIs. I ultimately want to enable users and reduce or eliminate the need for complex configuration. I’d rather have a button on the screen that says “Upload your art and gimme the thing,” and then if we want fine-tuning, we do that.
  4. I actually learned a ton about WebGL, and WebGL2 for that matter.
Explore the project

Figurework

Open Figurework