This is the second part of Jonathan Holmes' enormous 2-part tutorial on using Quixel Mixer in hard-surface texturing. You can read Part 1 here.
In case you missed it
You may find these articles interesting
Mixer Intermediate/Advanced Texturing
Now that the height mapping has been covered, let’s get into the details of how specific layer styling was created in Mixer. This is where the real fun begins for me as I enjoy marrying the procedural/scan-based workflow that Mixer offers for this type of texturing. I’ll start off by covering grunge and weathering. Aircraft exist in the world and aren’t really as clean as you might think. Some of them are downright filthy. That isn’t really something business jets like LearJets tend to be, but some moderate wear and tear will show the history of the model and demonstrate that you’re thinking about how this vehicle was used and where it’s been in its fictional history.
First and foremost, I’m using a combination of Mixer’s curvature for some layers and my height map details. This produces super sharp masking around the panel lines, bolts, and other details I’ve painted. This Height Map will drive a lot of the weathering in the project so I’ve created it with a specific set of layers and Photoshop commands.
The red area is a zoomed-in crop of the dorsal section of the fuselage. The grunge map was created as a Smart Object that contains a duplicate of the entire project’s height layers. Each layer was made visible and a soft outer glow was added to each one. CTRL+ALT+SHIFT+E created a duplicate layer with all layers flattened into it. This was then blurred by 6 pixels using Filter -> Gaussian Blur and overlaid with Screen, and the layer opacity set to 50%. This provided enough mask data for the map to be used as a grunge layer to build other effects from.
We’ll start the grunge process by covering grime that accumulates around paneling and access points. All aircraft feature this to some extent, so it’s a very critical part of getting the look and feel down.
This layer is less pronounced than some of the other grunge layers above it. This is by design. I want the grunge to be there and be visible, but not be overbearing or distracting from the design of the jet. It is a business jet, after all, not a commercial airliner or a warbird. In the Mixer project, you can open up the Weathering group and select Panel Grime to follow along.
Here we’ve got a full layer stack. The layers are all named so you should have a good idea of what’s going on here, but I’ll cover the specifics of each layer mask so you should have a good idea of what these layers are doing in conjunction with the vision I had for this layer and the effects it was intended to produce.
Starting from the bottom: Texture Map is the grunge map I mentioned at the beginning of this section. In Mixer’s viewport, it looks like this:
I’m not using Mixer’s baked curvature for this as I only want the weathering effects to be around areas that are touched frequently or are otherwise more susceptible to nicks, scratches, and other damage. Moving up to Noise, directly above Texture Map, you’ll see the first break-up I’m adding to change how the texture applies. It’s not seamless, but it doesn’t have to be since the seams are considered when painting. If anything this adds to the non-uniform appearance I want. This layer is set to multiply, breaking up the contribution of the grunge map to the overall effect.
Where the breakup really begins taking shape is in Noise Copy, Projection, and Clamp - all three clipped to the Noise layer. Each layer has its own settings which you can inspect, so I’ll skip over detailing the exact values. They produce the following effect:
It’s starting to take shape! But, as you can see, it’s too precise. Too mechanical, too obviously done in a CG texturing app. Let’s get some randomization in there and really push the look and feel.
Gradient Remap is set to bring out the white values of the mask mid-tones.
Where the magic really happens here is the folder called Distortion. In this are four different Noise maps. Each map is set to Distort blending. Distort produces a phenomenal effect when used with low levels of opacity and very low Distort Intensity values.
Now the paneling grime is starting to smear and become non-uniform. In essence, it’s looking more real.
Another Noise map called Breakup with a box projection and clamp randomizes where the paneling grime is distributed.
Adding the grunge map itself back over the top of the mask stack, set to Invert and clamped range values, also breaks up where the paneling grunge accumulates. The final Texture Map masks out the windows so that the grunge doesn’t accumulate on them. It is a business jet after all!
This masking technique using Distort blending on Noise maps emulates the grunge styling in the original DDO but is fully procedural and stand-alone without Photoshop required to produce the effect.
Let’s move on to another grunge mask: Leading Edge Grease. This is the stuff that tends to accumulate on the trailing edges of the aluminum anti-ice while the aircraft is traveling at upwards of 500 MPH (804 KM/H) during the cruise phase of a flight. Here’s how the mask looks:
And here’s how we’ll achieve the effect. This is entirely procedural. Believe it or not, the base mask I’m using is a Square Pattern.
To get it to become streaky grease pushed around by high-speed air, let’s break it down further.
The pattern is modified by a Projection mask. This mask is set to Box Projection (something I’ll avoid mentioning going forward as it’s the default type of projection I use for these projects) with a scale set to 10, and a blend type of Difference to provide additional breakup in the mask.
With this modifier, there is a section of the leading edge of the wing that has horizontal stripes. It can be safely ignored as this area will be masked off by Texture Maps higher up in the mask stack, as seen in the end result above. A Position Gradient is applied next, which is set to Subtract. This slightly reduces the intensity of the Pattern based on how I’ve set the Angle, Tilt, and Range of the Position Gradient, and totally removes it in the white portion of the gradient.
Clamp and Breakup are next. Breakup is a renamed Noise map, set to Perlin noise for a soft bubbly appearance. Clamp ensures that the Noise map stays within 0-1 values, so no HDR blending is happening.
Here is where the main effect comes into play that turns it from a collection of lines into a wispy grease effect. The Distort blend mode is similar to Photoshop filters like Glass or Ocean Ripple but can be layered in a variety of different ways. In this setup, I’m using three different Noise maps titled Distortion with the blend mode set to Distort. Each Distortion layer has the same Distort Intensity but each one is layered using different Seeds for the noise and varying levels of Opacity to control how it all blends together. The result takes straight lines and turns them into this:
You can really crank up the effect by using Gradient Remap to clamp the values down:
his would work wonderfully for leaky rust effects on a tank, for example. Since this is a jet and it isn’t in bad shape, just showing signs of regular flight, I’ve kept it intentionally toned down but still visible. As I’m writing this, I actually discovered that I forgot to duplicate this effect on the bottom of the wings, so let’s do that now.
By pressing CTRL+D, I’ve duplicated the layer and renamed it to Leading Edge Grease Below. I’ve also tweaked the Pattern so that it’s repeating 190 times in the Y-axis instead of the X-axis and set the Spacing X to 0 and Spacing Y to 0.497. The Box Projection was also rotated so that the additional breakup would align vertically with the grease lines rather than horizontally, which would create repeating + shapes. 30 seconds of adjustments helped the end result if even only a little!
Another subtle but noticeable effect is the warping of the surface of the jet. The aluminum skin is wrapped around a framework of spars and support structures. This produces warping in the reflectivity as light travels across it due to the slight imperfections that the spars and supports cause as the skin is secured flush.
An example of a 747 fuselage section:
Left: Without the Fuselage Warping, Right: With Fuselage Warping
As I mentioned, it’s a pretty subtle detail - but it’s one of those details that demonstrates you understand what it is that you’re working with, and aren’t just replicating what you see. You’re also replicating what you don’t see. There is always more to an object than how it appears initially. The underlying structure of how an object is formed should be part of your thought processes just like how anatomy is important for character artists.
There are three layers that procedurally generate this effect: Intra-Panel, Fuselage Warping, and Wing Warping. Fuselage and Wing Warping are the primary drivers of this effect. They produce an effect that mimics the anatomy of the aircraft by warping the reflectivity using height converted to normal data in Mixer. Let’s go over how this was developed.
The effect begins with a Pattern, which uses the following settings:
This provides a good base of values to work from. As the mask stack progresses upward, I’ll slowly but steadily narrow down the white portions of the Pattern into vaguely beam-shaped lines.
The next step is adding a Projection modifier. You’ve read along this far, so you know I’m adding a Box Projection to this.
The Projection modifier has been set so that the Pattern flows seamlessly over the fuselage of the jet and the empennage – otherwise known as the tail. Next up is the first of many Noise masks set to Distort blending to break up how this effect applies to the fuselage. This is an incredibly subtle effect that I could have skipped, but I wanted the extra range of value that Distort provides when layered with several different masks.
A Clamp modifier was added next.
Clamp was added so I could wash the details out for further masking, and reduce its overall intensity without destroying any of the previous masking work I’d created.
Now it’s becoming clear what my end result will be! You can see defined structural elements with slight value variances which will help gently break up the surface of the jet. Next up is Texture Map masks to eliminate this effect from all but the fuselage and empennage.
A Blur modifier set to Gaussian is added next to soften the values.
A Gradient Remap modifier is added to then further refine the effect and define where the final distortion effects will take place on the model.
Two Noise maps are added to break up the uniformity of the effect. Both are set to Simplex noise, with one layer having larger noise values and the other having smaller noise values. Both are modified by Projections which are set to Box Projection. They’re set to Overlay and Multiply, respectively, which completely breaks up the uniformity of the
And that’s all there is to it! The Wing Warping layer was an identical duplicate with the rotation of the Projection (above the base Pattern) shifted so that warping happened from front to back rather than sideways. Intra-Panel Warping is a slightly modified version of the Fuselage Warping effect to produce a little more waviness between structural beams at lower normal intensity.
This covers just about every aspect of the jet. What I didn’t cover was pretty simple – and can be inspected in the Mixer project that this tutorial accompanies.
Mixer Performance Improvements
Performance is a balancing act! With any software, the more layers you add, the slower it gets. This is especially true with 3D painting packages, like Mixer.
The cheapest layers to work with are solid layers, followed by layers using simple masks. The most expensive layers use Mixer’s built-in curvature map generator. This is updated every time layers change so that Mixer can pick up the normals you’ve added to a project. Once you’ve added more than a small handful of these layers (think two to four), a project with many layers will slow Mixer down severely – even with top-end hardware. This is the nature of things in digital arts, but you can, fortunately, work around it. I recommend keeping weathering and other curvature-based effects in their own layer groups. If you start seeing slowdowns, disable the visibility of the expensive-to-render layer groups as you work and enable them again once you’re done working.
This should also improve responsiveness for 3D painting in Mixer for any touch-ups or major paintwork you’re planning to do. If slowdowns keep occurring, Mixer has a few different settings you can play with that should help with rendering times for layer adjustments.
If your slowdowns are due to a weaker GPU, you can adjust the rendered resolution of the model’s textures using the Performance → Viewport Resolution option. Full will display 4096x4096 textures at full res, while 4096x4096 at Half res will display at 2048x2048. This would improve GPU rendering times for those of you with machines that are closer to the minimum Mixer requirements. You can also disable Tessellation, Anti-aliasing, Shadows, and Backfaces to improve overall rendering times for slower GPUs.
To improve overall texture adjustment speed, you can change Downsample Textures from Off to 1 → 5. Each number progressively downsamples textures making them blurrier and easier for the GPU to process during the sampling phase of a layer adjustment. Reducing Normal Matching from Full Resolution to a lower resolution will also improve adjustment speed as full-res normal maps aren’t being calculated at the same time the viewport is being updated.
Mixer is an incredibly powerful tool that’s still in its infancy in terms of its toolset and overall potential. I have no doubt that as it matures, the tool will become even easier and more useful than it already is. It’s my hope that this tutorial helped you learn a new workflow or a different way of approaching a subject you’re already familiar with. Best of luck with your work - and if you need any help, feel free to drop me a line on the official Quixel forum, the Quixel Art Community, or our Discord server.