The Ground Clutter system in ARK is a proprietary method for placing a large number of small static meshes on Landscape layers with minimum performance overhead. Meshes are placed procedurally in a fixed radius around the player by a compute shader at runtime, using simple rules based on the associated IDs of painted Landscape layers.
- Painted layers with layer info
DEFINE CLUTTER LAYERS
There can be up to 8 unique clutter layers that are associated with an arbitrary number of Landscape layers by the Landscape Info ID system. This means that two or more Landscape layers can share one clutter layer. However, each landscape layer can only be associated with one Landscape Info ID. Here is an example of 5 separate ground clutter layers with the associated landscape layers and assets:
|LANDSCAPE INFO ID||LANDSCAPE LAYERS||BIOMES||ASSETS for CLUTTER|
|1||Shared_Grass_01||Valley||ClutterGrass_02, SmallRock01_Clutter, SmallRock04_Clutter, Marigold_Clutter|
|3||Beach_Sands_Pebbles_01||Beaches||SmallRock01_Clutter, SmallRock04_Clutter, SM_SeaShell00|
|4||Jungle_Pebbles_01, Shared_Ground_Pebbles_01||Jungle, Mountains (Path)||SmallRock01_Clutter, SmallRock04_Clutter(Mountain)|
|5||Beach_Sand_01, Beach_Sand_02, Beach_Sands_Wet||Beaches||SM_SeaShell00, SM_SeaShell01, SM_SeaShell02, SM_SeaShell03, SM_SeaShell04, SM_SeaShell05|
|6||Shared Ground Pebbles 02||SM_RiverRock_01_Clutter, SM_RiverRock_02_Clutter, SM_RiverRock_03_Clutter, SM_RiverRock_04_Clutter, SM_RiverRock_05_Clutter|
|7||Beach_Sands_Dirt_02||Beach||SM_WoodDebrisClutter_01, SM_WoodDebrisClutter_02, SM_WoodDebrisClutter_03, SM_WoodDebrisClutter_04, SM_WoodDebrisClutter_05, SM_WoodDebrisClutter_06|
For each clutter layer, add a Ground Clutter Layer Actor in the map:
In the properties:
- Make sure each actor's transform is set to the world origin (0,0,0)
- Add a Static Mesh (this will not be used, but is needed for other reasons - just use your first clutter mesh)
- Add Clutter Layers to the Clutter Layer Array, filling in the properties for Static Mesh, Layer ID, Density, and Min / Max Size
- Uncheck Allow Shadows to save performance for meshes that do not need them
CONFIGURE LAYER INFOS
For each Landscape Layer Info, set the corresponding Landscape Info ID to match the desired Ground Clutter Layer Actor's Layer ID.
Landscape Info ID is cached on load, so you must reload your map after setting layer IDs. You should now see some beautiful clutter all over your painted landscape layers! All properties can now be adjusted for each Ground Clutter Layer Actor in real-time.
It is important to construct Ground Clutter meshes with technical and artistic care to maximize performance and quality of the end result.
Ground clutter meshes do not support LODs, so in general they should be one draw call and less than 200 triangles. Exceptions can be made for lower densities where higher triangle counts can be used on a case-by-case basis.
Creating good ground clutter meshes is a lot like creating tiling textures where obvious repetitive details should be avoided. Since the system generates and places meshes randomly, using meshes that have a random clumping pattern become very obvious. Such meshes should be combined with additional clutter meshes to break up the patterns.
Non-SpeedTree assets can easily be converted for use in the clutter system using Simplygon in the editor. Steps:
- Duplicate the asset and add a _Clutter suffix. So RockGroup01 becomes RockGroup01_Clutter
- In the StaticMesh Editor, Remove Collision and existing LODs.
- In LOD0, under Reduction Settings, check Visibility Aided and set an appropriate Percent Triangles amount (0-100 scale).
- Click Apply Changes
SpeedTree assets may be able to be converted using the above method, but if this breaks wind effects, the converted assets should be generated in SpeedTree Modeler and imported as unique clutter meshes. Wind can and should be used, just like normal foliage meshes.