Masks

Workflow Fundamentals.

Explaining Scatter vertex-group-weight masking distribution workflow.

By default, all particle system you will create with Scatter have a main vertex-group influencing the density of the particle system with default weight value of 1.0.

(in weight painting mode red is 1.0, blue is 0.0, green is 0.5. The more your area is red, the more there's particles, and vice versa).

You have the possibility to generate different kind of Masks then subtract (or add) the mask to the chosen particle-system density.

For example you can create a mask that only highlight steep slopes area on your geometry, then subtract those areas to multiple particle systems, thus resulting on your trees and plants scattered only on mostly flat areas.

The Combination of our created masks will lead to our final non-destructive and realistic distribution.

At any moment you can delete, update, hide or change one of your mask/mask settings with efficiency.

Introducing the Masks.

Scatter is currently packed with 22 flavors of non-destructive vertex-group scattering masks. Divided in 4 categories : Basic / Boolean / Geometry / Camera. You will need to first create a new mask, then assign the mask to one or multiple particle system, and update if needed. You can accumulate as many masks as you want, completely non destructively.

Altitude

The altitude mask will map vertices weight depending on your geometry local elevation. The higher the vertex location is, the higher are their weight values.

This mask is useful if you'd like to create jungles or forests only on low altitude of your terrain for example (or even scatter particles in high altitudes or in strata).

Slope

The slope mask will map vertices weight depending on your geometry local slope angle values (the result will be normalized). The steeper the vertice normal are, the higher are the weight values.

This mask is useful if you'd like to procedurally remove particles on steep areas, where vegetation is rarely supposed to grow, or if you'd like to scatter particles on specific slope ranges.

Curvature

The curvature mask will assign weight depending on their relative curvature (concavity/convexity). All values are normalized. If the result is hardly noticeable you can use a multiplier that will crop the normalization.

This mask is useful if you'd like to procedurally scatter particles on only concave areas ( rocks for example, where they typically tends to accumulate).


Water Flow

The Waterflow mask (also called "watershed" ) will assign weight where the rain is most likely to flow and form streams.

This mask is especially useful if you'd like to achieve a realistic result, as vegetation have more chance of growing in fertile areas, rich with water and sediment.

Note that generating a flow map is a bit more computer intensive compared to other types of masks.

Orientation

The orientation mask will assign weight depending on slope orientation. If we vizualize our terrain from a plan perspective, all slopes weight will be equal to their relative slope direction (from 0 degrees to 360 degrees). The Orientation map role is similar to the aspect map , in topography.

This Niche mask can be useful if you'd like to distribute assets on slopes only facing a certain orientation (in nature, typically on the slope that get the most sunrays ).


Camera Distance Culling

The Camera Distance Culling mask will assign weight depending on camera distance. You will need to choose and search for a good minimal and maximal distance values.

This mask is useful when you are working with some huge shots covering large chunks of terrain. The more the particles are far away, the less particles you'll need. Click "Update" when the camera(s) change position.

Camera Clipping & Ray Casting

The Camera Clipping mask will assign weight depending on the visibility of camera(s). There's multiple options available to control the visibility range, affected cameras, and boost the camera FOV during calculation.

This mask is especially useful if you are working with huge areas. It will boost your performance like never before, as you can use less particles to achieve more.

Note that you may want to hide a few heavy-poly objects from your scene before updating the mask, as it may slow down the calculation.

Downgrade of Camera Clipping from 2.0:

In previous versions of Scatter, this mask was 'Real-Time' using dynamic paint tricks and a procedurally created camera FOV meshes. But there's multiple problems with this technique. First of all, real time update and large amount of particles /terrain polys is not reliable, everything will start to slow-down real fast. Then there's also the problem of animation, it's impossible to make animated vertex group work with particles due to how blender handle particle density, unfortunately the particle count will stay fixed at all cost, so all particles will be moved inside the weight areas creating artifact/seeding & density issues during animation. This will bring the need to adjust your particle count when creating weight mask (this will hopefully be resolved in Scatter 5.0).

Note that it's possible to skip this issue by using a vertex-group influencing particle length instead of density, but this bring another issue even more problematic: all particles with length of 0.0 will still hurt your computer performance, thus making the camera clipping feature with length influence utterly useless.

Because of these problems, we decided to make the non destructive Camera clipping feature static (with a manual update method only). This gave us bonus options like calculating ray-traced shadows, growing weight area and support multiple cameras at once.

Paint Layer

The paint layer mask will allow you to directly paint a mask that can have influence on multiple particle system at the same time. Influences can be reverted from one particle system to another non-destructively.

Boolean Bezier

The Boolean bezier mask will transform a curve into a boolean area that will remove particles or only place particles inside the bool area. Ideal to create non-destructive pathways. It's much better for perfs to have multiple curves inside a same curve edit than using multiple Boolean bezier masks.

Sharpness

The shapness mask will only highlight sharp angles. If you hardly notice anything, you may need to use the multiplier option that will boost the weight values. Always prefer to use the Curvature mask, as it will contain more informations.

Normal

The normal mask will assign weight depending on X,Y,Z XYZ normal orientation. The absolute option may give you interesting results, highlighting cliffs only facing the chosen axis. Note that the orientation mask contains more information.

Vertex Colors

The vertex color conversion mask will convert a vertex color layer into vertex group. Ideal for painting multiple particle systems in one and only place by using R/G/B & Black channels. Don't forget to set your background to black color (0.0.0) and set your brush mixing mode to multiply if you want to mix channels together.

Use (1.0.0) vector values for red, (0.1.0) for Green and (0.0.1) for Blue of course.

Procedural Texture

The Texture mask will convert texture data into vertex-groups. It has the exact same role as a "clustering" texture. You may use this mask if you prefer to visualize the density influence in the viewport or exporting the final scattering map into a game engine for example.

It's also ideal if you want to have one texture influencing multiple particle system or have particles pattern complementing each others.

Shadow-Casting

The shadow-casting mask will generate a vertex-group by calculating beams of light hitting your terrain surface from a given vector data.
There's an option to enable terrain self shadowing.
Note you may want to hide a few heavy-poly object from your scene before updating the mask, as it may slow down the calculation.

This mask could also be used as a 2D boolean mask, by setting the main vector data to (0,0,0), the shadow will then become a projection on a Z global axis.

Particle Proximity

The particle-proximity mask will generate a vertex-group based on the distance of the particles from a chosen system. This mask is extremely useful to create realistic forests or jungles as we usually want to have some species avoiding or surrounding another species (trees for example).

The mask effect will cancel-out if the chosen particle is also affected by itself. try to avoid such feedback-loop.

Note that the calculation might be less precise if the chosen particle-system have clustering texture, expect this downside to be resolved soon.

Object-Collision

The object-collision mask will create a vertex group from the intersection of meshes from a given collection with the target terrain. This mask is especially useful if you'd like to avoid having particles inside assets.

Please try to not use this mask on ultra high meshes, it might drastically slow down the calculation.

Bezier 2D Area

The bezier 2D area mask will add/remove particles inside a chosen closed bezier curve.

Note that it might be smarter to merge multiple closed curves into a single curve-data instead of using multiple masks with multiple curves.

UV Image

Sometimes you'd just like to distribute your assets from a bitmap. Scatter can generate a lot of data from the terrain goemetry, but some types of data (for example sedimentation maps) can only be calculated during the terrain erosion simulation (in softwares such as Houdini, Gaea or WorldMachine).

That's why the UV image mask is here, just choose your path and hit refresh. Be sure that your terrain UV correspond to your image of course.

Boundary

The boundary mask (or border mask) will assign weight in a given gradient radius from the geometry boundary edge-loop (if the mesh has boundaries at the first place of course).

This mask is especially useful in archviz, as you'll have a better control over your clumps of grass that may hurt your terrain delimitation.

You may need to choose your default maximal distance threshold or map-curve (see gif ).

Edge Data

The edge-data mask assign weight depending on the data contained by your geometry edges. This data can vary from edge index, length, edge marked as seam, sharp, ect... This mask can be useful if there's some important edge loops in your terrain topology that will have an impact on your distribution.

Face Data

The face-data mask assign weight depending on the data contained by your geometry faces. This data can vary from Face material, area, index, smoothness or face marked as freestyle. If you'd like to scatter particles only on N material or faces, I advise you to think about your terrain layout separation before scattering anything.

Let's Get It Started.

Steps to follow to use the mask workflow:

  1. Before everything else, make sure that you created a terrain with enough vertices, and assign the terrain as a target with some particles.

  2. Choose your Mask. Behind the scene, Scatter will generate a vertex-group containing all the information needed and modifiers to reverse and remap the weight group.

  3. Then you'll need to assign the masks influence to desired particle-system(s).

  4. Then you'll need to play with falloff values / parameters, and clicking on the update button if needed.

  5. You can stack and combine as many masks as you desire to create your perfect procedural scattered areas.

  6. Once done, you may want to change the particle-count density.


As each mask can have multiple particle influences, you also have the possibility to visualize the workflow from a particle point of view, and then have extra ability such as choosing between adding and removing weight and changing masks operation stack-order. To access this workflow click on the preferences icon on the header. The Search bar is also helpful as it can search for mask name-data, user names and influences names.

As this feature is based on vertex-groups, a good terrain topology is of course appreciated, a simple plane or ngon mess or bad triangulation should be avoided. The best solution is to stick to a grid like topology but afterall the main goal is to have an uniform quantity of vertices equally distributed all around your terrain surface (if your terrain geometry is tricky to retopologize, you can use the Terrain 2D knife project "remesher" operator from Scatter).

Tweaking your density areas is in most cases done via remapping the weight values with a curve-mapping graph. Tweak the curve until your wishes are fulfilled.

Scatter will create procedural vertex-groups and modifiers to adjust / add or substract your weight influences.


Polycount & Performance.

I'd recommend to work with a maximal of 250k verts per terrain, otherwise you will start to experience laggy behaviors while working. Fortunately there's a trick to optimize your viewport when working with high-res terrain: In 'Properties>Particles>Render' there's an option called 'Show Emitter' that will hide the emitter object in render. Enable this option and use a high resolution terrain asset only visible on final render.


Bonus Usage.

All the data that Scatter generate could be useful for a lot of other tasks, not only linked with Scatter.

For example, the final scattering mask could be used for shading a cool terrain material or to be exported to game-engines of any sorts. That's why there's an export scattering map function in the export panel, that will convert the vertex-group into a vertex-color layer. This vertex-color can then be appended inside cycles material editor to be baked or used in a shader for example.

Note that you can generate almost all masks data for external usage outside of the scatter panel, not only for weight paint but also for vertex-colors. Some masks are available in the headers of "Viewport>Weight paint mode>Weights" or "Viewport>Vertex Paint mode>Paint".