I’m making a Nature RTS game with simulation of “Living Flora” as the main theme.
This particular video is a simulation of “Common Fern” and has them growing from tiny fiddleheads and eventually spreading across the entire map by reproducing via spores that each plant releases. The dispersal patterns (and constraints) are configurable on a per-species basis.
Several thousands of these fern have their individual lifecycles managed with the whole thing running at 60FS.
Thanks for watching! The game is called DoN - “Drunk On Nectar” and it’s an RTS-Third-Person hybrid.
That’s impressive! Can you tell us how you achieved it?
Sure, each plant species in the simulation uses a generic “data tree” made of nested actor components. A “Flora Masterplan” per species defines its growth trajectory and nested children. So a single plant on the screen is not always one single mesh but a collection of many meshes that have been attached together to provide the illusion of being a single mesh. Eg: StemComponent <contains> leaf component <contains>flower bud component <contains>seed pods component <contains> reproduction/dispersal component, etc. (in this fern video each plant is a cluster of four individual fern meshes with randomized properties)
Each flora component supports configurable animation of morph target weights, material instance properties and the ability to attach to (or detach from) another component at a particular morph weight). This is instrumental in getting flower buds, leaves, etc to rise along with plant stems while the parent is also morphing itself!
Below is an outdated screenshot of the system that I pulled out from my WIP thread, it doesn’t contain recent features such as automatic swapping of skeletal/static meshes to an instanced static mesh counterpart but its a decent overview of the system.
For maintaining 60 FPS with several thousands of instances I needed the following - HISM (hierarchical instanced static mesh) with LODs, culling and a custom “SpawnQueue” manager that controls the number of actors spawned per tick (this is seriously a greater bottleneck than rendering in my testing) and more Tick activity checks so time-intensive calculations spread themselves over a number of ticks where possible.
Hi VSZ, Can you sell me the plugin or the example file?
I would like to make a lively forest for an audiovisual project.