How to use Chaos Scatter with Corona for Cinema 4D - Advanced Features

Note: you are viewing an article in the Chaos Help Center. If you are interested in the technical documentation of Chaos Scatter, please see: Chaos Scatter at the Chaos Documentation Portal.

 

Feature spotlight:

 

 
How-to tutorial:
 
 
 

This is "Advanced Features of Chaos Scatter". It is a part of a larger collection of articles: 

 

Page contents:

 

Advanced Features 

1D, 2D, and 3D Scattering

Under the "Config" tab, you can choose between 3 modes:

  • 1D - On splines
  • 2D - On surfaces
  • 3D - In bounding box

00_ChaosScatter_D_ScatteringMode_UI.png

 

1D scattering is intended for distributing objects along splines. An example of this would be planting trees in straight or curvy lines or placing lamps along a street.

Note: Open or closed splines can be used for this, and in this mode, the instances will always be distributed along the selected splines: 

01_ChaosScatter_D_ScatteringMode_1D.png

 

2D scattering is the most common mode, where the distribute-on object's surface is considered, no matter if it's horizontal, vertical, or if it's a complex 3D object

 

Note: A closed spline can be used in this mode too, and in such case, the instances will be distributed on the area enclosed by the spline's border.  

02_ChaosScatter_D_ScatteringMode_2D.png

 

3D scattering means that the instances will be scattered inside the volume of the distribute-on object's bounding box

03_ChaosScatter_D_ScatteringMode_3D.png

Note: In the case that a spherical object is selected as the distribute-on object, the instances will be scattered inside a cube (since the bounding box of the sphere is considered, and it is cube-shaped). This type of scattering is useful when a box-shaped volume needs to be populated with objects, for example:

  • Dust particles in the air inside a room
  • Fish in an aquarium
  • Books on a shelf
  • Wood next to a fireplace.  

 

Scattering instances on existing Scatter objects

It is also possible to scatter objects onto another Chaos Scatter objects within your scene. In the example below, the needles are being distributed onto the cactuses. The ''Cactus'' scatter object is used in the ''Distribute On'' field of the second ''Needle'' scatter object. 

scatter_on_scatter.jpg

 

The configuration: 

scatter_setup.png

(The ''Cactus'' scatter object is placed inside the ''Distribute On'' field of the ''Needle'' scatter object)

 

Additional examples of scattering instances on existing scatter objects:

scatter_on_scatter3.jpg

Water drops are scattered on cans, which are scattered too. 

 

scatter_on_scatter4.jpg

Sugar crystals are scattered on jellies, which are scattered too. 

 

Slope

We can make use of one of Chaos Scatter's most powerful features: the Slope Limitation. This can be used to decide on how steep surface the trees should grow. For example, a very low limit like from 0 to 10 degrees will only allow the trees to grow on an almost flat surface. Increasing the limit, for example from 0 to 20 degrees, will let the trees grow in slightly more steep areas. A very high limit, like from 0 to 90 would mean that the trees can grow even perpendicular to the ground, which we probably don't want. 

17_ChaosScatter_C_Test_A_Slope_0-20.png scat5.jpg

 

Altitude

Also added to Chaos Scatter is the ability to scatter your objects by altitude. In the example below, the altitude was restricted from 99cm to 100cm as we only want the instances to be scattered at an altitude of 1m. A similar setup was also created for the other scatter objects to restrict them to a desired altitude.

Altitude_scatter.jpg Altitude_settings.png

 

Look At

This is another new addition to Chaos Scatter. You can make all your scattered instances point towards a single object in your scene using this option under Transformations > Rotation. For additional control over the Falloff distance (how the objects rotate towards the target), starting from Corona 12, a Falloff curve control has been implemented.

Such as these arrows pointing towards our logo or making an array of ground-based telescopes focused on the same area of sky for example. 

Look at_logo.jpg

lookat_telescopes.jpg

 

Scattering Groups and Hierarchies

You can add a group or a hierarchy of objects to the list of instanced model objects with a single click. A group or a hierarchy is treated as a single model, so this way you can create an arrangement of cutlery and dinnerware for example and scatter that as a single "module": 

Group_scatter2.jpg

 

Camera Clipping

Camera clipping is a feature that limits the scattering to the camera view. Instances that are not visible will be clipped away. It is an optimization that may improve scene parsing speed and lower memory usage; however, it can cause missing reflections or shadows (because some objects farther away from the camera will disappear). To compensate for this, you can use the "Extend view" parameter. It supports various camera types (native, Corona, V-Ray). 

 

