The scatter pipeline consists of several modular components. In essence, scattering is a sequence of actions:
- Generate points, either 2D or 3D.
- Remove points that do not satify certain conditions.
- Place objects on the resulting points.
We break down the sequence into finer components:
- Scatterer: Produces a point collection, for 3D,
ISpatialScatterer, and for 2D,IPlanarScatterer. - Augmenter:
IScatterAugmenter, Augment each point in the point collection toScatterData(with normal vector, size, etc.) - Preprocessor:
IScatterDataPreprocessor, Preprocess each point before feeding them to a filter. Modifies aIFilterContext. e.g. Raycast on terrain. - Filter:
IscatterDataFilter, Removes points that do not satisfy certain conditions. Uses aIFilterContextas supplementary data. - Object Placer: Places objects according to
ScatterData. Uses anIObjectProvider.
These components and other used data are all interfaces. An abstract implementation of how these components are connected can be found in AbstractScatterPipeline. This forms the barebone of the scatter pipeline, and each component can either be implemented with a plain C# class, or a Robert Houdin Node.