Goal of this project:
My original goal with this project was to create a generator that builds leaves. It was intended to take in an alpha cutout texture of a leaf and return a game-ready leaf based on the image. Halfway through the project, I opted for one leaf that I could age with a slider inside of Unreal Engine due to time-constraint. The intention is that it could theoritically be used in realtime inside of a game where the "Age slider" makes the leaf go through the different seasons.
In the research phase of my original goal, I developed a way to generate the main arteries of the leaves using the "Bevel" and "Edge Detect" node inside of Substance Designer. This method relies on the
leaf-shape not being completely round since the generator need pointy areas to bevel correctly. However, the veins were always going towards the middle of the leaf, not the base where they are supposed to sprout from. Research to find a fix for that was needed, it was around this time I decided to rework my goal.
I have mainly been reverse-engineering one project which you can find here.
My approach was on the other hand pretty much the same throughout the project. I generated out masks and merged them into a mask-texture which I later fed into a material that I built inside of Unreal Engine 4.
From there, I exposed variables that can be tweaked with
blueprint-systems. To display the age-process, I connected a time node into a sine node to change the leaf from young to old, then back to young.
The advantages of the original goal would be that artists wouldn't need to spend too much time on making realistic looking leaves. There were other features planned such as choosing colors and if the leaves has been damaged, the aim was however simplicity. The more variables added, the more steps the user has to go through. This method is perfect for projects you don't pay too much attention to the foliage.
On the reworked goal, the upside would definitely be more control over details opposed to the first goal. Another upside would be that since each leaf-type has their own unique characteristics, those can be made instead of getting a generic characteristics that applies to all leaves.
Of course with simplicity, the downside becomes that making detail and fine adjustments impossible without cluttering the function. On the other hand, if fine adjustments are needed then the leaves probably plays a huge role in that specific project and should therefore need extra care per leaf.
The limitations of the reworked goal would be time since making each leaf-type by hand is time-consuming.
Here is an overview of the material I created inside of Unreal Engine. It is very simple and straight forward, I use the different masks to lerp between values. Once those values are set, I interpolate between those with my age-function. That age function is connected to a season blueprint which derrives all the necssesary data to all assets which are to be affected by the seasons.
For presentational purposes, I quickly modelled a tree inside of Autodesk Maya with a small platform. I also looked breifly into Niagara in UE4 to make the falling leaves. It took some time, but it did quite much to the whole presentation as it looks much better. I did however not spend too much time on that since it was not the goal for this project. Then I composed a little musicial piece fitting to the project and threw it all together.
For the original goal, I did some research and think there might still be a way to make a leaf-generator using this method and get good looking results. In the end, the outcome was that I got a deeper understanding of how some operations behave and their limitations.
As for the goal, I feel pretty happy with how it turned out considering I only had a few weeks left of this project when I basicly had to start from scratch. The hardest part was to get the blending between the stages to look somewhat ok.