Our team uses Blender to create reality-based rally stages for Richard Burns Rally simulator. This is basically a long road with surrounding terrain, covered by the vegetation.
Such scenery can be pretty long - the longest stage is 50km, then the total number of vegetation instances (clumps of grass, bushes, trees, …) reaches ~1M.
This is 1/6 of the whole scenery
To avoid placing all the vegetation instances manually, we currently use particle systems to batch-distribute the vegetation over the scenery (together with manual placement where more precision is needed).
We start such projects with a terrain prefab (piece of road & surrounding ground) which has some default particles-weights already pre-set, then we duplicate this piece using array&curve modifiers to get the basic ground with general vegetation quickly:
… then we adjust it as necessary using weight painting:
works smoothly in the example because the emitter is very small
The resulted stage can be seen here (to get an idea of required instances count, ground size etc.):
…or in case of a forest stage:
While particles does the job, they are far from being the ideal tool for this task, because:
- every change of the emitter (like weights update) causes all the particles are regenerated = no precise control over the result
- impossible to weight paint such large emitters due the very bad performance (we need to set the weights in Edit Mode by selecting vertices and entering a weight value)
- particles update performance (takes seconds to update / regenerate single particle system)
- we need to use custom (crappy) addon to maintain the same density regardless of the emitter size or weight-painted area
- makes edits of the ground (= emitter) very slow, need to use workarounds like using copies of the ground as emitters
- limited options for distribution, no way to avoid overlaps etc.
As recent Blender releases finally got some features we were waiting for, we are about to switch from 2.79, and so we are investigating options to improve our workflow.
GNodes seemed to be very promising replacement of our particles-based planting workflow, unfortunately the first test showed that we would face very similar performance issues like with particles (laggy weight painting, low viewport fps).
We would appreciate a lot if anybody can suggest some smooth workflow for this task (scattering large amount of instances over large ground mesh).