Procedurally generated tomato plants built with L-systems
The goal of this project was to model realistic foliage. Prior to this I had spent a lot of time exploring foliage tech and using L-systems and Houdini to create technical environment art solutions for plants. However, those were mostly implemented with stylized or semi-realistic art, and not high-resolution photo-based textures. These tomatoes were grown in Houdini with a mixture of splines and L-systems. They have the two dimensions of variation you get with modeling grown structures with L-systems:
- Scaling realistically from a small plant to fully grown, where models can be baked out of any stage of growth.
- Random branching variation driven by a seed value.
This provides infinite variations of the model while looking like the same species of plant. For more on this principle, see Foliage Tech.
Captured in Unreal.
Screenshots from Unreal.
For the growth of this plant, I modeled it as though it was following a vertical trellis. In some greenhouses, a twine or rod is used to guide the tomato. The growth process is:
- Spline grows upward, spiraling around a central axis. This axis has jitter that changes per instance.
- Points along the spline are sampled for branches or tomatoes.
- Branches in the form of L-systems propagate from the points as the vine grows.
- Growth for the L-sytem branches, vine width and leaf size are all controlled by a ramp along the vine, and by age.
- The number of tomatoes on a vine as well as their overall color are also determined by the age of the plant.
Tomato vine growing from 0 to mature. The size ramp is important to ensure “new” branches grow starting at 0 scale.
Fully grown with tomatoes, without color variation.
The tomato color is driven by age of the overall plant and position on the vine. The recoloring is done by translating the UVs of each tomato mesh procedurally.
LODs and Meshes
Different LOD meshes for the leaves and tomatoes were modeled separately. The vine and l-system meshes are polyreduced to the appropriate resolution depending on the LOD selection within the network.
The tomato plant is broken down into modules:
- LOD Controls
- Vine growth
- Leaf branch construction
- Tomato branch construction
- Branch resizing
- UV unwrapping
- Texture assignment