Texture Asset
In Infinite Lands, ground textures are painted via the Texture Assets. You can create one by going into Assets/Create/Infinite Lands/Assets/Texture. This asset will contain the textures that are required and the settings that it will use.
The Textures list has to contain all the necessary data to paint the terrain. Infinite Lands provides some defaults that can be used on the default Terrain Shader.
Let’s go over the fields:
The first dropdown menu provides a selection of the default types of textures. By selecting “Other” you will be able to configure the bottom fields, suich as the Texture Name or the Default Color.
- Texture Name: As the name implies, this is the name that Infinite Lands will use to assign it to a shader. If set to custom, any texture that contains the same name will be assigned to the same texture array.
- Default Color: In case the texture missing, Infinite Lands will fill the gap with that default color. Note: This default color should be the same in all textures that are of type Other and have the same name.
Finally the settings:
- Size: Size of the texture when sampled
- Normal Strength: Strength of the normal map
Inside the graph Scriptable Object you can visualize all texture names used on that graph, and wich object has declared them. This is useful when working with textures of type Other to visualize any typos or missing data.
Vegetation Asset
If you’d like to spawn high density objects (trees, rocks, grass…) it is recommended to make use of a Vegetation Asset. This ScriptableObject contains the necessary configuration to setup a mesh, material, collider and other useful parameters required to procedurally spawn those objects. You can create one by going into Assets/Create/Infinite Lands/Assets/Vegetation.
All objects instantiated with a Vegetation Asset (the collider in GPU Instancing, or the object itself with CPU Instancing) will include a Instance Data Holder
There are two main ways to spawn Vegetation:
- GPU Instancing: The recommended way to spawn vegetation. It will use GPU Instancing to spawn all the meshes without creating a gameobject. The only gameobject that will be created is the collider attached to it, which will include any other component that goes with it.
- CPU Instancing: If instead you want default gameobjects, you can use CPU Instancing so that Unity Spawns each of the instances. This method will be more performance intensive, but it’s useful for those cases where you need certain components to be always active with the object.
Let’s go over the fields to understand them.
Mesh Data
- Skip Rendering: Skips the rendering of this asset.
- Generate Colliders: (Should it add colliders?): Generates the provided collider around the player (not recommended for high-density objects)
- Collider Object: If generate colliders is enabled, this field will be available to be set. The object selected here will be spawned around the player.
- LOD Groups: In case one is provided, materials and meshes will be automatically fetched from the prefab.
- LOD: In case no LOD Group is provided, you will have to set up the mesh and the material for each manually.
- High Lod Distance: Distance to stop loading the highest LOD setup. Each LOD will be swapped logarithmically independently of the View Distance.
- Cross Fade LOD Dithering: Enables crossfade dithering, which will allow smooth transitions between LODs plus disappearing when close to the camera.
Position Data
- View Distance: Units until objects are no longer rendered
- Distance Between Items: Distance between each item to be spawned.
- Position Randomness: How strong should each item be randomized? When value is 1 each item can be DistanceBetweeItems units of the next, while being zero there will be no terrain randomization.

Position Randomness at 0

Position Randomness at 1
- Vertical Position: In case the objects need to be vertically adjusted, this value can be set to adjust the models and colliders accordingly.
- Align to Ground: In case the object needs to be aligned with the ground. This value can be set to Up, Terrain and Ground

Up. It will always point to the sky

Terrain. It will always up to the terrain up direction

Ground. It will always point to the mesh normal
- Height Variation: Should there be any size variation?
- Random: Uses a random value to modify the size between minimum and maximum size
- Simplex: Uses simplex noise of size Patch Size, to modify the size between minimum and maximum.
- Mixed: Applies both methods
- Simplex Noise Size: If Simplex or Midex, you can choose how big should that randomness be.
- Density Affects Height: Should the density map be taken into account when calcualting the size of the vegetation?
- Between Zero Max Size: When density is 1, the size of the vegetation will be the maximum value, and it wil decrease to zero.
- Between Min Max Size: The size will move between minimum size and maximum size according to the Density. Reminder, Density Map is the input height map set into the Asset Output Node
- Minimum Scale and Maximum Scale: Min and Max size of the asset. Value 1 will draw it in the same size of the mesh, while a range of values allows for randomness between items.
- Half Instances at Distance: Should be start reducing the amount of instances after a certain distance?
- Half Instances Distance: If so, at which distance?
- Cast Shadows: Should it cast shadows? It will add a new lighting pass to cast shadows into the ground. It duplicates the number of batches per vegetation so enable it on objects that make sense to cast (not recommended for high-density objects).
- Shadows Distance: Distance to stop casting shadows. Independent of View Distance, but dependent on shadow distance in render settings of your unity project (if the render settings shadow distance is smaller, it will not render further than that)
- Shadows LOD Offset: Optimization techniques that makes use of a lower LOD for the shadows.
Color Data
- How to Sample Color: What method should be used when sampling the terrain color? It should match the terrain material.
- Height Map Blend: When Terrain Material has HeightMapBlend enabled.
- Weight Blend: When Terrain Material has HeightMapBlend disabled.
- Sampling Randomness: A randomness value affecting how far from the origin of the asset should the texture be sampled. Ensures for high density objects that there’s no hard cut between textures.
- Remove at Textures: Textures where this asset should never appear. Ensures that assets don’t appear if they have a rock texture or any similar texture that doesn’t make sense to have.
Debugging
- Draw Distances: Visualize the distance of each quad tree to enable and disable the corresponding chunks
- Draw Bounding Boxes: Visualize the bounding box of the vegetation chunk. Used for quick frustum culling.
Asset Pack
In some cases, you might want to treat many assets as just a single thing in the graph. For that reason you can use Asset Packs. It allows you to select any amount of assets that will automatically be placed following the selected density map in the Asset Output Node.