Art Spotlight: Doom’s Cacodemon

Back to overview

In Art Spotlight, we invite Sketchfab artists to talk about one of their designs. This work got retweets by Doom’s creator John Romero and the official Doom account on Twitter!

Hi everyone,

My name is Vermilion Wlad and I’m a character artist and the biggest Dota 2 Steam Workshop contributor.

I’ll be going over the process of creating my rendition of a Cacodemon from the 1993 classic: “DOOM”.

I love doing fan-art for personal projects as it allows me to not worry about the concepting and design phase and go straight for technical parts, modeling, sculpting and texturing. I prefer Sketchfab to post my finished projects, because it’s always more fun to view the models in 3D instead of traditional renders and Sketchfab supports PBR and animations now, while being lightweight and working in your browser and even on mobile, so it’s the easiest way to share models for me.

Loving DOOM as a kid, I thought it would be a fun thing to render some DOOM monsters in more detail and fully 3D environment, and my choice went to the iconic happy little fella called Cacodemon. He’s round, he’s got all the details, he’s got bright colour palette, he’s got it all!
Now some people may not know this (though by this year I imagine most people do), but our little guy was based on an Astral Dreadnought, a D&D monster, and you can definitely see the resemblance below.

While the Cacodemon sprite is obviously mirrored, I went to the Astral Dreadnought for it’s detailing, happy, but imposing look and asymmetry. With that I drafted my first blockout of the Astral Dreadnought, trying to incorporate subtle details into the face as much as possible.

I’m using a number of tools, including, but not limited to:

  • Zbrush, for high-poly sculpts;
  • 3D-Coat, for retopo, texture painting and occasional UV mapping;
  • 3dsmax, for all other low poly needs;
  • Photoshop, for texture editing;
  • Substance Designer, for material definition;
  • xNormal, for map baking.

Probably the most important part for me on this step was making sure all the teeth were as asymmetrical as possible, which the AD design really made possible. His teeth are sharper and thinner on the end and it doesn’t look like he’s ever hiding that perfect smile of his.

I’ve used Polygroups to do the tricky part like the “tubes” on his chin and I separated the teeth, the eye and the horns on to a separate sub-tools.

While having the Polygroups of roughly the same resolution, you can sculpt on both of them with your brushes and polish them seamlessly together with polish brushes. This is really useful for creating those hard to reach places and speeds up your workflow considerably, especially when combined with Dynamesh and Zremesher.

As you can see, the sculpt went through discernible stages, starting from the initial AD draft, going to the cacodemon form and then finalizing it with subtle details that will work best combined with dramatic lighting that Sketchfab can provide.

As a rule I work from the lowest resolution possible, slowly building up the design and resolution. The Dynamesh system and Zremesher make it such a smooth workflow, you rarely have to worry about the polyflow or whatnot and just focus on the designing/sculpting.

Now, after my sculpt is finished and I’m happy with it, just as our Cacodemon is happy with life, I’ll get on to polypainting the guy. Polypaint allows you to use all of the sculpting surface you created to quickly create a color map directly on your high poly model that you can bake down on your low-poly model! And with the help of some tools, Polypainting can become easy even with complex models.

Polypaint is a great tool even for color blockouts, but with the right tool it can become even better!

I’ve created a number of polypaint brushes that utilize Zbrush’s automasking system, which allows you to paint in crevices, high points or everything in the middle. Using the combination of Cavity, Layer and Sponge brushes you can take a full advantage of your sculpt and transfer all of the details into the polypaint effortlessly.

I start with the base tone that I just lay out flat. The we’ll go over with the Cavity and Sponge brushes to create the sense of volume and smooth everything out. Using the custom alpha to put in some subtle detailing like veins and covering it with Layer brush keeps the detailing but makes it subtle. And to finish up with slight Cavity and Sponge strokes of different color to bring the volume back out.

Now that our sculpt and polypaint are done, it’s time to bake down our maps. I’m using xNormal to get out vertex color, ambient occlusion, bent normal and normal maps. But why Bent Normals you might ask? We’re going to use them for our final color texture as a substitute for point light bakes.

For color texture, we’re going to start with a base grey color. Putting Ambient Occlusion bake with Multiply on top of it, it already might serve as a base to handpainting a texture, but we’ll push it a bit further.

Putting Red and Green channels from our Bent Normals map and baked low-poly Ambient Occlusion make it a far better texturing base, and since we already have our color baked, we’re going to put it on top of our base in Hard Light mode.

Now it’s just a matter of manual handpainted tweaks here and there to make certain parts pop, like the teeth, the eye and the forehead. It’ll all truly shine when put into the Sketchfab renderer though.

I’ve also used Substance designer to draft out the material setting for the Sketchfab PBR rendering. It might look like our Cacodemon is a little too happy from huffing paint, but in fact there’s an important difference between his blue frontal part that is just reflective all around. His eye and mouth share a similar “wet” feel to them and that’s why they should reflect the light completely and be as shiny as possible for that lively twinkle.

Horns and teeth are largely non-reflective, as they should be, with the exception where his horns connect to the body, this makes the material transition smoother and keeps the two together.

Now for the rest of his body I want a reflective, but subtle material that makes him feel both slimy and gross in that hellish kind of way, but at the same time not feeling like he’s sweating profusely.

With that, our little meatball of happiness is ready to be imported into Sketchfab, to get my favourite part, and that is Lighting Setup.

Sketchfab features a number of varying environments for your models and allows you to set up three-point light systems on top of that. At first I wanted to go for a hellish orange lighting and hard shadows, but in the end settled on “toned down” setup, with two camera-fixed back lights to highlight all the bumps and wrinkles our happy hellish abomination has and a frontal “Rembrandt” to get that eye shine.

Combined with the environment light, we get plenty of soft highlights all around and the frontal light brings out the slimy mouth and the eye.

With that done, Sketchfab also offers number of post-processing techniques that allow you to bring your model even closer to that look you wanted and imagined.


Thanks to Sketchfab, all of the effort we’ve put into this happy monstrosity is not just wasted on a couple of static shots, but fully rendered in 3D, which allows you to share it with peers and communities and just provides a nice place to showcase your models. More so, ArtStation allows for Sketchfab viewer integration, so you can put up your high-poly shots and a finished product all on the same page.

So I just want to say thanks to the Sketchfab team for this amazing tool that more artists should use.

Thanks Vermilion!

You can see more of Vermilion’s work here on Sketchfab and on his ArtStation. You can see him working on new Dota 2 assets on Twitch, and follow him on Facebook and Twitter.

About the author


Bart Veldhuizen

Head of Community at Sketchfab. 3D Scanning enthusiast and Blenderhead. Running BlenderNation in my spare time.

Leave a Reply

Your email address will not be published. Required fields are marked *

    Related articles