As explained above, camera clipping is purely an optimization feature! It can speed up scene parsing and lower memory usage by hiding some of the rendered objects which would be otherwise visible and, therefore, would need to be parsed and allocated in the memory. It must NEVER be used to limit the scattered instances to a specific area. Other features should be used for this, such as spline include/exclude and slope limitation!  

 

Camera Clipping Parameters:

Enable: Checking this will enable the Camera Clipping feature.

Clipping Modes:

  1. Active render camera: This mode clips the instances based on the camera view used for rendering. In this case, the clipping is not visible in the viewport unless changing clipping parameters (or running IR). This is because otherwise, the clipping would be too intrusive during regular scene work.
    04_ChaosScatter_D_CamClipping_OFF.png 05_ChaosScatter_D_CamClipping_ON.png


  2. Specific Scene Camera node: This mode uses a specified camera for the clipping. In this case, the clipping is always visible.
    06_ChaosScatter_D_CamClipping_ActiveCam.png 07_ChaosScatter_D_CamClipping_SelectedCam.png


  3. Extend view: Specifies a uniform extension to the camera view in all directions (as distance), adding an extra zone beyond the camera view (behind the camera too) where the instances will not be clipped. This is useful for ensuring correct shadows or reflections from instances that would otherwise be clipped. The distance is in scene units.
    08_ChaosScatter_D_CamClipping_ExtendView_50.png 09_ChaosScatter_D_CamClipping_ExtendView_5000.png

Near and Far clipping: 

  • Near clipping: Specifies near threshold distance from the camera. Instances closer than that will be clipped away. The distance is in scene units.

  • Far clipping: Specifies far threshold distance from the camera. Instances further than that will be clipped away. The distance is in scene units.
10_ChaosScatter_D_CamClipping_Near-FarClipping_OFF.png 11_ChaosScatter_D_CamClipping_Near-FarClipping_ON.png

 

Known Limitations of Camera Clipping: 

Visible flickering in animations:

Note: This issue only occurs in versions of Corona up to 9. It is fixed in Corona 10.

multishader-clipping.gif

This issue occurs when using Camera Clipping on models that have at least one Corona Multi Shader in their material setup. The reason behind this is that when using Camera Clipping, the number of scattered models can vary between animation frames, and this affects the way different colors/textures are distributed through the Multi Shader. Note that the models are not actually changing their positions, but their colors are affected instead. 

Solution: Either disable Camera Clipping or remove any Corona Multi Shaders from the materials of the scattered models. We are planning to fix this issue in the upcoming versions of Scatter. 

 

Using textures to control scatter transformations

Another feature of Chaos Scatter is the ability to drive the scattered objects' translation, rotation, and scale using textures or colors (or, in fact, anything plugged into the respective "Texture" slot). 

 

We will be using the simple scene below, showing a forest scattered on a simple plane. 

In this image, no translation, rotation, or scale adjustments are used, so all trees are positioned exactly at the plane surface, they are not leaning in any direction, and their scale is uniform. 

rgb-default.jpg

 

We will be using a texture with pure red, pure green, and pure blue colors to drive the three transformations:

12_ChaosScatter_D_Transform_GradientMap.png

 

1. Translation

We need to set some translation from - to range. In this case, we will use a range from 0 to -120, 0 to 70, and 0 to 120  meters, respectively. We also need to plug the RGB texture into the "Texture" slot under the Translation section:  

18_ChaosScatter_D_Transform_Position_UI.png

 

Here is the result of our adjustments: 

19_ChaosScatter_D_Transform_Position.png

As we can see, the trees that originally grew in the red area were moved in one direction (X-axis), the ones in the green area were moved in another direction (Y-axis), and the trees from the blue area were moved up (Z-axis). 

 

2. Rotation

We can adjust the rotation in a similar way. Let's discard the previous translation changes, remove the translation texture, plug the same RGB gradient into the "Texture" slot under the Rotation section, and set the rotation XYZ ranges to 0 - 75, 0 - 60, and 0 - 80 degrees respectively: 

20_ChaosScatter_D_Transform_Rotation_UI.png

 

This is the result: 

21_ChaosScatter_D_Transform_Rotation.png

The trees from the red area are now leaning 75 degrees along the X-axis, the trees from the green area - 60 degrees along the Y-axis, and the trees from the blue area 80 degrees along the Z-axis

 

3. Scale

Lastly, we can use the RGB gradient to control the trees' scaling. Let's discard the previous rotation changes, remove the rotation texture, plug the same RGB texture into the "Texture" slot under the Scale section, and set the scale XYZ ranges to 100 - 250, 100 - 200, and 100 -200 percent respectively: 

