Procedurally generated plants and game environment in Unreal
Aldar was the junior year game project I worked on at DigiPen. I worked as technical environment artist and at times producer with a team of 10-20 teammates (the number fluctuated). There were 3-6 artists at different points. The project lasted for two semesters, with one semester of pre-production and one semester of production. Unfortunately, after the first semester we lost our director and a number of teammates, so the team was hard pressed to deliver a full 3D game. The goal was a Breath of the Wild inspired puzzle game, but we ended the production after making mostly the environment and some story/gameplay elements and moved on to other teams.
Overall, it was a lot of work and I learned a ton of techniques for vegetation and tech art in Unreal and with Houdini. I made all of the vegetation in the environment, most of which was procedurally generated; the floating islands, the clouds and skybox (which were pretty last minute), some of the environment effects, plus picking up a lot of extra texture and modeling work. The trees took a lot of iteration and were probably my favorite part of the project.
In-engine screenshots from Unreal.
I began with exploring different ways to make trees and foliage cheaply with foliage cards, and use different distribution methods for populating an environment. Also spent a lot of time learning the grammar of L-systems to make variable trees.
- X/Y size
After studying some games with great foliage like Uncharted or Assassin’s Creed or Horizon Zero Dawn, I found some common tricks for having high-resolution foliage with cards and LODs.
During the production phase, I used the systems developed during the first semester and created textures and models for a heavily procedural pipeline.
A big focus was the appearance of the foliage en masse of the main tree, because it would be popagated throughout the environment and almost always taking up a chunk of the viewer’s vision.
The critical element for foliage is the cards - how big bushes of leaves are broken down into chunks of geometry with textures of leaves. Traditionally, a lot of games use the cross-bar method, which gives you a field of leaves from most angles:
However, I found using low-poly geo that follows the gesture of the foliage to work much better.:
As mentioned before, this project was a great vehicle for tech art. More techniques used here are documented over in Foliage Tech, such as normal resampling for subsurface effects or L-system basics.
Growth and Probability
The two main factors of variation in plants are growth and probability. With growth, you can export each stage in a plant’s growth as a unique model. With probability, such as using an L-system, you can generate similar but different variations of the same model
This shows the growth sequence in Houdini of the main canopy tree.