Julian Elwood talked in detail about his picturesque realistic environment and master material blueprint specially created for the scene.
Hello. My name is Julian Elwood, and I’m an environment artist. These last few months after the Blizzard Student contest I’ve been focusing on rounding out my demo reel as much as possible. I’d been around the block on the stylized work and it was time to mix it up and balance my portfolio.
By the way, Julian previously talked to us about his Blizzard contest stylized entry. You check it out here:
Bridge of Spirits
For the Bridge of Spirits, I started off knowing that I wanted an environment I could get pretty lost in. Most of my previous work had just been a static camera shot and I wanted something that I could have the freedom with – to make or hint at a larger level beyond the scene.
When working on the level layout, just like creating any other kind of art, reference is the key! There are tons of individuals on Gumroad these days selling photo packs of thousands of detailed photos of environments so there is really no excuse not to be using the best reference. For this I used several people’s vacation photos from Cambodia, really taking the time to study how the ruins settled.
I started this pretty late during the term and with graduation ticking closer I didn’t have time to dig into grey-boxing and design a surrounding level. So I focused mainly on the bridge area and hinting that the player could possibly continue through the ruins. I spent most of my time on asset creation, layout and material editing in Unreal Engine. Now that I’m happy with the kit I would like to see how far I could stretch it in another larger game level. All in all, this was a 5 week project.
Combining Substance Designer & ZBrush
At the very beginning, I knew I wanted to spend as much time as possible in Substance Designer as I love to texture in node networks. So I began with creating a sculpted Cambodian style wall and some trim sheet textures. I created a few base flame designs by sculpting a quick mesh in ZBrush and using ‘grabdoc’ to extract a height map to use it in my Substance Designer Tile Samplers. Recently there appear many insane sculpted designs made purely in Designer, but I’m still not sold on the time efficiency compared to getting your complex height maps out of ZBrush and going from there.
Once I got the texture I was happy with, I put it into Maya and started modeling with the texture visible on the mesh, enhancing the information that was already present in the texture with bevels and extrusions on a pretty simple mesh. I used ZBrush and baked custom normal maps for several more important objects in the scene. The foliage was hand sculpted in ZBrush and painted in Polypaint. The large stone heads were sculpted in ZBrush.
To keep Texture resolution consistent through the larger objects I baked a normal map and an Ambient Occlusion map and blended a tiling texture with the custom baked maps. This way the main texture is the tiling texture that is still within consistent texture resolution, and the custom AO and Normal maps are just adding more definition to the large object.
I wanted to lean pretty heavily on vertex painting and I knew I would need a pretty good master material for it. As I started to import textures to the scene I would implement new features in the master material as needed. It started pretty basic but then grew into something I will definitely be using in future projects now. I recommend anyone interested in environment creation in UE4 to make their own master material and get a little familiar with blueprinting.
Right now my master material is a combination of several pretty basic functions:
- I wanted to keep vertex painting for all 4 material channels while being able to utilize some procedural masking techniques;
- I wanted to be able to blend tilling, vertex painted textures with a custom AO and Normal map;
- A global noise mask would be needed to automate the process of texture breakup and cut down on vertex painting by hand;
- I wanted the option to toggle one or all four blended materials to a world projected material vs UV based;
- For moss and similar textures, I wanted to be able to mask from a world projected direction, applying moss on the top or bottom of objects;
- I needed the ability to use a custom mask for each texture and have it blend using any secondary UV sets the model may contain, specifically for things like the stone heads, where I’m blending an AO on top of everything, but I’m also masking a darker stone into the mesh by using the same AO map;
- All the materials needed basic texture adjustment as well, things like just multiplying the base color, adjusting hue, and saturation, adjusting roughness value. This is key when bringing all the assets together and having them work toward a nice composition;
- All of these masks needed adjustment parameters as well, things like mask contrast and amount;
- Finally, I made a quick toggle for the blue vertex painting channel to flatten the normal, darken the base color, and max out roughness to get a quick water puddle effect.
Basic Geo from a low poly sculpt with a tiling texture applied. The head is too large in the scene to keep the texel density so we have to use tiling textures and blending.
This is an example of the basic parameters editable through UE4 master material creation.
First, we add the second rock texture to the material, masking it by an AO bake from secondary UV maps imported with the object.
This is the toggle switch for UV map blending.
Next, I’ll usually blend the same texture but with a higher lightness value, again masking by AO, but inverting the mask so that it is only on the raised areas.
Next is the moss texture applied with a world projection mask.
Finally, we are going to blend the baked normal map and AO map over the top of all of that, adding in secondary details. While these maps are going to be too large to fit into texel density, this will be covered up by all the tiling textures we are using. These masks could still be tweaked to get more definition out of the model, but you can see how helpful it is to layer these tilling materials.
All of these features are very easy on their own, but the challenge was in getting all the masks to blend together correctly when every feature was being used. A good master material was very useful for quickly getting the cave walls and other expansive areas of tiling textures to look less repetitive and get a lot of detail based off of world direction.
Blending the Materials
Every material in the scene is an instanced version of my master material. Using exposed parameters you can very easily adjust all of the textures and masking in real time. This led to pretty quick results when implementing new assets into the scene.
Here are some more examples from the master material graph. All very simple blueprinting, the key here is knowing your Photoshop blending modes, multiply, add, subtract, etc. and knowing how to blend all of these masks together. Unreal Engine documentation is fantastic for anyone just getting started with blueprinting to learn more, I recommend just googling whatever it is you want to do specifically in a blueprint. I’ve found almost everything on the UE4 message boards.
We start with a material function, with basic parameterization of multiply and saturation nodes. Then this function is instanced in the main Master Material.
This is the standard blend between two material functions. The Material function has been duplicated 4 times for the 4 vertex painting channels. You could theoretically blend more materials without vertex painting ability. All the masking is blended together then inserted into the ‘alpha’ channel on the MatLayerBlend_Standard.
This is the custom texture mask, used for masking by AO bakes and so on. UVs go to the texture channel switch shown previously.
This is the global noise mask, just breaks up masking with some random cloud noise.
Masks are blended together and merged with vertex painting on top, then put into material blend alpha. The graph is still pretty messy, and I apologize for that!
I think the key to getting an awesome level layout with fewer assets is asset quality and interaction between objects. Textures also carried this scene out, bringing a lot of detail into areas where the geometry wasn’t as complex. I did spend quite a bit of time on the level design, working with the kit.
Rather than micro detail think, for example, how rocks interact with other pieces of the environment. Any excuse you can find to have something leaning on something else will just add more interaction between the objects and give a weight to everything. I made maybe 3-4 unique pieces for the main building, the rest was reused assets from creating the bridge. If you can study the macro details in your reference and get a little creative with the kit, you can make a few assets go a long way.
The waterfall involves a few pretty quick methods using Unreal Engines Particle Emitter. Again, I studied the reference and just replicated what I saw in a few simple techniques.
First, for the main waterfall, I was dropping cards with a basic water texture. Water starts to fan out the longer it is falling, so I am using scale by life to scale both in X and Y. At the beginning of the water drop, the card is short and wide, but as it starts to fall it stretches in Y to look like it is transitioning from clinging to the stone surface to falling in a thinner stream. Then at the end of the lifespan, it starts to fan out the further the water drops, getting wider.
Also, little things like duplicating the stream of water and varying the color were important. This way the water looks like it’s bringing dirt down with it and fading to white as it gets more agitated.
For the base splashing, I also used cards with a water texture.
The most complex thing here is an alpha creep to make the water splash have a little more life in it. This just crunches back the alpha over the particles lifespan using Depth fade where needed so that the cards are less apparent.
Finally, adding a fog particle brings it all together. I’m dropping cards with a soft fog texture with the main water and emitting a larger amount of fog at the water impact.
Here is the graph showing the ‘alpha creep’ method.