22_ChaosScatter_D_Transform_Scaling_UI.png

 

End result:

23_ChaosScatter_D_Transform_Scaling.png

As a result, the trees from the red area are now 250% stretched in the X-axis, the trees from the green area - 200% stretched in the Y-axis, and the trees from the blue area - 200% stretched in the Z-axis

 

Note: When using transformation textures, the red, green, and blue values correspond to transformations in different axes (X, Y, Z). This means that colorful textures will allow the instances to be transformed in unproportional manner (it is possible that they will be moved, rotated, or stretched in one direction more than in another direction). To make the transformations proportional, use grayscale transformation textures instead:

rgb-scale-black-and-white.jpg

In the above example, a black-to-white gradient is used to drive the size of the trees. This way, the trees will be scaled proportionally in all directions because the R, G, and B color values are the same at any given point (for example, R 50, G 50, B 50, and so on). 

 

4. Transformation modes

So far, we only used the default "Fixed" texture mode. In this mode, the black and white areas of the transformation texture map directly correspond to the values specified in the "From" and "To" fields. This way, black areas of the map will represent the lowest allowed transformation, and white areas will represent the highest allowed transformation.
For example: Black areas in the scale texture will represent the smallest allowed instances, and white areas in the scale texture will represent the biggest allowed instances. 

 

If we switch to the "Random amount" texture mode, the black and white areas of the transformation texture map will be interpreted differently. "From" and "To" values will specify the maximum allowed randomization, black areas of the texture will represent the areas where there is no randomization whatsoever, and white areas in the scale texture will represent the areas where maximum randomization is allowed. 

 

Tip: The Texture mode parameter is only available if a shader is being loaded for any transformation (translation, rotation, scale) texture slot.

 

"Random amount" Scaling Mode - Checker texture example: 

Here is an example of the same mode ("Random amount") based on a black and white Checker texture. You can clearly see that no randomization occurs on the black squares and that full randomization occurs on the white squares:

elr6DleugiwJ_bXWweaiKrGhl9I7ixHkFg.jpeg

 

"Fixed" Scaling Mode - Checker texture example: 

For comparison, here is the same setup as above, only with "Fixed" mode enabled, where you can see how black and white areas simply represent different scaling:

Jp_wEctntFsr5Jc_YGzOTT2eYZAYsfuWGg.jpeg

 

Tip: When creating all kinds of scenes with Chaos Scatter, adjusting its settings, and creating textures, Corona's Interactive Rendering is a great ally. It lets you preview your changes and decide which settings to use close to real-time. 

 

Preserve scale and rotation

You may sometimes have a model in your scene which is not rotated correctly. This is especially common in the case of models imported from a different 3D application:  

16_ChaosScatter_D_Rotating_Pivot.jpg

In this case, a patch of grass model is laying on its side instead of growing upwards. This is incorrect, unless we need to render a fallen patch of grass. 

 

The first idea to fix this would be to use the rotation tool and rotate the object by 90 degrees:

17_ChaosScatter_D_Rotating_Pivot.jpg

 

However, if we do it and use this rotated tree model in Chaos Scatter, we will end up with the following result:

trees-side.jpg

 

This is because, by default, Chaos Scatter considers the local coordinate system of the model object. In this case, the tree model was originally laying on its side with its local Y axis pointing upwards. We rotated the model; however, this did not affect the local coordinate system - it stayed the same. 

 

One solution to this issue would be using the built-in "Reset Scale" or the "Axis Center" tools in Cinema 4D. But an easier, faster, and non-destructive solution would be using the Chaos Scatter "Preserve model rotation" option under Transformations > Rotation:

23_B_ChaosScatter_E_Transform_Rotation_Preserve_On.png

 

 

When this is checked, the current rotation of the scattered tree models will be considered, so they will behave as we originally intended: 

trees-vertical.jpg

After enabling the "Preserve model rotation" option, the scattered trees are growing straight, just like the model that we see in the viewport. 

 

The "Preserve model scale" option under Transformations > Scale works in a similar manner. If the model selected for scattering was rescaled in Cinema 4D:

  • When the "Preserve model scale" is disabled, the scattered objects' scale will be the same as the original model's scale when it was imported into the scene.
  • When the "Preserve model scale" is enabled, the scattered objects will look the same as the model after it was rescaled.  

Note #1: In situations where the scattered models appear to be rotated or scaled in an unexpected way, it is a good practice to tick and untick the "Preserve model rotation" and "Preserve model scale" checkboxes and observe the behavior of the results. If this doesn't seem to help, try using the "Reset Scale" and "Axis Center" tools in Cinema 4D.

