Ben Keeling talked about his approach to creating vegetation using alpha cards, shared his workflow with geometry and discussed setting it all up in Unreal Engine.
Human Emotions - Desert Vegetation
After the beyond human challenge for Artstation, I wanted to re-assess how to evolve my portfolio and work. My goal was to put more focus on projects that I enjoyed creating in my spare time for fun while striving for the best quality I could achieve. My aim is to take my work to the next level of visual quality.
I started out on a project series called Human Emotions. It's called like this because I wanted to gear it around what the world would be like if humans died out and left their robots to fend for themselves. I started by figuring out what sort of environments I could do and how I could fit the story of the robot lost in this world in my scenes. A lot of the experiments and scenes that I made initially can be seen in further detail on my blog.
I started my exploration journey by making blockouts, these quick sketches in 3d helped guide my ideas and flesh out my theme. I settled on a Japanese scene. As my ideas and understanding of the world I wanted to create grew, I realized that this fun and energetic style wasn’t quite right for the scenes and story I wanted to create.
Blockouts I created for initial exploration into the Human Emotion project
This led me to create an art bible of sorts. This is a tool that is often used in production to communicate the artistic vision to other teams in a studio setting. In this, I broke down all elements; story, robot design, lighting, scene ideas, the infection and so on. I technically could have adapted my Japanese scene to fit, but it required a lot of rework, so I opted to come back later and work on a truck stop instead. This was inspired by a great concept that gave me the overall mood of my scene.
Awesome concept by Alexander Roslik that inspired the starting mood of my scene
During the journey, I picked up a lot of valuable skills and new techniques. I learned how to use Blender and more about blueprints inside of Unreal. These helped me a lot when building my truck stop.
The plants and vegetation assets are rendered inside of Unreal. They make up a biome which will be used across the human emotion’s projects and, in particular, for the gas stop project. The plan is that the set could be expanded if other environment scenes need it later.
About the Project
For this part of my project, my main goal was to understand foliage more. In the past, foliage has always been something I had to create but I can admit I was never fully comfortable with it. It can be a challenge for artists because it poses many technical hurdles at every level; creating a good blockout to represent plants can be difficult, and the creation of high poly and alpha cards can be approached in lots of different ways. Plus, in the game, certain refinements to shaders and the game mesh are required, such as editing the vertex normal data or wind. These are all important parts of the process to create good plants.
To start the project, I went back to basics and absorbed as much as I could. I took CGMA courses, watched tutorials and asked friends. I tried to soak up as much as there was to know about it, so I could craft my own workflow that best suited what I wanted to achieve. I even sketched plants from life to really understand how they worked.
In the end, the most interesting thing was how much I learned about the process and plants in general. I achieved my goal of getting to a place where I am comfortable with making vegetation. I really wanted to be able to feel like someone could throw me any type of plant to make, and I wouldn't feel scared to start. I could break it down and be confident I would know how to approach it.
Building Alpha Cards
For the alpha cards, you need to understand what content you need to best represent your plant before you commit to making a high poly.
I start all plants by gaining as much ref as possible at different scales, you really need to understand what the leaf, stem, a branch, and the whole plant look like. I watched a great tutorial by Patrick Gladys that explained by breaking down each stage like this you can figure out what your cards will look like. The more assets you create, the easier this is to do by just looking at ref, but for the first few, I sketched them to understand how to break them down.
Example breakdown for the sage plant. With sketches and notes on how to create a 3d plan
Take the sage bush, for example; the type of sage I wanted to make is a succulent growing in a dry and arid landscape, it has sort of teardrop-shaped leaves, which grow offset along the stem, and they start from twisted bark at the bottom of the plant. The type I found has these cool wispy twigs that grow on the top of the plant, creating a unique and interesting silhouette. I sketched them out to help me understand what details I needed on my cards.
Generally, with all plants, I found it was a good idea to try and get a variety of big, medium and small alpha cards. This way, you can build an arrangement of cards in 3d to make a basic branch. It is a balance between variety and resolution as with a lot of texture-based work.
This is where Photoshop comes in. Before I make my high poly leaves, I make an alpha card blockout. Normally, I take photos from my ref and trace over them to get rough arrangements, or I kitbash photos together. All I care about at this stage is getting a rough layout down and getting it on a low poly plant in the engine, so I can assess if it looks right. I spend less than 10 minutes sketching the cards, and I am not precious about changing the layout at this stage. If I did this further down the line, I would have to move a bunch of high poly bits which can be quite time-consuming.
Alpha card layout at first pass stage
This also becomes extremely useful later in the process. You use the Photoshop blockout to draw high poly geometry on top of the first pass.
Modeling the Geometry
Once I am happy that my layout will work, and the low poly plant represents the reference as realistically as possible, I can move on to making the high poly. For small plants like grasses and leaves, you can get away with just card-based geometry in the game, but for bigger assets like trees, you need to also plan for a trunk or bigger branches.
During my research and tutorials, I discovered there were quite a few ways to tackle the high poly of plants. A lot of artists use modeling packages such as Max or Maya and rely on modifiers and instancing to create good arrangements. This is a technique I used in the past, but after creating foliage in ZBrush, I felt the result was a lot more natural. You are easily able to sculpt things like leaves and bend and twist them as well as create decaying and dead variations.
One benefit I liked about working inside of a modeling package was instancing, being able to update one leaf and see it propagate to the plant was helpful for making sweeping changes, plus it made it easier when applying materials or textures for the low poly baking. This inspired me to investigate better workflows for creating the high poly leaves in ZBrush, eventually leading me down a route of creating my own brushes.
Combining Brush Geometry and Alpha Cards
I discovered through research IMM curve brushes. The AskZbrush YouTube channel is great for finding more information on this. Plus, this video about tri-mesh curve brushes helped with the setup.
This was useful for plants because it meant I could make one stem with leaves and lay out the stems of the plant using curves. I could then manipulate and move them around deforming them to match my photoshop blockout. You can also store UV’s and Polypaint data if you want to transfer it to cards later. With a few brushes, I was able to layout my alpha cards very fast. It required a bit of work to make the brushes initially and they had a few quirks but once you practiced the workflow, they are simple to make.
Example IMM curve and IMM brushes for foliage
After I laid out the cards, I exported my high poly mesh from ZBrush. I then did my baking in Painter. This included any Polypaint data I had made from the brushes so that I could mask different elements such as leaves or branches. Texturing was simple, utilizing tiling materials such as bark and smart materials, which I shared across different foliage sets.
Blender fits in at the last stage for creating the final low poly plant. In most cases, I already had a good base from my blockout Photoshop pass. I followed the same process for turning the texture into a foliage asset for all my plants. First starting with a plane, I would apply the texture, and then I would cut around the branches trying to get as close to the edges as possible to remove overdraw. I would then separate out all the geometry and apply modifiers such as bend, FFD or twist to the individual branch alphas. I would take the different pieces and make an entire branch. Focusing, particularly, on making sure it looked as good as possible from every angle; in all cases trying to avoid seeing the edge of the plane from any angle. This helps give the volume and make sure the plant doesn’t appear to be made from alpha cards. I would then take the singular branches and construct the final plant. Hopefully, at the blockout stage, I would instance the pieces, which meant if I needed to update them in any way, I could just update the base branches and arrangements.
Working in Unreal Engine 4
For the Unreal side, I exported my plant as an FBX and imported into the game. For my project, I set up export presets, so I can channel pack the roughness, transmission, and a colour mask in one map. The diffuse is packed with the plant’s alpha and the normal stays as you would expect. I made a bespoke foliage shader for my project; this uses a standardised material function to build my base shader for other assets such as props. It has a few options which are enabled to work with foliage such as the ‘two-sided foliage’ shading type and subsurface for the transmission. I also added an option for a colour mask to enable an override on plants; in most cases, I used this to tweak leaf colours. If I wanted to make a variation, where it was a different colour, but the branches remained the same.
For the mesh itself, it mainly stays the same from the export. You must take care of editing the vertex normal data. This depends on the position of the plant to the player. Generally, it works best if the normal direction faces towards the player as much as possible, for ground cover the normal can face upwards and for small bushes more of a hemisphere shape. This can be done easily in modeling packages using scripts, but, in Blender, there are modifiers built in such as Data Transfer or Normal Edit.
Some close-up shots of the foliage in UE4
The other option to take care of is wind. You have different approaches depending on the complexity of wind needed. For most plants, I used pivot painter, there is a material function you can add to your shader to give the correct options, but you must also use a plugin inside of your modeling package. When you first author your plant, you must parent the pieces to each other in a hierarchy system. UE4 has some good documentation on how to do this properly.
You then run a script that generates small textures to tell the plant how to move. These get plugged into the Shader, and the pivot painter has settings you can tweak to customize how the plant will respond in the wind.
The Biggest Takeaways From the Project
The overall takeaway was how to make different types of plants. I chose a biome because I wanted to understand how the grass was different from making a bush and how that differed from a tree. That helped me enormously to understand how to make any type of foliage. The goal was to build up my understanding of all types of plants, so I would know where to start if I was given different types of vegetation.
I learned some new tricks with ZBrush, and it was my first proper set of assets using Blender, so that was interesting to delve into for this project. With the overall larger project scope, I learned a lot of valuable information about shader construction and how to make functions that can benefit my project on a more global scale.
Tree asset in UE4
The biggest takeaway is that by forcing myself to make the content by hand I was able to really understand how to make good plants and improve my overall confidence in the best workflows and methods for making them.
I am proud of the work I did to try and shoot for realism without obvious cards. If I could go back, I would have set up my instancing better to avoid having to recreate some of the plants once I got to the final low poly stage.