@Utsav singh, Yes. But a kind of lowpoly projection to have the best balance between poly count and alpha/quad overdraw.
Appreciate the shoutout!
your shader complexity is low because you used true polygon models instead of just a masked plane to prevent alpha overdraw?
Jakob Bergersen from Norway talked about the production of his amazing autumn landscape. It’s all built in UE4, with trees and foliage modelled in Maya and Photoshop. Maps are generated with Bitmap2Material. Interview recorded & edited by Kirill Tokarev.
Hi! My name is Jakob Bergersen and I’m currently studying Games and Entertainment Technology at Nord University, located in Steinkjer, Norway. So far I’ve only been involved with school related and personal projects. My personal projects usually involve making 3D environments, which is something I have become very passionate about over the last couple of years. My latest project is a natural environment, set in an area near a lake. During the project I learned a ton about making individual assets and building and lighting environments in Unreal Engine 4, and I’ll do my best to shed some light on the way I was making it.
I wanted to make a natural environment in Unreal Engine 4 with emphasis on atmosphere and mood. After having formed a rough idea of what I wanted to make, I started to gather photographs to use as reference throughout the entire project. Creating realistic environments without any references to work from can quickly become quite problematic, and so I’ve made a habit of always having good references available before I start making something. After setting up a simple landscape in Unreal Engine 4 and shaping it a bit, I decided to generate some quick textures for the ground, and then started creating key elements of the scene, which were the trees and the water.
After finding some suitable ground textures through pages like textures.com and episcura.com, I was able to generate maps such as albedo, roughness, normal, height and ambient occlusion using Allegorithmic’s Bitmap2Material. Like any program that generates textures based on a single photograph, the maps usually won’t be very accurate. However, with some tweaks they work well as a starting point and is a good way to quickly test what works and what doesn’t. I had initially planned to do more work on the ground textures, but ended up sticking with the generated maps due to time limitations, and I was more interested in the quality of the “big picture” rather than micro details. Ultimately, I found that leaves and other geometric ground coverage were at least as important as the textures in order to create a realistically looking ground surface.
The material for the ground was a pretty simple landscape material, blending between a moss material, a dead leaves material and a dirt material. Each material consist of an albedo map, a roughness map, a normal map and an ambient occlusion map. The moss and dead leaves also had a mask for height blending the transition from one material to another. For example, the mask for the dead leaves is a black and white texture, where white represent the actual leaves, and black represents the dirt underneath the leaves. So when the dead leaves material transitions to the moss material, it will look like there are some leaves on top of the moss right where the transition is occurring. I also used parallax mapping, which is called bump offset in Unreal Engine 4, to utilize height maps to create an illusion of depth.
All trees in the scene were made using Maya and Photoshop. First I high-poly model a few small branches and bake them down to texture sheets. These textures are then applied to a plane which I slice up so that each branch has its own “card”. I then use standard modeling techniques to build the trunk and limbs of the tree, along with larger and medium sized branches which I scatter the branch cards on. I usually make 5-10 different kinds of medium branches, which I can then choose from, duplicate, and place on the limbs of the tree. Heavily used tools include bend deformers and soft selection.
When dressing a scene with trees, I usually follow a rule of thumb that natural elements like trees tend to “clump” together, with larger trees in the center and gradually smaller trees toward the edges of a clump. This phenomenon can sometimes be very subtle, like in this case, but I believe it’s a good idea to place trees in a certain structure rather than just place them randomly all over the place. Other than that, I did my best to position the trees according to the reference images.
Using Unreal Engine 4
The scene uses a movable directional light and a movable skylight, with Distance Field Ambient Occlusion enabled. There’s also a post process volume which has a Color Lookup Table (LUT) applied, which enables me to adjust the colors of the entire scene to match the colors of a reference image. An Atmospheric Fog, where the only tweaked parameter is the sun multiplier (I used a value of 5), was used to light up the sky, and an Exponential Height Fog with tweaked density, opacity and start distance was used to create the ground fog. Enabling atmosphere sun light on the directional light can be a good idea, especially if there’s no skybox in the scene. I also use temperature to adjust the color of my directional light, which I find to be more accurate and easier than changing the actual color of the light. It was really a matter of tweaking the lights and post process effects to see what worked and what did not.
The water was something I really wanted to nail, as it was a pretty important element concerning the amount of screen space it covers. The geometry is just a tessellated plane (had to add some tessellation for screen space reflections to work properly with fog effects). The water shader has screen space reflections enabled, roughness of 0 and it utilizes a DepthFade node to make a smooth transition where the water connects with the ground. The ripple effect is created by panning a bumpy normal map in different directions.
The ground leaves, rocks and shrubs were also important elements, as they were placed all over and helped make the ground look more natural and less flat. Creating a wet look to the assets that were close to the shore was accomplished by using a height mask in the shader, allowing me to tone down the roughness based on the height position of the asset.
Even though I was focused on visual quality rather than frame rate, given more time to work on it I would definitely spend some more time on optimization. I would probably also add some kind of focal element and made the scene more structured. Even though I was mostly focused on the big picture of the scene, I would probably do some more texture work and made everything look better up close as well. Of course there are lots of other tweaks I would have done to make the trees look better, make the water and sky look more interesting and so on. In the end I’m happy with how it turned out, and I’m looking forward to making more environments in the future!