Note #2: Remember that the pivot of the original object that is scattered decides the point of rotation and scaling of the instances. Moving and rotating the pivot of the original object will change the way the scattered instances are rotated and placed on the distribute-on object. 

 

Using the Preserve Scale and Rotation options with animated instances

If the geometry of your original model is animated, for example, the vertices or faces of the mesh are changing their positions - everything will work as expected, and the scattered instances will be animated too. 

If the rotation and/or scale of your original model is animated (keyframes are created for the model's rotation or scale transformations), then by default, this will be ignored, and the scattered instances will appear static without any kind of movement. To fix this, you need to enable the "Preserve scale" and/or "Preserve rotation" checkboxes. 

 

Edge Trimming

Starting with the Chaos Scatter included in Corona 9; you can trim scattered instances consisting of multiple mesh elements so that they stay within the boundaries of the distribute-on objects or the include/exclude splines. In addition to making the scattering look more refined and natural, this feature also provides a performance increase - thanks to removing some of the instances, you save RAM and make the parsing time shorter.

 

Using Edge Trimming

24_ChaosScatter_D_EdgeTrimming_ON.png

 

Without using Edge Trimming

25_ChaosScatter_D_EdgeTrimming_OFF.png

 

To apply this to your projects, you can proceed to use any of the following methods to edge trim your scattered objects:

 

How to use the Scatter Edge Trimming checkbox?

If several models are being used in the same Chaos Scatter object, adding an Edge Trimming shader to all of their materials can be a little bit laborious; to improve this workflow, starting from Corona 12 and Chaos Scatter 5, we've implemented a feature that trims all the scattered instances of a Chaos Scatter object.

 

You can find and enable the Edge Trimming checkbox from the Surface Scattering section of a Chaos Scatter object as follows:

26_C_ChaosScatter_A_EdgeTrimmingFeature_UI.png

 

Note: The trimming effect will be visible only at rendering time.

 

To learn more about this feature, see also: Edge Trimming feature at the Chaos Documentation Portal.

 

 

How to use the Scatter Edge Trimming Shader?

You can find the Edge Trimming Shader in the node material editor under the New shader > ChaosScatter category; or using the Cinema 4D's material editor under the Texture selector > plugins > ChaosScatter category.

26_A_ChaosScatter_B_EdgeTrimmingShader_UI.png 26_B_ChaosScatter_A_EdgeTrimmingShader_UI.png
Location of the Edge Trimming Shader in the Corona Node Material Editor. Location of the Edge Trimming Shader using the Cinema 4D's native material editor.

 

You need to plug the Edge Trimming shader into the Opacity channel of each of the materials of the model that you are scattering (in case of multiple models with different materials - all opacity slots of all materials used):

27_ChaosScatter_D_EdgeTrimming_Shader.png

The Edge Trimming shader must be connected to the Opacity channel.

 

If your model is already using an opacity texture or shader, you can pass this existing texture map through the Edge Trimming shader using its "Default shader" slot:

28_ChaosScatter_D_EdgeTrimming_Shader-Opacity.png

Opacity textures can be used along with the Edge Trimming shader.

 

Once the Edge Trimming (regardless of the method you choose to use) is being used, you can see its effect at the rendering time only (this is not visible in the viewport):

29_ChaosScatter_D_EdgeTrimming_Example_B_Viewport.png

The image shows how the Chaos Scatter looks like in the viewport (the Edge Trimming result is not visible in the viewport).

 

30_ChaosScatter_D_EdgeTrimming_Example_B_Shader-OFF.png

The image shows the result of a scattered object without using Edge Trimming.

 

31_ChaosScatter_D_EdgeTrimming_Example_B_Shader-ON.png

The image shows the result of using Edge Trimming for the scattered objects.

 

To learn more about the use of this shader, see also: Scatter Edge Trimming shader at the Chaos Documentation Portal.

 

 

How does the trimming work?

If a pivot of any integral part of the instance (any sub-mesh element of the instanced model) falls outside of the area specified by the scatter, such part is not rendered. This is a simplification, but you can imagine the pivot as a point on the distribute-on object from which an element is growing.

32_ChaosScatter_D_EdgeTrimming_Example_B_Model.png

 

When the Edge Trimming is not used:

Without the Edge Trimming, the whole clumps will be scattered, causing some of the flowers (sub-object elements) to grow outside of the distribute-on object. 

 

When the Edge Trimming is used:

Each model is scattered the same way as when the Edge Trimming is not used (its pivot is placed within the boundaries of the distribute-on object), but when this shader is in use, the sub-mesh elements (individual flowers) are only growing inside this boundary of the distribute-on surface.

 

33_ChaosScatter_D_EdgeTrimming_Example_B_Comparison.png

 

The area to consider for trimming can be specified using:

  • The distribute-on object itself.
  • Include splines.
  • Exclude splines.

There is no need to enable any special options in the Chaos Scatter object itself.

 

The typical use cases of Edge Trimming include:

  • Grass lawns - In the case of using large grass clumps, no individual grass blades will be growing outside of the defined area.
  • Carpets - In case of using large clumps of strands, no individual strands will be placed outside of the carpet area.
  • Pebbles, rocks, bark chippings, or any other objects you need to distribute within a specific boundary and ensure no instances stick outside of that boundary (determined based on the mesh element pivot precision).

 

Known Limitations of Edge Trimming:

  • This issue was only present in Corona 10 and has been fixed in newer versions: 
    In Corona 10, Edge Trimming did not work correctly when scattering proxies while their viewport display method was set to solid bounding box, wire bounding box, or point cloud. In Corona 10, the solution is to change the viewport display method of all scattered proxies to "Full mesh". The recommended solution is updating to Corona 11 or newer.  
    Proxies scattered with point cloud viewport display method: Proxies scattered with full mesh viewport display method:
    35_ChaosScatter_F_EdgeTrimming_KownLimit_PC_On.png

    36_ChaosScatter_F_EdgeTrimming_KownLimit_FM.png

  • Generally, the less mesh elements a model object has, the faster the Edge Trimming works. It may get slower when using extreme numbers of mesh elements in a single model (think 10,000 elements or more), but this should not be an issue in usual scattering scenarios (scattering grass, trees, rocks, etc.).
    Note: Sometimes, it may also be worth to experiment and finding out whether to use scattering, Corona Pattern, or displacement.
    See also: Displacement, Scatter, and Pattern usage differences at the Chaos Help Center.
  • If the area where trimming is expected to occur (e.g., a narrow path defined by an exclude spline) is significantly smaller than a single to-be-trimmed model itself (e.g., a large grass patch), then the trimming may actually not happen because of optimizations used by the trimming feature. The solution is to make the model smaller (e.g., manually scale the grass patch or use scaling options in the Chaos Scatter).

 

Surface Color shader

Sometimes you may want to color the scattered instances based on the texture of the underlying distribute-on object. A typical example of this is scattering strands on a carpet so that each strand gets the color of the underlying carpet surface. This is perfectly possible when using the Chaos Scatter, thanks to the Surface Color shader. 

You can find the Surface Color shader in the node material editor under the New shader > ChaosScatter category; or using the Cinema 4D's material editor under the Texture selector > plugins > ChaosScatter category.

C4D_Shaders_Scatter_SurfaceColor_UI_A_00.png C4D_Shaders_Scatter_SurfaceColor_UI_A_01.png
Location of the Surface Color shader in the Corona Node Material Editor. Location of the Surface Color shader using the Cinema 4D's native material editor.

 

This shader will automatically take the diffuse color of the Chaos Scatter distribute-on object and will pass it to the instances that are scattered on it. The shader itself takes only the distribute-on diffuse color, but it can be applied to any material property of the scattered instance (e.g., roughness, opacity, self-illumination, or any other). 

 

A basic example: 

The objects we will be using are a plane with a colorful pattern (as the distribute-on object) and a box (as the scattered instance):

38_A_ChaosScatter_A_SurfaceColor_Example_A.jpg

 

A Surface Color shader is created in the material editor and plugged into the box object's base diffuse color slot:

39_A_ChaosScatter_A_SurfaceColor_MtlSetup_A.png

 

The scattering is enabled, and as a result, each scattered box is colored based on the underlying texture:

40_A_ChaosScatter_A_SurfaceColor_Example_B.jpg

 

A carpet can be created using a similar approach. The base of the carpet is using a material with a pattern in its diffuse color (no scattering is used in the below image): 

41_A_ChaosScatter_A_SurfaceColor_Example_C.jpg

 

We can then create strand geometry and scatter it on top of the carpet base. Then apply a Surface Color shader to it:

42_A_ChaosScatter_A_SurfaceColor_Example_D.jpg

 

In a close-up render, we can see that each strand takes the color of the underlying carpet base object: 

43_A_ChaosScatter_A_SurfaceColor_Example_E.jpg

 

To learn more about the Chaos Scatter, see also: Chaos Scatter at the Chaos Documentation Portal

 

 

 

 

 

Was this article helpful?
0 out of 0 found this helpful