Environment artist Swayam Shah showed how he used his snow shader to craft an amazing forest in Unreal Engine 4.
Hi, my name is Swayam Shah. I was born and raised in India. I am currently a Student at Asian Institute of Gaming and Animation in Bangalore, India finishing my Diploma in Game Art. I look forward to becoming a 3D Environment Artist and push my way over to Technical Art. I am currently looking for internships and full time job after May.
At first, I never knew about the gaming industry and it was a friend of mine who introduced me to gaming. I found it very fascinating that we could make a living by making cool art and make games. So I decided to start learning 3D modeling software, learn anything and everything that came to me as knowledge. I love technical aspects, and therefore it was easy for me to grasp any software than came upon me. I have been using 3D for the past 2 years now, working as a part-time freelancer for a few projects and finishing my Diploma on the side. Since the Industry in India hasn’t developed a lot, Internet is mainly your main source of knowledge like Youtube, Gumroad Tutorials, Facebook groups (10 thousand hours, Level up, Chamferzone Forum).
Unreal Engine has been very popular since it became free and the quality of work it can produce can be seen on the Internet and that made me push myself and learn the engine to experiment and do something someone hasn’t done yet.
This scene was a 3-week project and was heavily inspired by a concept art, Aaron Limonick did for ‘The Last of Us’. I really liked the way it created a good composition for the scene and I wanted to do something similar.
This project started off as only the Snow shader. A friend of mine was working on a snow scene himself and adding snow on all the props and assets using mesh would be very difficult and it won’t be flexible as making snow mesh on every asset would be a pain and costly. So that gave me the idea to make a snow shader which would work on anything and everything in the project.
Because I was new to Unreal Engine 4, this is my first shader ever, so getting to learn about how shaders work and how it is built was great. My main source for learning shaders was YouTube and the official documentation. The documentation was quite big for me as it had everything from the naming conventions to what are the properties of a node and how to use it. Even though it sometimes is too long to read a document, they have screenshots setup for visual understanding. I would personally highly recommend going to the documentation for any information about Unreal.
Being an environment artist, you need to achieve an environment that is not only technically efficient but also artistically well presented. GDC and Allegorithmic videos of Uncharted 4 astonished me on how the artists of Naughty Dog focused on composition, leading the eye of the player and getting good silhouettes out of the environment. Therefore, I wanted to make sure these important aspects are present in my scene.
Unreal has a lot of features to test: textures, shaders, blueprints, lighting, post-processing, advance visual effects etc. So I wanted to play around with everything that would help me develop this scene.
Like I had mentioned, the snow shader was something I wanted to do to solve the problem of adding snow on assets in a given scene. Using masks has been the base-line for adding textures in any software be it Substance, Quixel, Photoshop etc. I followed the same ideology when creating the shader.
The main input for masking in the shader is the Normal map working alongside with the Detail Normals. What do you do, if you want snow only on the Base normal and not on the Detail Normals? The blend_normal parameter helps in how much of normal information you want the shader to respect. For applying snow I would convert the normal map into world normals using TransformVector and using a Dot product, I would get a Greyscale value which would be used for masking after a ConstantBiasScale. Putting that into the Alpha of lerp Node, I can now control how much I want the snow to be covered using parameter of world_blend. You can also go ahead and use Vertex Paint to remove where you don’t want the snow, to give artistic freedom.
Because an artist would want to add metalness, height, roughness on the base texture on the asset, I wanted to make sure the shader would give a slot for them too and therefore, I set up switches to add height map, metalness, Roughness Map so that light reflects the values it is supposed to for material definition. Tessellation is based on mask of the Height map with the amount of snow added.
Foliage is an important aspect in an environment. So I set up up the shader which would consider alpha masks as well. This will make sure snow clumps are formed on the leaves too, and not go away on the cards.
I also have Moss in the shader through Vertex paint which can be added on rocks and tree branches and trunks.
For the scene, because I had a base concept I can directly go ahead and start up unreal and start building the scene. But there wouldn’t be any development of the concept in my terms and therefore, I would take the concept art to Photoshop and setup a good composition. I had a buddy of mine Nakshatra Soni help me with the composition. Concept art played a major role in this environment as asking feedback from other Environment Artists gets you technical feedback but asking concept artists for feedback gets you feedback on Artistic elements such as color scheme, depths, and composition. And that is something I aimed for from the beginning.
Another great art director Stuart Campbell helped me a lot with paintovers on my renders to get the right mood and composition. I had emailed him about getting feedback and he was kind enough to get back with very good feedback and he has been a great mentor. He is a perfect guy to talk to about how to get into the Industry.
For the environment I wanted to keep the main idea of the concept by Aaron, have the trees and the river lead the eye towards the end of the picture. But I didn’t want to make it just like the concept. I wanted a happier afternoon, making it look more lifelike and that’s when I decided I would have Warm Sunlight with fog.
So once I was done with the shader, I setup the Landscape in Unreal itself. Then would come setting up the shader for Landscape. I setup 4 materials for my landscape, Snow Soft, Snow rough, Ground and wild grass. Through these 4 materials it was quite easy for me to go ahead and blend the materials and make it look realistic. After the Landscape, it’s time to setup the big trees and branches to setup a direction for the eye to lead through. At this point, it’s all about getting the composition and the setting look just right. Using rocks also helps in setting a forest environment and helps with layout.
River was also a major factor in terms of composition and it was something that has brought the composition to life.
The water was quite challenging for me as I had no idea how to even start about doing it. So I went through few videos on YouTube to get an idea on how it’s done. The river is just a 1m x 1m plane taken from 3ds Max and using the spline tool in unreal you can setup the river easily with twists and turns. Spline mesh has been very effective and efficient in getting shapes faster.
After setting up the base plane, I went into Zbrush to sculpt basic shapes for the water ripples.
Once I have that, using the Panner Node with different coordinate movement I would get the water moving. To give it correct color and depth information, I setup 2 colors, a dark blue and a light blue with Lerp so that color change would add more depth. I also added a water foam texture I had taken from Google and made it tileable using Photoshop. Foam texture added few more colors in the river and make it look like the river is moving.
For getting depth and opacity, I used DepthFade node to get fading near the end of the river.
Refraction had an important role so as to get good light bouncing and reflections in the scene like water has in real life. Going into the laws of Refraction Index, Water has an Index of 1.33 so using that in the lerp node along with Fresnel node would give me accurate refraction.
The Foliage isn’t all created in Speedtree. The bigger trees were sculpted in Zbrush as I wanted to make the roots and the base trunks more significant for the shader to get better results.
Speedtree was something that I had known for a while but never got to trying it out for any of my projects. So because I was testing and learning so many things and setting up a whole new pipeline for myself, I wanted to test the power of Speedtree and see how I can integrate it in my work. Because Speedtree has premade trees, you have the freedom to use that or setup your own trees using the add geometry method. Speedtree has a lot of offer in terms of flexibility on how you want a tree. Having parameters for the height of the tree, twists number of segments, branches, LOD anything you name. Using parameters like Disturbance in Spline category gives good bends to the tree branches. Bifurcation can also be used to show splits in tree branches. Playing around with Branch Category of Trunk can get good base for the trees. Other important categories would be Frond, Segments, Random seeds, forces.
When using Speedtree, it’s just recommended to take a base model and test out each and every parameter they have to offer to get the result you want. Just play around with Speedtree for an hour and you have yourself great looking trees, fully unwrapped!! (pretty cool aye).
The bigger trees were made by using zspheres and claybuildup to get good roots and base. Zspheres gets you good silhouettes for tree super quick. I mainly use Zbrush for getting the base shapes and silhouettes. It’s very less often that I would go and add micro details in Zbrush as using detail normals does the trick for me, I find it much faster and less time consuming. I follow this method only for natural elements (Rocks, Trees, cliffs). For hero assets, major props I would like to go into micro detailing in Zbrush and baking them out.
The Lighting is the scene was decided from the beginning itself. So while I was in the compositing stage, I would setup the base lighting with a Skylight and directional light. That’s all there is in the scene. The directional Light and the skylight are both dynamic as I could do it without having FPS drops. Having a warm lighting will help me set a good mood for the environment. Using blueish tints for the fog and warm yellow for the sunlight gave good depth and color combination. To get good colors and variations I would recommend using Adobe Kuler. It will help you decide a good color palette for your art. I used it heavily to get complimentary colors and the feel of how I wanted the environment to look like. Getting the Fog and the depth in the scene was important for me and using the height exponential fog and atmospheric fog helped me achieved what I wanted. Using the Inscattering color in HeightFog helped in getting good color definition.
Other helpful Tips:
1. After looking at the video by PurePolygons on how he used Unreal and spline meshes for his Procedural Nature Pack be it trees, river, roads, the power of spline meshes can be seen right there. I haven’t tried using Spline meshes for trees, but that is something I plan to do next. With spline meshes it helps in getting everything done inside Unreal without going to any other software. It makes your work super-efficientand procedural.
2. In terms of Shader work and Lighting. Don’t be afraid to restart something. I always believe that when you restart something, it always turns out better than the previous one. When I started off making the shader I had made it way too complicated then it had to be. And if you learn something new, don’t be afraid to make iterations or get lazy. I redid the Shader and the lighting for the scene at least 5-6 times just because I knew it would turn out better and would be more efficient.
3. Follow the Documentation for Unreal. It has tons and tons of information on how everything is done. It will help you not only understand the practical knowledge of how something is achieved but it also goes into the technical aspect of what actually happens. If you are new to the Shader network, get a notepad or word file on the computer and write down what each of the nodes do so that you can refer it while working on something.
I will be sending off the shader to the Unreal Marketplace and many people have requested for it. I will sell it at 5$ just because I need money to pay off my loan.
Being a Student watching breakdowns from GDC, Allegorithmic, reading articles at 80.lv has helped me a lot with how we should look at things in real life and how we can use artistic elements to push your art to the next level. Internet has everything you need to become a good artist. Getting Feedback is definitely the most important aspect of doing Art and just being public with your work will get you great contacts and colleagues.
I would like to give a shoutout to Tim Bergholz, He has been my Mentor for a year now, helping me with my work, motivating me and just helping me to become a better artist. He has an awesome forum where you can showcase your WIP and get valuable feedback from people.
Also I would like to thank Shreyash Pai. He is the reason I am here, he has been a great support and make sure to look at his work, even give him a Follow!!!