Yuchun Huang shared an extensive breakdown of the Wheat Field project, shared insight on creating the wind effect.
In case you missed it
You may find these articles interesting
Hello, everyone. My name is Yuchun Huang. I'm a 3D Environment Artist and Technical Artist with a focus on real-time rendering. I currently work as an Environment Artist on Halo Infinite at 343 Industries. Before working in the industry I studied Game Development at Savannah College of Art and Design.
My first inspiration point is these two videos: The Third and The Seventh by Alex Roman and UE4 - Field by koooolalala. Since I really wanted to make the same mood and practice my vertex shader skill by WorldPositionOffest material, I decided to create this wheat field project. Here is the brief breakdown of my artwork No. 39 Wheat Field through Unreal Engine 4.
With the vague concept, I start looking for references. I want to separate the references into two parts. The first part is from the real-world and the second part shows the atmosphere.
The real-world reference is quite straightforward. What I want for the scene is the sunset time, so the wheat can show a beautiful golden color. For the other part, personally, I enjoy Simon Stålenhag’s and Jakub Rozalski’s concepts. The contrast between nature and an oversized sci-fi structure and the disturbing mood makes me intoxicated. I also searched many other game references including Ghost of Tsushima, The Last of Us Part 2, and other artists’ scenes or concepts to determine what kinds of objects I need for this project.
Scene, Models, Textures, and Materials
The first thing I consider is foliage models. For natural assets, I use Megascans that provide high-quality and photogrammetry foliage assets with Textures, UV, and correct vertex normal so you do not need to worry about them. Once the assets have been exported to the engine, it will create the master material and material instances like this image below.
It is a convenient way to start since it contains many useful nodes. For the base color channel, it has the color overlay and SpeedTree color variation which brings each asset a different color overlay which is really useful on foliage. The other channel also contains multiple multiply parameters or the Flat Normal node can be adjusted.
At the same time, I start to set dress the scene and try to find a satisfying layout. Based on all the references, I want to create a traditional wheat field and place a giant sci-fi facility in the background to make a contrasting scene. Since the theme is the farm, I select a huge silo as the main object in the scene. For the sky, I used to set the time to sunset but I realized the sci-fi facility needs more lighting, so I change the time to golden hour finally.
Wind WPO Effect
The goal of this project is to mimic the real wheat field wind via the world position offset shader, so I separate this part and describe it in detail.
Watching reference videos is the first and most important thing. By researching the movement of the wheat, I determine to use three layers of movement to simulate the wind blowing through the field. The first layer is the big rippling mask and it is also the mask for the other layers. The second layer is the foliage swing mask. The third layer is the individual swing noise.
Here is a structure of how I create a wind effect. I delete the wind section from Megascans represent and the first step is to rewrite the foliage height mask that defines the position and intensity of the plant swing.
I get the Z value of each foliage and divide it by its height, which is exposed, that can be easily controlled, clamp, and then square two to get the height mask.
The next step is to determine the angle of the wind and the range of the foliage swing.
From the above image, the lerp node’s alpha channel comes from the swing mask that makes the foliage’s bending angle change continuously.
Move forward, the wave mask controls the rippling shape and the amount of foliage bending down. I used a noise tiling texture which is a Blur Grunge noise I created from Substance Designer to simulate the rippling shape.
What’s more, panning the mask with the angle from above and multiplying it with the bending amount on the Z-axis can create the rippling effect.
Using the same method, I create the swing effect. It just needs to swap the mask to a Perlin mask and panning in the same direction with a different speed.
All the things from nature are different in appearance, so to prevent the completely unified movement between the close foliage, I want to create an individual swing noise layer that adds slightly horizontal and vertical movement. For individual and random signals for each foliage, I use object position values. Adding or subtracting the X and Y-axis values and taking the fractional portion of those values outputs 0-1 random number.
With a Cosine node, the random number add time can provide a wave shape which adds to Z-axis to make an individual vertical movement or add to bending down direction angle to make an individual horizontal movement.
Now the foliage movement is finished, but I still want to add another feature which is the trenches on the wheat field. It is possible to paint them via the foliage tool but I want to solve it in the material efficiently and easily.
With an input angle and multiplying height mask, a lerp can be created and the trench mask can connect to the alpha channel.
Here is the overview of the whole material and the base pass shader is 164 instructions. For the roughness, opacity, and AO map I pack them into one image’s RGB channel to save the memory.
Here is the video showing the influence of the parameters:
For the flying wheat piece, I placed multiple cascade particles in the scene. I download Sea Oats atlases from Megascans that includes all texture channels. I cut and modeled simple meshes in Maya based on the texture UV.
As for the particle system, the key module of the wheat particle is the orbit and mesh rotation that simulate the flying light wheat parts.
Lighting, Post Process, and Level Sequence
The thing I do before I adjust the lighting is checking the scene with different channels like Base Color, Roughness, Metallic, Lighting, Subsurface Color, etc. Fixing all bugs in the channels and making sure all of them are in balance can reduce the time spent on adjusting lighting and post-process effects.
For the lighting part, I want to keep it simple so I just add a directional light and sky-light in the scene. One significant light setting for the outdoor environment especially there are swinging foliages is the Dynamic Shadow Distance StationaryLight. Adjusting the value can make sure every foliage has moving shadows.
Here is my setting of Post Process Volume. My method is to use the color grading lookup table. Taking a screenshot and modifying it in Photoshop is easy to achieve the color I need.
For level sequence, one thing I add to the recording is the camera shaking that generates an unstable emotion. There is a camera shaking blueprint class present in the engine, which is really convenient. Here is the setting I use:
Creating materials is a lot of fun. The biggest challenge during the creating is to combine all the parameters and functions to make a balanced effect. Adding tons of notes is not hard, but having a good structure and balanced optimization is really hard. Analyzing the reference carefully and making an outline before adding notes to materials can produce efficient effects and save much debug time. Searching for different tutorials is another good habit. But trying to understand the principle behind the tutorials is the key to get advancement. For more Unreal material tutorials, I recommend Ben Cloward’s videos.
Special thanks to all the friends and artists who give me suggestions and help me to finish this project. Asking for feedback from others is always the most important thing artists should do and will never be wrong.