Robbie Walker, an Interior Artist at Rockstar, showed us how to create a majestic League of Legends-stylized gate using ZBrush, Substance Painter, 3ds Max, and Marmoset Toolbag.
In case you missed it
You may find these articles interesting
Hi everyone! My name is Robbie Walker, and I'm an Interior Artist at Rockstar North. I studied Computer Games at Glasgow Caledonian University, before going into the architecture industry for 4 years to work on visualizing new builds across the UK, and have now been at Rockstar for 3 years. Around a year ago I tried my hand at hand painting textures on personal projects. I'm really inspired by games like League of Legends and World of Warcraft, so wanted to see if I could create my own 3D art in a similar style. I started off small with assets that were pretty straightforward, which allowed me to concentrate on the texturing side of things, before upscaling to this most recent project.
Just before starting The Gate, I was following an Artstation challenge called Lightbox Expo: Box of Mystery, and I noticed that very talented Jenny Brozek was taking part. I love her art style and unique concepts, and was disappointed to find out there wouldn't be a 3D challenge to follow. I decided I would try and recreate one of her concepts anyway. I had previously made a couple of her concepts as part of a challenge, but this was much larger in scale and would require more detail, which was exciting for me.
I start out by taking the perspective concept and using it as ref directly in my max scene. I position a camera to look at the ref and model my blockout in front of it, constantly checking the side and back views to make sure things are in a sensible location, as well as matching up to the perspective view. Having the orthographic views Jenny created helped with figuring this stuff out. I try to keep in mind that this is a stylized project during the blockout stage. My main rule of thumb is that nothing should be a simple straight edge, everything should taper down or be at an angle, or get larger at the ends. This gives the whole thing a more fun feel and creates a more interesting silhouette. Getting these large primary shapes right early on makes your life a lot easier later in the process.
High Poly Detail
For the building, I break each area down into a manageable section and use symmetry on almost everything to save on time and texture sizes later. I'll use the inner portal frame area as an example of how I approached each high poly area.
I create a spline that follows the rough shape of the wall and roof, sweep a box along it, then subdivide the geometry into equally spaced segments. I separate equal-sized poly groups out from this and cap them off, effectively getting a curved row of blocks, then add in some supporting edges for a TurboSmooth. I take this geo into ZBrush and assign random polygroup ID's to it so that it is still contained in one SubTool, but I can now isolate individual blocks to work on within that SubTool. I find this a good way to keep larger scenes organized whilst still having the flexibility to isolate small areas. Using the trim dynamic and orb slash brushes, I bash in the edges of each block and add some cuts and cracks to make it look weathered. I export this back into max, and separate ZBrush imported geo onto a new layer to keep things organized.
Low Poly and Unwrapping
To get the low poly, I use the original geo I started with before going into ZBrush, delete the back faces that won't be seen, and unwrap it using the Unfold Strip from Loop tool. Make sure the UV islands are separated to match the smoothing groups. Because I’m planning to mirror most of the model, I offset the UV’s by 1 for the side that will be mirrored.
I name the low and high poly models the same names but with _low and _high after each, and export as OBJ's for baking in Substance Painter. I make sure that the normals, AO, and curvature are set to match name only so that objects don't interfere with one another and bake normals from one model to another. This gives me a cleaner bake and is easier to work with. Since I had a lot of separate models to bake, I split things up into separate UV sheets. Different materials are assigned to each object within the same UV sheet in 3ds Max so that I can isolate these areas in SP.
For some areas like the tree trunks inside the building, I decided to get the low poly straight from ZBrush by using ZRemesher on the whole object after sculpting the high poly. This saves a lot of time and gives me quick control on how low poly I want it to be. I then use the unwrap tool within ZBrush to get the UV's flattened out. This automated approach is a bit messier, but is quick and is fine for what I need.
I wanted the whole model to be hand-painted, including the light sources and shadows. To make things easier for myself, I use the baked lighting filter in Substance and tweak the settings to give me basic top-down lighting with very light shadows. I then switch over to viewing the model in the albedo channel and start texturing from there. I assign base colours to all areas, then begin layering up details. I set up big gradient colours showing the lighter or darker areas across the large surfaces, then I use a pure white or black fill layer, set this to overlay, and start masking it in on top of the base colour. This works with the colours underneath and means if those colours change, the layers on top will still match. I try to leave the paint strokes a bit messy to give it that hand-painted feel. Once I'm happy with this, I paint in the shadows using a black filler layer at around 50% opacity and try to eyeball something that makes sense. This can be tricky, especially when everything is mirrored.
Some areas like the wood barely need anything in terms of texture. Using the baked lighting filter at the start, overlaying the AO and curvature, and painting in some basic gradients gives me something I’m happy with.
Creating the Foliage
The above method covers how all of the solid objects were textured. The foliage however was a bit different. For the trees, I set up alpha cards flaring out from the tree trunk, and paint in the alpha to give the edges a bit of a pine tree feeling. I then use a single fill layer and paint in 3-4 colors of green for each 'branch'. This was a bit tedious - stick on some music and pretend you're enjoying yourself! For the grass, I followed a tutorial on YouTube on how to create League of Legends-style grass.
Now that my tiling grass is set up, I import the texture into Substance Painter and apply it to my platform, masking it only to the top side. I overlay some lighter and darker greens to vary up the texture. I use the same alpha brushes I've made from the tutorial to create a foliage UV sheet and create alpha cards to place around the platform. Since I've tinted some different green colours to the tiling grass on the platform, one color of the green alpha card won't match everywhere. I use vertex colours in 3ds Max to tint each card to match the color of the tiling grass underneath, which solves this problem. Using a lighter green for the base albedo gives me more control when tinting.
I want the portal to be animated, and appear to have a little bit of depth. To do this I create a basic portal texture in Photoshop which has a pretty strong vignette and a lot of wispy effects swirling to the center. I put this on a circular plane which is pushed back in the middle and animated to rotate. On top of this, I create a few alpha cards to make it look like some sort of magical light is being drawn into the portal. I twist the geo of this to match the portal effect and animate it to rotate at the same speed as the portal plane. A second animated portal plane with alpha is added on top but spinning a bit faster to give the whole thing a more three-dimensional effect.
I love to add the black outline at the end of the process, I think it really helps with the stylized feel of a project and makes it look a lot sharper. To do this, I duplicate all parts of the mesh that I want to have the outline in 3ds Max, add a push modifier, flip all the polygons, and put the model into See Through mode with alt x. The more you increase the push value, the thicker the black outline will be. Having the new model in See Through mode allows you to see roughly how this will look later. I attach all of this newly duplicated model together and name it 'outline', so it's easy to find in Marmoset Toolbag. I apply a simple black material to it, and that’s the outline finished. This is somewhat of an expensive way to achieve an outline effect, as it'll double the number of polys in your scene, but it's fairly straightforward to do, and for a standalone project like this, I think it's perfect.
I avoid using it on the foliage as it wouldn't work with the alpha cards, but also because I like the contrast of not having it on the softer/natural areas of the scene. It was a bit of an accident at first, but I like the effect.
For the final presentation of the model in Marmoset Toolbag, I have very little left to do. The lighting is already hand-painted in, the outline added in 3ds Max, the portal already animated, etc. I’ve set up my materials using Unlit mode, and turned off all reflections and fresnel effects. The grass material needs to have vertex color set as the albedo option, to allow for the custom greens I tinted the vertices in max to match the tinted grass underneath. The clouds and wispy effects are set to the add transparency mode rather than cutout or dither, to get a smoother alpha blend. I increase the values a little for the exposure, contrast, and saturation to make it pop a bit more.
Last of all is to add the turntable animation, which couldn't be easier in MT. Just click the turntable icon above the scene menu, make sure you're at the first frame of the timeline, then drag your models into the turntable icon in the scene explorer.
And that's it! Tweak the contrast and brightness settings a little bit to make it stand out, add a little sharpness and vignette and you're done!
I hope this helps anyone trying to do a stylized project in the future!
Robbie Walker, 3D Interiors Artist
Interview conducted by Arti Sergeev
You may find these articles interesting