If you go for Unity and Biomes, as you wrote in your article, please do support Vegetation Studio Pro. Your work is awesome, can't wait to see it on the store.
Great breakdown of the process and optimization, thanks for sharing.
This article just not only provides great tools for level design. It's also useful vocabulary to express ideas with our team. https://xbeasts.blogspot.com/2018/12/Remove-Wall-Decals.html
Vladyslav Silchuk did a great breakdown of his Wild West Challenge entry made with ZBrush, 3ds Max, Substance Designer, and SpeedTree.
You can also out the previous Vladyslav’s article about his Witcher 3 scene made in UE4 here:
Changes in Life
Since the last time we’ve spoken, I finally got my Bachelor Degree in Computer Science in June and had an opportunity to work for about 1.5 years on the non-announced post-apocalyptic FPS, where I worked on props, textures, environments and some technical stuff. It was a great experience for me, and I learned a lot of new things. Some of the works on this project you can check here.
Start of the Project
Although I am not a big fan of the Wild West, I really wanted to take a part in the challenge and regularly revised concepts for 2D phase. I knew that I wouldn’t have much time, so I decided to work on a finished concept where I could concentrate on implementation. I came across a concept by Vincent Lebocey which I liked a lot. It was very similar to my own ideat that appeared when I first heard of the challenge theme. I like the atmosphere a lot, the composition is great, plus for a long time, I wanted to try myself in natural environments and landscapes.
The one thing that bothered me was that I had no experience in making characters, and I thought that without a cowboy and a horse the scene will be less “wild west”. So I decided to change the concept a little bit and add something else. After some research, I was really inspirited by the second concept by David Honz. The train was what I was looking for. I decided to try making an animation of the train coming from the distance. Unfortunately, I didn’t have time to do it before the deadline but finished later.
As the rules of the challenge allowed to mix several concepts, I quickly made a paintover in Photoshop and got the following result.
I was satisfied with the idea and started blocking the scene, trying to catch the right feeling and lighting and see how my idea would look in 3D.
I began the scene with the mountain in the background, as it is a significant part of the image. Since this is a fairly complex object, I decided not to do all the details by hand, and generate the basic shape inside of World Machine instead. To do this, I used the Layout Generator, set the shape of the mountain and added details using Erosion and Terrace.
After that, I exported Height map to ZBrush and got the following result.
The foundation was pretty solid with many interesting details, and it would take a lot of time to make everything manually, that’s why I continued working with the mountain as a simple sculpt until I got the result which I liked.
Rocks, in my opinion, are one of the hardest things to sculpt. Making a realistic rock that will have a good silhouette and level of detail is not a simple task and requires a lot of practice. Modeling organic forms like this is not about the details, it’s more about silhouette and shapes language. The Big-medium-small rule, popular in design, relates to organic forms a lot. If you want to dig deeper into it, check Rock Techniques by David Lesperance and the talk on BCon17 by Gleb Alexandrov.
Returning to the technique, I used a common workflow for rock surface: exported base shape from 3ds Max to ZBrush. There I mostly used TrimDynamic and TrimSmoothBorder with Square alpha and Falloff -100 for “rock” details. Also, I used TrimAdaptive, Move and Morph brushes.
TrimSmoothBorder is not a standard brush, but you can find it in LightBox – Brush – Trim. I find it an essential “rock” brush which can help you get some very nice sharp edge end details.
Vegetation is another complex part of the environment art and another thing where it is all about form, not the details. The best video I watched on this topic was this stream by Jeremy Estrellado (aka Dinusty):
My work with the trees began with a research of the flora in North America and reference collection. For me, it’s important to make not an abstract tree or bush, but a specific type to achieve realism in vegetation. In my case, I used Gambel oak (Quercus gambelii) and Rocky Mountain Maple (Acer glabrum) as references. These trees are native to western North America.
After selecting the types of trees, I found a photo of leaves in Google and made an atlas for SpeedTree 8. I used Cluster Template for creating a few variations of branches and exported it as textures (File – Export material). Next, I created a low poly version of branches using new mesh editor and set up the Pivot Point and Anchor Points. This is a new feature in SpeedTree 8.
The tree creation started with the trunk to which I added 3 levels of branches. For the large branches, I used Bifurcating Branches Generator, which is another cool feature in the new version of SpeedTree. Then I added two levels of leaves which are generated based on Anchor Point. Also, I’ve added some variation to the leaves with the help of Deformation options, such as Fold, Curl and Twist.
Then I set up LODs and Lightmaps and exported the result to the engine.
The shader for the branches is quite simple, nothing fancy. I only generated the mask for the branches from albedo. The reason for this is that one big problem which I noticed, was that the color of the bark on the branches didn’t match the bark of the trunk, and it was really annoying. So I decided to generate a mask, that divided the leaves and the branch for my SSC texture and multiplied it on albedo texture.
Natural Materials Production
All the natural materials for this project were made in Substance Designer. I made three variations of the ground for the Landscape, the basic texture of the rock, bark for the trees and gravel for the railway track.
I made several Material Layers which were blended into main Landscape Material.
For optimization, I decided to pack Ambient Occlusion in Blue channel and Height Map in Alpha of the Normal map. It allowed me to use only two textures per material instead of three. This is important when you have many material layers. Then, I reconstructed Blue channel back in the shader and converted normal from default [0;1] to [-1;1] range using ConstantBias with Bias -0.5 and Scale 2.
It is not a perfect way and you get some artifacts with clean materials, but it’s a pretty good way for natural materials like rocks and ground where you have a lot of noise and details and probably don’t notice the difference between the original and the reconstructed versions. Also, I used Normal and Color variation functions from Alireza Khajehali’s blogs on Polycount, and Distance-Based Tiling for textures from Ruslan Nazirov’s 80lv article.
For rocks, I used base tilling texture made some time ago in SD and blended it with different baked maps from mesh such as Normal map, Edge Damage mask, Curvature, Ambient Occlusion, and Color Variations Mask. Also, multiplying Object radius by Texture Coordinate allows the texture to automatically fit the scale of the object.
Again, I started with references.
I made high poly and low poly version of the track, sculpted wooden beams in ZBrush, baked and textured in Substance Painter, and made gravel tilling texture in Substance Designer with an opacity mask.
After that, I started the fun part and with the help of Blueprint made the railroad following the spline. This is made with a simple Blueprint code which calculates and creates a Spline Mesh Component during the loop until it reaches the end of the spline.
The train was one of the most interesting and challenging parts of the environment. I decided to make the “classical” wild west locomotive – Sierra “Movie Star” No.3. If you ever see a steam train in the movie, it is probably a Sierra. The main problem with modeling the train was that it took quite a long time to find the right reference and understand what part of the train doing what because I wanted to make the train as detailed and close to reality as possible.
It took me about 3 weeks to work on the train, from high poly to textures. It is a low poly game-ready model and has around 85k tris and 3 4k texture sets. It is a lot, but since the train is the star of the show, quality was more important to me. UV is done in RizomUV, packed in 3ds Max (30% auto pack, 70% by hand), baked in Substance Designer, and textured in Substance Painter. Material Instance feature in SP was very helpful, but I used it only for preview.
The animation of the train was made on the last day of the challenge in 3ds Max using key animation. It’s my first serious experience in animation, and I want to add motion blur on wheels and moving parts.
Everything I know about lighting at the moment is learned from Unreal 4 Lighting Academy, and if you still have not seen all the series yet, go do it! It is the best source of information about the lighting for games you can ever find.
The main work here was setting Directional Light, Skylight and HDRI, which I found here. The light setting began with the selection of an interesting angle of the sun that would match the concept and bring a good contrast between the lighted part and the shadows. After that, I began to experiment with HDRI and try different options until I found the one that I liked. HDRI lets you get a more realistic sky and get rid of the “standard unreal sky” feeling. Also in combination with “Sky Lighting Bounce” it gives a more interesting light in the shadows.
Also, I used a fake light and Light Channel feature to get some cool highlights on the train to make it more interesting.
The main idea of the project was to make a moving train scene. Unfortunately, I didn’t have enough time to make the animation to the deadline, so I started to work on it after the end of the challenge. To do this, I used spline tracks as a base and Timeline node that did all the magic. Since I don’t know blueprints very well, I spent quite a bit of time on researching and as a result got a simple graph that moves the train along the track.
Alsoб I fixed many small things in the scene that I didn’t like, but had no time to fix.
In the result, I made small gifs animation of the train movement using Sequencer.