Game Development

Blog 634: Textural Drama

We all know that I’ve never been any good at making textures. (Maybe I’ve never been any good at modelling and animation either, but let’s not get into that right now.) Making a game, however, requires lots of textures.

I’ve been surfing on two aging atlas textures for years, generic layouts I have ceaselessly wrapped around almost every single piece of geometry. While this approach makes it very easy to swap out varied colour schemes, I didn’t do that very much in Project Y4 and it turned out a bit monotonous in the end.

No, I need a new solution. One that will provide an endless variety of textures… without the need for any painting skill.


It all began towards the end of last summer when I discovered a handy tool called NeoTextureEdit. Through the power of mathemagic, this program creates images. Through careful application of various layers of mathemagic, those images can become ever more evocative of real world surfaces — the classic late-90s tiles I’ve been yearning for all my life.

The interesting thing about NeoTextureEdit is that it operates on a graph. A traditional image editor like Paint Shop Pro 7 allows you to edit a bitmap that only exists once; each pixel you change is changed forever, each process you applied lost in that moment (like tears in rain).

This sample originally included specular, height and normal maps too but I, eh, I deleted those... Because... yeh...
This sample originally included specular, height and normal maps too but I, eh, I deleted those… Because… yeh…

Instead of manually painting the image or parts of it here, mutating each pixel as you go, you create nodes and string them together to create an image generation process. Then, if you touch one node, it immediately recalculates its children — rather than having to take a base image and reapply a sequence of operations by hand, with all the bother and risk that entails, the computer does all the hard work.

The graph editor makes the strange mathemagical operations underlying the system immediately intuitive. You don’t have to know what the numbers mean, you can just slide them up and down and watch what happens to the output.

The included example graphs also gave a very quick and easy entry to the whole shebang. Who knew a couple of variations of Perlin noise and an Emboss could quickly give a pleasant rough stone tile? Who knew a bit of a Cellular mask into the mix could turn that rough stone into ragged cobbles on top of mud?

You’re right, this is not the triple-A world of normal mapping and infinite detail — but for me and my intentions, it’s just right.

Look, I made beige concrete bricks with a nice mucky industrial glass window!
Look, I made beige concrete bricks with a nice mucky industrial glass window!

Well, not quite. NeoTextureEdit is an old one-man project that is no longer in development and I soon discovered a few minor but annoying bugs. Traditionally I’d have a stab at fixing these things myself, but unfortunately it’s in Java. Also, holy shit the underlying mathemagic does some bonkers stuff with bitshifting that I just don’t understand.

On the other hand, NeoTextureEdit had at least led me to discover what I wanted from life. So I cast my eye around for other options, perhaps ones that would let me lay down a little wonga for stability and peace of mind…

Substance Designer

Substance Designer is namechecked by Unity, so it already smells like a natural choice.

It’s a graph editor just the same as NeoTextureEdit, more extensive in some ways but actually slightly more limited in others. The Perlin noise generation options, for example, don’t seem to be as flexible — NeoTextureEdit lets you fiddle with persistence and the power of each octave which led me to some very nice, nuanced results. To counter that, though, Substance has a whole load of other generators — different styles of noise entirely, polygonal patterns, static image repeaters, tonnes of stuff.

Weighing in at $149 for an “indie” (blurgh) license, that allows earning up to $100,000 a year before needing an upgrade, it’s eminently affordable. I don’t expect to rake in even close to $100,000 a year anyway.

The clean concrete blocks came easily enough, but there's something not quite right about the glass this time around. Keep going...
The clean concrete blocks came easily enough, but there’s something not quite right about the glass this time around. Keep going…

Obviously that’s more money than can be thrown away on a whim, so I activated the 30-day trial to test it in anger. I set myself a simple challenge: rebuild my atlas texture (parts) from scratch. Concrete, metal and stone — the foundations of all things from which other materials would surely flow (there are some fibrous generators so we’ll get to grass eventually).

I had already made the concrete in NeoTextureEdit so copying the graph over seemed easy enough… Except some of the nodes have different names and, like I said above, the Perlin noise generators don’t quite match. Grumble grumble. (Though, if I really knew what I was doing, I could probably rebuild NeoTextureEdit’s Perlin noise generator inside Substance.)

From left to right: original UT inspiration, homebaked Y2-Y4, the future.
From left to right: original UT inspiration, homebaked Y2-Y4, the future.

The interesting thing is perhaps that I’m starting to realise where I went wrong. People always said that my textures were too plain, that I should add scratches — but scratches were never the right answer. Scratches are too distinctive when you tile and repeat textures. No, the answer is patches of discolouration — smears that are discontinuous enough to break up the texture and add a bit of industrial grunge, but soft enough that they can survive repetition.

My new attempt at the metal door texture still needs a bit more work, a few more little details that will bring it to life, but it’s already streets ahead of the very basic middle attempt.

The Verdict

So after 30 days it does feel pretty good. There are some foibles — it crashes every so often without warning, the clicking and dragging of connections can be a bit flaky, the distinction between greyscale and coloured inputs seems a bit arbitrary — but overall, I can see the future from here, even if I need to do a bit more work on my textures.

It’s certainly more affordable than any of the other equivalent pieces of software I saw while looking around; most of those don’t offer an “indie” (heurgh) tier for small scale people. And after all, it is functional enough for me, which is the key.

3 thoughts on “Blog 634: Textural Drama”

  1. Java? Oh that’s not too.. “bitshifting” …nvm. That’s stuff I never feel like bothering with.


And you tell me...

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.