Sculpting textures is fun, sculpting tileable textures not so much. Unless you use a software like Zbrush with its amazing 2.5D toolset for making tiles, you probably have already had a bad time trying to figure out the best way to tile something in your work. And that’s all about my last week here at the studio, after a loong time without having to touch tilling pipelines (working with unique texture maps can be addictive) I found myself in a situation that I haven’t seen for a long time: creating a full tileable texture. I’ve almost forgotten how did I used to do that back then, so I’m back to square one, I had to do some tests until find something good enough to not make me mad.
My somewhat “traditional” approach to tilling in mudbox (my tool of “choice”) was to:
A: Sculpt some bricks, then bake them as a height map to create a “stencil atlas”, then use a Tilling plane in mudbox to sculpt the final high poly version. The obvious problem with this is that we are somewhat limited in terms of what can be easily done in a short time, sculpting bricks using a displacement is not the nicest way to do that, and can also be a bit tricky if you have a certain pattern design to carry out in your mind.
B: Model a base mesh of the whole brick pattern, then open it in mudbox, detail it, export it, bake it and then hope that your baked maps won’t get any scary tilling seams that need to be fixed in Photoshop. (after all, fixing around 4 maps (normal, AO, Cavity, Curvature…) at the same time is not that cool)
C: Sculpt some bricks, then import back later to arrange the tile pattern in your 3D Software. This has proven to work very well for me… at least when Blender doesn’t crash because of the insane poly count on my low-budget
department store PC. So even using decimate to handle the sculpted models, for small stuff is OK, but for a 32 brick column, hmmm… I guess it won’t do.
Oh man, what a tough situation, the best part is when you look at guys working with zbrush, just setting up a 2.5D canvas that has a somewhat warp feature on the canvas boundaries to tile the meshes and can do all kind of crazy stuff like John Petrucci playing a Guitar solo (If you don’t know who John Petrucci is, you should leave this page).
Divagations apart, here comes the point of this post: Do we have another way of creating a great tiled texture?
If you never heard about Quixel’s nDo, it’s a plugin that transforms all the crap you put on Photoshop into a normal map (and some other stuff as well), it came bundled with Quixel’s suite, but I had never really given a shot at it, so in the middle of a brainstorm, I realized that I could use that to create a starting point for my normal maps, instead of baking it from a high poly model, this way, setting up the tilling would be WAY easier, also: faster.
So here’s the deal:
Let’s use a reference image as a guide for us to create the entire tileable texture/shader!
The basic concept is about the use of a reference picture to use as a base for the pattern shapes, and fine details, so we’ll be creating a mask (or something like a height map, whatever) using a photo source, then using that mask to build the rough shape of the normal map, then using that same photo to create the details for our normal, and finally build the shading network (albedo, glossiness, specular or metalness and etc) using the normal map information.
Preparing the Source Image
The first thing you’ll need to do is to take or find an image about the subject you want to make, then open it in Photoshop to straight it down and make it tileable. (make sure it has good enough quality & resolution for this)
Use the Warp and Free Transform tool to straight any curved lines that would otherwise mess up with our tilling.
Apply an offset at half the resolution of your image for each axis (shape your image to be in a power of 2: 512×512 / 2048×1024 / 128×4096 [hahaha.] etc…)
Use clone brush, spot healing and default transform tools to fix the seams.
With a tileable texture, now it’s way easier for us create our normal map 😀
Setting the mask for Normal Map
Now you’ll need to mask the areas where bricks are from the rest, just use the Select > Color Range, and Magic Wand/Quick Selection for that. Don’t expect it to be perfect.
To clean up the messy areas, use Brightness/Constrast and Levels to highlight the white and black colors, then continue using color range, inverting the selection and filling the opposite area until you remove the majority of artifacts.
To finish up with the unwanted remaining artifacts, go to the Filter Gallery and apply the Dry Brush filter, with that you can remove almost all the remaining noise, you’ll probably still need to fix some errors by hand, or repeat the previous steps one more time.
Now let’s just soften a bit the borders to get a nice base normal map from it, you can do this by using the Refine Edge (Alt+Ctrl+R), with the bricks mask (white) selected.
Making the Normal Map
Tweak it to your taste, when you’re done with that, we can create our normal map. I’ll be using Quixel’s nDo for this, but you can do that using Normal Map Filter from Nvidia or even Crazybump for this too.
nDo comes with very neat presets for generating a normal map, or you can just tweak it to your taste as well.
After done with the base normal map, lets “sculpt it” a bit to achieve a more organic shape, in order to do that, we’ll be creating a second normal map to blend some variation above the base. I did that making a second normal map that go inwards, and then blending the two together using a mask to control the variation.
Adding Angle Variation
Now we can go further by adding some angle variation to it, this way all the bricks will not point exactly to the same direction, helping to break the flat shading. To do that, we are going to paint some normal map information on top of the normal map, you can use a Normal Map sphere to sample the color information, here are the steps I usually take for that:
- Mask all the bricks using our brick mask as a source (use color range to select all the white spots)
- Sample some random colors from a Normal map sphere then bucket fill/paint above the normal map bricks
- Lower its opacity and set it to overlay
Some tips: You can use the pressure of a tablet to control the intensity and variation of the angles, and just use the pure normal map RGB colors (Up 127,255,127/Down 127,0,127/Left 255,127,127/ Right 0,127,127), and also try to vary the angles to achieve interesting reflections and break tile repetition a bit more.
Adding Fine Details
The last step here is to add some fine details using our source photo as a source to bake a detail normal map, you can do that either in nDo as Crazybump, etc…
Convert the image to normal map, then tweak the settings to show just the small details, you must take all the larger shapes out.
To mix it to the other normal map without messing with the normal information, I duplicate the normal map and go to the blue channel of the duplicated one, then fill it with a 50% gray, that way you’ll preserve all the previous vector information, then just blend this layer using overlay, go to the other copy, fill the red and green channels with pure white, and set that layer to multiply.
Yay, done! Now we just need to create our albedo/diffuse and remaining textures, you can do that in Substance Designer, (you can even create everything including the normal map straight in substance, btw), in this case I used the legacy dDo for this, it’s really cool the way it works, in conjunction I usually tend to use Knald to bake the main maps (from a normal map), when dealing with this kind of workflow, otherwise I would use xNormal to bake everything from a high poly model.
Setting up the Other Textures
In dDo you start setting up your material properties, then add some grunge, dirt and so on, all the maps are updated at the same time, so it’s way easier to come with a final texture very fast. You can learn more about dDo and how to use it in the official training videos from Quixel, here:
If you are using the Legacy version like me (for dDo), then we have this:
A tip to improve your diffuse map:
You can use your source photo to aid in the texturing, to add a bit more detail to the generated map, what I sometimes do is to use the “Blend If” function of the Layer Style in Photoshop, then you can add small bits of the original texture to your generated one, creating interesting shapes and fine details, just try it, it can lead to pleasing results (but just sometimes, cough cough).
Now lets talk a bit about it, before I started to work in the texture, I went out to shoot some references, this is crucial to understand the subject you’ll picture. I took some pictures of bricks near the studio, and I also observed how light reacts to the surface, this helped me tremendously in the shading process, If I had a good enough camera, I’d even try to shoot my own source pictures to use as a base, this way you can optimize the result to what you are looking for, so take that in consideration next time you want to make a texture.
With all maps done, now just plug it on the engine of your choice and build your shader with your fresh new seamless textures!