Joshua Williams gave an extremely detailed talk on his latest scene created with the help of UE4, Substance and ZBrush.
Joshua Williams gave an extremely detailed talk on his latest scene created with the help of UE4, Substance and ZBrush.
My name is Joshua Williams and I am a 3d Artist currently working at Kixeye in San Francisco. I started working in 3d in high school with AutoCAD and eventually discovered my passion for wanting to develop games after playing Legend of Zelda: Ocarina of time. I attended college at Missouri State University, where I majored in Computer Animation. I got my first gig as a game artist during my third year at University, and I have been working in the video game industry for around 10 years now.
Gathering Reference and Inspiration
The Lost Trail is a scene that I developed during Jeremy Huxley’s course through CGMA. For gathering reference, I went on some hiking trips around the Bay Area: Purisima Creek, Cataract Falls, the Dipsea trail on Mt. Tamalpais. The foliage on some of those trails is out of control! When gathering reference, I almost always get better results when I take my own photos and do my own research in the field. It gives me the opportunity to see and feel the environment with my own senses. I also have the opportunity to examine things up-close, take the exact photos I am looking for, and find interesting stories in the environment. I try to take photos from multiple angles focusing on how the light hits objects and as well as any interesting silhouettes that form in the environment. That being said, google image search is still a great resource to supplement your research. I’ll be honest: I spend quite a bit of time on this part of my projects. I like to have a solid idea of everything that it takes to fill up a scene as well as give my brain some time to think about compositional ideas.
After spending some time gathering the reference, I started sifting through the images and making decisions on a style guide. I focused on what assets would be made, my basic color palette, and inspiration from other artists or projects.
At this stage it was important for me to make a decision about the composition of my scene. Am I going to see this scene from a single view or multiple? Is it going to be a huge scene with multiple points of interest? For this particular project I wanted something that had a main beauty shot and focal point, but was still interesting when viewed from any angle. I blocked in the the main focal point first with a fixed camera in mind for the shot. This was important because all of the assets I add to the scene from here on will try to move the eye towards that main focal point. During this step, I just used a few objects, a terrain, and a simple light setup to try to get the idea out there. There was no need for me to build a bunch of assets yet – I was just trying to get a feel for the space and mood that I wanted to convey.
Rocks and Moss
Once my blockin was in a good place, it was time to start making some assets to fill out my scene. I wanted to get as much mileage as I could with just a couple of rocks. In order for that to work, I needed rocks that worked well from multiple angles in many situations. The biggest key here for me was to keep it pretty simple. Focusing on only the larger details here allows the rocks to be scaled in many different ways. The finer details will be added later with a tileable material and combined with the normal bakes in our shader. These are the only two rocks used in my entire scene:
The next step for my rocks was creating the tileable rock material in substance. When starting my substance materials I like to create the height of the largest forms and then work my way down to micro details. When creating tileable textures it is crucial to hide the tiling as much as possible – sometimes I do this by taking my result from the tile sampler and plugging it into a safe-transform node with an offset; and then blend them together with Max (Lighten). This helps base height feel fairly even across the whole material.
One technique I like to use to create cracks or crevices on rock shapes is taking the main heightmap forms and then: Blur HQ (radius around 3.7) > Highpass Grayscale (radius around 2.8) > Slope Blur the highpass grayscale using the Blur HQ as the slope > Slope Blur by itself with the mode on Max and the Samples/Intensity turned all the way up > Edge Detect with settings turned all the way down. This helps create cracks within the forms of the heightmap. From there I can slope blur/mask/etc before combining back with the heightmap. The amount of cracks can be adjusted with the first Blur HQ node in the chain.
For the Albedo and Roughness I typically grab masks from each part of the height chain where I’ve made significant changes. As a general rule for my substances, I try to have a roughness adjustment for every new layer I add into the Albedo – even if it’s very subtle. This builds up the material and adds interest at glancing angles. I try to study scanned data for reference – it’s incredibly valuable!
The rest of the graph is pretty straightforward – it’s large, but I didn’t use any techniques that haven’t been covered in countless articles already. Final Result:
Another material that I knew I would use heavily was moss – not just on my rocks, but the terrain and trees as well. This material was very challenging and also went through a couple of variations before I liked the result.
To start things off, I needed to create some interesting and convincing moss leaves. After several iterations, I finally found something that I was happy with. The petals were done by starting out with a waveform shape and warping it into petals. Then combined with a simple stem shape. From there I warped and positioned them with a Transform node to start from the center to be used in a tile sampler.
To drive my tile sampler, I created a basic height that consisted of splattering a paraboloid-type shape. I plugged that into a Normal node and used it as a Vector Map input on the Tile Sampler nodes. I also created four “strands” using Chris Hodgson’s vine technique to help me spawn my moss leaves in a natural way. The setup goes like this: Strands into a Tile Sampler > Take that output to a new Tile Sampler and plug it into the mask output with the moss leaves as the main inputs and turn the mask map threshold up slightly in the settings. This will make the leaves spawn on top of the areas where the strands are – creating a natural flow. I do this twice and then start blending them together with Height Blend nodes, then Safe Transforming with offsets and layering the Safe Transform below the previous height blend. I do this several times until the canvas is basically full.
Basic height used for the Vector Input:
Result from Height Blends:
Next, I blurred the result from the leaf height blends, blend it together with the overall height I created for the vector input, Slope Blur it, and then smooth it out with consecutive blurs at decreasing intensities.
The last step for height, I slightly Blur > Slope Blur > Blur the moss leaves height again and blend it on top with a linear dodge so my leaves have something to sit on. Then I blend a slightly blurred version of the leaves on top of that with another another linear dodge. I left the intensity on these at one and adjusted the intensity through a levels instead.
The moss Albedo and Roughness were created using the masks from the Height Blend nodes along with Gradient maps. It’s a bit convoluted, but the height masks are used to mask out the other layers of the moss while adding color to a specific layer. I also used a Randomized Mask node (created by Sergey Danchenko) before my Gradient Map nodes -it’s great for breaking up color before using Gradient Maps.
Using the Height Blend Masks:
Gradient Map inputs:
Next, I created the shader in Unreal. Because I wanted this material to be scalable and have the same texel density at all sizes, I needed to blend multiple normal maps together.To do this, I took my main rock material being tiled in world space and I blended in the normal and ambient occlusion maps from my sculpted rocks. Additionally, I blended in the Normal map from the tileable material again with the “Scale Aware” node. This node recognizes the UVs of the object and scales them up or down based on the scale of the object. This just adds another level of detail and breakup when the rocks are scaled to a very large size.
The moss part of the shader was blended in through vertex paint with the Height and the Ambient Occlusion multiplied together and inverted to create a mask. I also created a transition mask that allowed me to have the edges of the moss a slightly different value for the color. For the final touch I added a wetness blend to paint under the moss so there are damp edges on the transition to the rock.
A big part of the shader that helps sell the “mossy” look is the FuzzyShading node. When viewed from straight on, moss has depth to it that is hard to reproduce with just maps. It naturally looks a bit darker in the middle and the glancing angle loses that depth and becomes fuzzy and bright. FuzzyShading helps to reproduce this effect.
I created all of the foliage for this scene by sculpting and polypainting in Zbrush and then compositing the materials and creating additional maps in Substance Designer. For my plants I usually started with a sphere and then dynameshed it. From there I started to mold it into the leaf shapes using mostly the move topological tool, trim dynamic brush, the dam standard brush, and Orb’s flatten brush. After I had the leaf in a sculpted how I wanted, I began to put down basic colors with polypaint and started duplicating them around. From there, I used a combination of the new deform tools in Zbrush 4R8 and the move topological tool to push the sculpt around and create a natural flow. For the polypainting I like to use the spotlight tool to bring in my palette from the style guide. This let’s me lay down some base colors to start with that are all cohesive. I deviated from the palette on a few of them a little too much, but was able to correct them in the shader. I like to approach the details of my Polypainting with the masking options in Zbrush (peaks and valleys and cavities are my most used) and then use the grow, sharpen, shrink, inverse to find some interesting shapes to paint in. The last thing I add is a subtle artistic pass to add some flavor and interest to the color. Usually I paint on some kind of splatters, subtle damage, dirt, etc.
Zbrush BPR renders:
Compositing in designer was a pretty quick step. The biggest things I got from this was the roughness and subsurface maps. For the roughness breakup I used the the ColortoMask node to isolate colors from the Albedo map. Then I began layering the masks from those on top of an inverted Curvature Smooth node. To dilate the edges of my Albedo and Normal maps I used the Dilate Color node, created by Bradford Smith. It’s super useful – you can download it on Substance Share.
My foliage shader is pretty straightforward. I used two-sided foliage as the shading model. I added in fuzzy shading as well, for a little more stylistic control on the edges. One thing that I do often with foliage is turn up the normal intensity quite a bit. It helps to minimize the look of the textures being mapped to planes. I only adjust the red and green channels for this. I always leave the blue channel at one – or funky things happen!
The giant trees in my scene were a pretty big challenge. Since they are so huge, I decided to break them into a few different pieces and combine them together in Unreal. In the beginning, I tried building out every tree with pre-constructed branches in Unreal, but the trees quickly became way too high-res. I ended up creating three different sections that could be used to build the trees over the trunk asset. The trunk of the trees is just a basic model with a tileable substance material.
Filling out the scene
Once I felt I had enough assets to adequately fill out the scene I started populating and testing. I also began thinking about the lighting and adjusting the composition.
Up to this point, I still wasn’t tied to anything except my main composition. After placing around some foliage to test out my assets, I scraped it all and started over on the landscape and trees to help open up the space and add some breathing room to the scene.
Once I felt the composition start to take shape it was just a matter of populating the rest of the scene out and refining my landscape.When placing foliage and objects it’s good to think in layers of objects. Large objects in the middle with smaller details radiating out in a smooth transition down to the dirt and loam.
CGMA Training Thoughts
Overall, my experience with classes at CGMA has been amazing. One of the best things about our industry is that there is always a need to learn and get better at our craft. CGMA has some of the industry’s best teaching their techniques and the one-on-one feedback from industry professionals is priceless. The feeling of complacency is a dangerous one and no one is too good at something to stop learning and practicing – especially in a field that evolves as quickly as ours does.
Another great thing about CGMA’s courses is that they help you timebox your work. Although it is common for artists to practice new techniques and work on their own projects at home, they often never finish these projects because they get burned out or, when analyzing their work, they only see flaws. The time constraint on projects makes it more likely that the artist will finish before they reach that point.
I enjoyed doing this little write up and I hope some people can find it useful. Hopefully I can contribute to the community again in the future!