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.