Since I’m solo-arting the indie game I’m working on, I have to find ways to optimize the work-flow. In the beginning I did a big degree of the work analog – with pen and paper. But in recent months I’ve set up a very procedurally. Basically keeping the style but letting the computer do the work for me. Here I’ll describe in layman’s terms some steps of how I go about it.
I should first describe what “procedural art” means. You can think of it as the artist not doing the actual artwork anymore, but describing rules to the computer that it then executes. This has some disadvantages: it takes longer, and needs a different skill set that you have to learn (e.g. knowing how to program is useful). The upside is that you can then just tell the program: Do some more variations. So the more assets you need, the more the initial effort will pay off.
A specific twist in my use-case is that I’m trying to emulate a hand-drawn line style for the textures. Let’s first take a look, of what a final object looks like:
Five years ago, there was not much in usable procedural tools out there. Now tools like Substance Painter became essentially industry standard. A lot of texturing-work you once had to do draw by hand in Photoshop – a tool that was made for … well, editing photos – you get now done near automatically. With Painter you can for example just take a 3D object, and drop a material like “wood” on it, and *boom*, your asset looks like made from wood.
Painter is in essence made for painting details onto the 3D object – so here is the final result I export and then use in our game engine.
For the actual process, the program first calculates various properties of the 3D mesh. These I can then use to create rules – like “where the object has little hidden corners … make it more dark, to simulate shadow”. Notice how this is a flexible process. Depending on the object, I could also say “put dust in these hidden corners”.
Here is the object with this calculated data projected on it – in this case it’s called Occlusion-Map.
Another such map shows me the elements of the object. It fills them with flat colors, so that with just a few clicks then I can define unique properties for an element.
Other examples are a map for showing the thickness of elements:
Or the location:
Specifically for my use-case, a map showing the edges is useful.
After all, my style has black lines that mimic how in comics elements are separated – which I try to make look like simple ink line style. Using the map you see above, I told the program to automatically draw a black line on all inner and outer edges. Here is the result.
It all still needs a more detailed artists input. In the following step, I go in and add by hand all details that the program by itself can not know. Like that locomotives have little lines and exhausts.
Using the earlier mentioned Position-Map, I then add variation to the surface.
I can then easily color it all and export the final result – in this case the flat map with all color details.
There are some more twists and turns to it all, for example Normal maps. These are nowadays used in all 3D engines, to show the shape of small details on a flat surface. But for sake of brevity I’ll skip some finer points.
With this result I can use another procedural program, called Substance-Designer. I can then process the export images and create new sizes and color variations with one click.
Another such program is Houdini. While I used the former programs for the coloring of the objects, Houdini can deform the 3D meshes themselves in a procedural manner.
And just as an example, here is a completely different object – but since I could just reuse the rules I’ve set up for the train, most of the result comes for free.