Colormap Ultra Terrain Shader 4.0

Colormap Ultra Terrain Shader 4.0

Hi there and welcome to the documentation of the ColorMapUltra shader 4.0.

This document will give you an overview of its features, requirements, settings and possibilities to customize.

Please read it carefully as there are so many options and preconditions that otherwise you might get totally lost…

I started writing a shader pretty simple to set up but when i added dynamic water and snow things really got complicated. So in the end the interface really got flooded by features and various settings  – i am sorry about this. But on the other hand it lets you tweak a lot of parameters making sure you get the result you want.

If you want to get started right away please head for the Getting Started Guide.

Learn more about the included Demo.

In case you encounter any problem please have a look at the section Known Issues and FAQ.

Table of Content

Colormap Ultra Terrain Shader 4.0

Table of Content

Features

Color Map

Up to 8 splats within a single pass

Advanced height based blending

Multi UV Mixing

Parallax Mapping or Tessellation

Dynamic Weather

Terrain Holes, Snow and Wetness Mask and manually painted Puddles

Instancing

Requirements

The Demo

Texture Blending

Getting started

Prepare the needed Textures

Assign the Color Map Ultra Shader

Setting up advanced features

Adding a Color Map

Setting up Multi UV Mixing

Adding Snow and Wetness/Water

Color Map Ultra Script

Header

Base Settings

Tiling and Fading

Color Map

Height Normal Map

Perlin Noise

Global Water Settings

Global Snow Settings

Fixed Snow

Global Snow and Water Detail Normal

Parallax Extrusion

Tessellation and Extrusion

Misc

Detail Settings

Layer [selected Layer] Settings

Extrusion and Blending

Snow

Wetness and Water

Perlin Strength

Texture Arrays

Tools

ColorMap Painting Tool

Start Painting

Painting Terrain Holes, Puddles and the Snow/Wetness Mask

The Alpha Challenge and Photoshop

Finish your Color Map

Dynamic Weather

Dynamic water and snow

Fixed water and snow

Realistic Puddles

Layer based Puddles

Puddles influenced by Perlin Noise

Manually painted puddles

Adding static Streams

Tessellation

The bad things about tessellation

The good things about tessellation

Base Map Distance

Parallax Shader

Tessellation Shader

The Shaders

Parallax mapping

CMU4-FirstPass-Parallax

CMU4-Base-Parallax

Tessellation

CMU4-FistPass-Tessellation

CMU4-AddPass-Tessellation

CMU4-FirstPass-Parallax

Additional Shaders

Paths and Decals

Performance

Instancing

Optimizations

Known Issues and FAQ

Features

Color Map

Add a manually authored color map to get much more variety on your terrain texturing.

Up to 8 splats within a single pass

Use 4–8 detail maps or layers (including normals, smoothness and height maps – specular is defined as solid color per layer) – all drawn within a single shader pass so the terrain’s geometry does not have to be rendered twice.

Advanced height based blending

Blend detail maps or layers according to their height maps giving you a much more natural look.

Multi UV Mixing

Get rid of nasty tiling artifacts on high-frequency textures like e.g. rock using Multi UV Mixing which is supported on 2 of the 8 layers.

Parallax Mapping or Tessellation

Add more depth to your terrain using advanced parallax mapping or even tessellation.

Dynamic Weather

Add dynamically calculated and fixed snow, water and wetness to your terrain – based on Lux 2.02 snow and wetness functions which even support rain ripples and water running down the surface to add some extra touch. More >

Terrain Holes, Snow and Wetness Mask and manually painted Puddles

Cut holes into the terrain, mask snow and wetness/water accumulation or add manually painted puddles and water streams using the color map painting tool. More >

Instancing

Both shader variants (parallax and tessellation) support Unity’s new instancing feature.

Requirements

The ColorMapUltra 4.0 shader needs Unity >= 2018.3 and Shader Model 3.0. / 4.6

It supports DX11 and OpenGLCore (Metal only supports parallax mapping but no Tessellation).

Legacy OpenGL and DX9 are not supported.

WebGL is not supported.

Mobile platforms are not supported.

The Demo

Please make sure that your project is setup to use linear color space.

The package ships with a simple demo which shows a standard work in progress scenario: The terrain uses the ColorMap Ultra shader (set to parallax) in its basic configuration.

  • A Color Map is assigned but not activated.
  • A Custom Height and Normal Map is assigned but not activated.
  • Water and Snow both are deactivated.

The first thing you most likely will notice are the relatively harsh borders between the textures. This is common for any terrain shader using height based blending and CMU offers various techniques to tackle this which we will have a look into later.

But in order to get a first impression of what CMU main features do i recommend to:

  • toggle the Color Map on and off.
  • toggle the Height and Normal Map on and off and see how per pixel terrain normals may enhance the overall lighting and crispiness of the terrain.
  • set Water Mode to full and see how wetness will flood the terrain.
  • enable Snow and see how fixed snow will be added to the top of the mountains and suppressing wetness accordingly.

Both Water and Snow are driven by the settings of the Lux Dynamic Weather script. In order to tweak water and snow accumulation find the script in the hierarchy and tweak the:

  • Accumulated Wetness
  • Accumulated Cracks
  • Accumulated Puddles
  • Accumulated Snow
  • Water to Snow

Parameters.

The terrain also has a fixed snow height which makes the mountains’ tops being covered by snow. Change this by editing the Color Map Ultra script (or the material properties) and tweaking the Fixed Snow Start Height or Fixed Snow Strength.

Next you might enable instancing on the terrain or change the shader from parallax to tessellation.

The Path in this scene uses the simple Path and Decal shader – a shader which blends albedo, specular and normals within the gbuffers in one single pass thus is does not support proper smoothness and occlusion. It also does not accumulate wetness (wetness comes from the underlying terrain) nor snow. Nevertheless it might be useful here and there as it is cheap to render. The forward version uses alpha blending thus it does not support shadows.

Texture Blending

As mentioned before assigning CMU to a given terrain just may look super strange due to height blended textures and the resulting harsh edges. While keeping height based blending intact we can still soften the borders by:

  • adjusting Sharpness for each layer in the Detail Settings
  • or using a blurred Color Map directly derived from the original texture colors (like the provided “ColorMap Original blurred.png”).

Getting started

This section will guide you through the basic process of creating and assigning a custom terrain material using the Color Map Ultra shader and covers the following topics:

  1. Prepare the needed Textures
  2. Optimize the order of your terrain detail textures
  3. Assign the Color Map Ultra shader

Prepare the needed Textures

Please note: The shader does not support individual tiling and stores detail, normal and height maps in texture arrays so all textures of a specific type must have the same size and format. You may simply use the built in texture import settings to make your textures fit.

Check “Overwrite for..”, then select a proper “Max Size” and set the “Format” so that it matches all other e.g. detail albedo maps.

In order to get most out of the shader you need the following textures:

4 up to 8 Detail Maps like grass, sand or rock. Albedo is stored in RGB whereas Smoothness goes into the alpha channel. They should be imported as “Default” texture either using DXT5 or BC7 compression. I do not recommend to use crunching as this will increase memory usage and slow things down.

4 up to 8 Normal Maps Regular normal maps imported as such.

4 up to 8 Height Maps Grayscale RGB height maps. As the height is taken from the green color channel the height maps should be imported using “sRGB (Color Texture)” unchecked.
Height Maps are stored as uncompressed ARGB texture array so you most likely want to use a lower resolution along with these textures in order to save texture space. Using rather low res or even blurred height maps also will reduce aliasing.

Hint: Height Maps drive both blending and water accumulation so having a lot of variation within each single height map will give you much more lively texturing. If you have a look at the “Forest Ground [Height]” map from the example content e.g. you will see that i simply added some “Clouds” on top of the original height map to not only blend and extrude the small outstanding details but to get variation on the flat parts as well.

Especially when using tessellation it is important to bias your height maps properly in order to make collision more accurate:
- A value of 50% gray in the height map represents the original “non displaced” height.
Collision as well as the rendering result will be best.
- Pure white will pull vertices upwards: The terrain will most likely intersect with any geometry placed on top.
- Black will push vertices downwards: Geometry placed on top of the terrain will float.

        Hint: If the contrast of two overlapping height maps is very high you may get floating details when using the parallax shader or pretty sharp edges and texture stretches when using the tessellation shader.

Color Map In case you want to use a custom Color Map you will have to prepare one too. Alternatively you may create one from the assigned Detail Maps inside Unity using the ColorMap Painting Tool.

RGB store color information..

Alpha stores various information like:

  • terrain holes (Alpha = 0.0),
  • puddles (Alpha = 0.37)
  • and the snow/wetness mask (Alpha = 1.0).
    So the default value in the alpha channel must neither be 0.0 nor 1.0 – but 0.75 (which would be 191/191/191 in sRGB).

You may simply import your Color Map as RGB without any alpha channel and let Unity apply a correct alpha value or you will have to set the alpha value properly.

Please have a look at the Alpha Challenge and Photoshop to find out more about creating a correct alpha channel using Photoshop.

Perlin Noise The Perlin Noise texture is used to add bumps at far viewing distances, it masks and breaks up the snow and water accumulation and stores the smoothness map for snow. So actually it stores three different “textures”: the perlin normal in GA, the snow and wetness mask in B and the snow smoothness in R.
The Perlin Noise texture must be imported as “Texture Type” = “Advanced” and “Bypass sRGB Sampling” checked.
If you use other Lux based shaders supporting dynamic weather please make sure that the snow and wetness mask stored in the blue color channel matches to one you use on the other Lux shaders. Otherwise the amount of accumulated snow will not match.
If you do not assign a custom Perlin Noise texture the script will assign the default one automatically.

Global Snow and Water Detail Normal: If you want to support snow on the terrain you will need a detail normal texture which must have the same size as the Normal Maps mentioned above. This normal will be used for snow at near viewing distances and also acts as Water Flow Normal if the shader’s Water Mode is set to Water Flow or Full.
Please note that the package ships with a default Snow and Water Detail Normal which will be assigned automatically in case you do not add your own.

Assign the Color Map Ultra Shader

Assuming you have already created a terrain and added min. 4 – max. 8 detail textures assigning the color map ultra shader will need the following steps:

  1. Add the Color Map Ultra script to your terrain.
  2. It will show up in a quite compact way with only two buttons: Create Terrain Material and Update Layers.
  3. Hit Create Terrain Material.
  4. Unity will start to read all assigned textures, grab the average color values (which are needed for correct color map blending) and set up a new material with some default values. This might take a little while...
  5. When done you will be asked to name and save the new terrain material.
  6. Once the material has been created and saved the script inspector expands and shows its various feature sections – but you will not notice any difference on your terrain as the script does NOT assign the material automatically.
  7. Either assign the material manually or hit the button Assign Terrain Material (recommended).
  8. If all textures are in the proper format and size CMU should now take over the terrain shading which should look a bit different from the built in standard shader.
    In case the texture do not fit you should get some prompts in the console.
  9. Assuming that all went well the inspector now should look like shown below.:
    Please notice that all fold outs except from the fold out
    Texture Arrays are closed.
    The Texture Array fold out shows 2
    temporarily created arrays for the detail and normal maps (indicated by just a symbol for the array but no name). The heigh map array has not been created as no heightmaps are assigned yet.
    Make sure you now
    save both texture arrays as otherwise shading will be corrupted if you enter play mode or close the scene.


  1. In order to assign the missing height maps open the Detail Settings section and make sure that Per Layer Settings is activated.
  2. Click through the layers represented by the small thumbnails to show up the settings for each layer and assign the height maps.
    Height maps have to be assigned to the 3rd texture slot.

  3. If all height maps are assigned go back to the Texture Arrays section and first hit Height Maps → Update Array, then Save Array.

Now your terrain should be rendered using the parallax CMU shader and do proper height based blending.

Please note: You can always assign texture arrays manually like from other terrains you have already created. Sharing arrays between terrains will reduce the needed texture memory enormously. You can also use third party tools to create and manage the texture arrays like the great and free Texture Array Inspector from the Asset Store.

In order to assign an array manually simply drag it into the proper slot in the Texture Array fold out.

Setting up advanced features

This section will give you a brief introduction to the advanced features of the shader and covers the following topics:

  1. Adding a Color Map
  2. Setting up Multi UV Mixing
  3. Adding Snow and Wetness/Water
  4. Finish your Terrain

Adding a Color Map

In case you have prepared a custom color map you may simply assign it to the Color Map Ultra script inspector under Base Setting Color Map and enable it by checking the corresponding check box.

In case your Color Map does not contain an alpha channel the script will prompt a warning and offer the possibility to fix it.

In case your Color Map contains an alpha channel you have to make sure that alpha is set to 0.75 as otherwise the whole terrain might be clipped or water and snow might get totally masked. See Prepare the needed Textures for details.

Then tweak the Color Map related properties to your liking Details >

You have to assign a color map if you want to use features like cut holes or the snow and wetness mask. In case you have none you may add the ColorMap Painting Tool to your terrain and create a simple Color Map based on the detail textures which will more or less look like the built in Base Map.

Setting up Multi UV Mixing

The shaders support Multi UV Mixing on layer3 and layer7. These layers get sampled at their regular size at near distances and gradually scale up towards the Detail Distance in order to reduce tiling artifacts on high-frequency detail maps like rock.

It does not make much sense to use this feature on low-frequency textures like grass so assign detail map 3 and 7 wisely. Tip: If your low frequent textures are assigned to other layers than layer 3 or 7 you may go to the Tools fold out and swap layers easily.

near.jpg

mid.jpg

far.jpg

Near: Fully detailed rock texture.

Mid: Detailed and upscaled rock sample mixed together.

Far: Only the upscaled sample is rendered.

In order to control Multi UV Mixing you will have to tweak the Detail Distance and its Fade Distance in Base Settings which determine the distance and fade range at which detail textures supporting Multi UV Mixing will fully show up using their upscaled sample.
Detail Distance also determines the distance for blending the detail snow normal map into the perlin normal and blurring the detail snow mask in order to reduce tiling artifacts.

Next you will have to set up the scale at which you want layer3 and layer7 to be sampled. Do this by opening the Detail Settings, selecting layer3 or layer7 and adjusting the Shared Far UV Multiplier: Values below 1.0 will scale up the texture.

You can also tweak the Shared Far Normal Strength which lets you adjust the strength of the upscaled normal map.

Adding Snow and Wetness/Water

The Color Map Ultra Shader supports dynamic snow and water accumulation based on Lux’s dynamic weather functions. In case your are not familiar with Lux’s dynamic weather functions you may consider reading the introduction to Dynamic Weather first.

Otherwise you may simply start and activate snow and water/wetness support on your terrain material:

  1. Make sure that the Lux Dynamic Weather script is added to your scene as it drives some of the basic parameters.
  2. Depending on what you want to set up – water or snow – you will have to adjust the weather conditions in the Lux Dynamic Weather script inspector accordingly.
    Let’s start with snow:
    - Deactivate
    Script Controlled Weather
    - Set
    Accumulated Snow to something like 0.6
    - Make sure that
    Water to Snow is set to 1.0 (as this controls melting snow/freezing water)
    - Check
    Snow Start Height and if your terrain is not below that height.
  3. Now go back to the Color Map Ultra script, open the Base Settings → Global Snow Settings fold out and check Enable Snow.
  4. According to given weather conditions your terrain should be covered with snow.
    If not please check the settings of the
    Lux Dynamic Weather script.
  5. Tweak the Global Snow Settings to set up e.g. Fixed Snow and tweak the appearance of snow. Details >
  6. Tweak the per Layer snow settings like Snow Amount and Snow Slope Damp to get a more lively snow distribution. Details >
  7. Adding Wetness/Water will need you to activate this feature in the Base Settings → Global Water Settings as well.
  8. Simply change Water Mode from None to Full.
  9. Then tweak the settings of the Lux Dynamic Weather script by adjusting Accumulated Wetness, Accumulated Water in Cracks and Accumulated Water in Puddles. You have to make sure that Water to Snow is set to 0.0 as otherwise all wetness/water would be frozen.
  10. Now your terrain should be flooded by wetness and water and you can start to tweak the Global Water Settings Details >
  11. Tweak the Per Layer Water Settings like Water Slope Damp or Water in Cracks by opening the Details Settings Details >

Learn more about the Lux Dynamic Weather script here:

https://docs.google.com/document/d/19LM0qbnUSrdgR_Eb5eWTBLbPfiEAoM2jijPV_-7GZKg/edit#heading=h.exk2poruibm4

Color Map Ultra Script

The Color Map Ultra Script helps you to set up your terrain material, create the needed texture arrays and fine tune the settings.

It is more or less an advanced material editor which you do not need in your built as all information is stored in the created terrain material itself.

Header

Terrain Material The material which is currently assigned to the script. If it does not match the material assigned to the terrain the script will prompt a warning.

If you manually assign a new or different material than the one the script has used, the script will prompt a warning and let you read in the values from the newly assigned material.

Create Terrain Material Creates a new Terrain Material which uses the Color Map Ultra shader, adds it to the script but does not assign it to the terrain.

Update Layers Syncs the terrain’s layers to match the Color Map Ultra settings. Especially important in case you do not use a Color Map as Unity will create the Base Map based on the prototype tiling values.
Simply hit this button in case the tiling of the base map does not fit the tiling of the detail textures or you have manually assigned new textures.

Shader Lets you switch between Parallax and Tessellation.
The visibility of properties below gets affected by the selected shader. So in order to set up your material for both shader variants you will have to set it up for the parallax version and the tessellation version. Both settings will be stored in the material so you can easily switch between shaders at runtime by just assigning another shader to the material.

Base Settings

The Base Settings cover the global terrain specific settings.

Tiling and Fading

Detail Texture Size(m) Size of the detail maps. Please note that the shader does not support individual tiling due to performance reasons.

Splatting Distance The maximum distance at which detail textures will be rendered at full resolution. Beyond this distance only the color map or base map will be used for efficiency. The lower the splatting distance the faster the shader will be.

Fade Distance Distance over which the shader will blend between the full resolution detail maps and the color/base map.

Detail Distance The distance at which detail textures supporting Multi UV Mixing will fully show up using their upscaled sample.
It also determines the distance for blending the detail snow normal map into the perlin normal and blurring the detail snow mask in order to reduce tiling artifacts.

Fade Distance Distance over which the shader will blend between the full resolution detail maps using Multi UV Mixing and their upscaled versions as well as between the snow detail normal and the perlin normal.

Color Map

Color Map (RGBA) Texture that is used as Color Map (if enabled). In case the assigned texture does not contain an alpha channel the script will prompt a warning and offer the possibility to fix this problem.

Enable Color Map If enabled the shader will mix the detail maps with the assigned color map. Otherwise it will use the built in Base Map.

Near Strength Determines the influence of the color map as far as tinting the detail maps on near viewing distances is concerned.

Detail Recovery Lets you recover the original detail color (to a certain amount…) if the given pixel is rendered using a layer based on height blending and not the original splat map value. Imagine a piece of rock poking out of grass due to the rocks height map: The Color Map will most likely have some shade of green so the rock would be tinted green…

Depth Influence Influence of the given depth on Detail Recovery.

Height Normal Map

By creating a custom height normal map for the terrain we can mimic Unity’s per pixel normals without using instancing on the terrain.

Height Normal Map The assigned Height Normal Map.

Create Hitting Create lets you create a combined height normal map.

Enable Height Normal Map Check this to actually make the shader sample the custom Height Normal Map. If instnacing is enabled this will be skipped.

Please note that if the Height Normal Map is enabled ambient lighting from Spherical Harmonics will be off - just like it will be if instaning is enabled.

Perlin Noise

Perlin Texture Texture which stores the perlin normal in GA, the snow and wetness mask in B and the snow smoothness in R. If you do not assign a custom one the script will assign the default one automatically.

Perlin Size (m) Size of the large scale perlin sample.

Perlin Detail Size (m) Size of the small scale perlin sample.

Please note: Large and small scale sample will be added together to generate the final perlin normal as well as snow and wetness mask.

Perlin Normal Strength Global factor which controls the final perlin normal. Gets multiplied with per layer perlin strength settings.

Perlin Height Strength Global factor which controls the influence of the perlin texture on the final calculated height. Will affect water accumulation (both in static and dynamic puddles as well as cracks) and parallax extrusion. Displacement using the tessellation shader will not be influenced.

Perlin Height Strength = 0.0

As CMU does full height based blending the repetition of very bright or dark values in the heightmap leads to very visible repetitions in shading in case you use rather smooth gradients between different detail textures.

Perlin Height Strength = 0.5

Modulating the sampled height by perlin noise (rgba) breaks up this tiling artifact to a certain amount. On the other hand it leads to quite unpredictable results: If a certain texture will appear more or less often just depends on its position in the layer stack and the connected channel in the perlin noise texture.

Global Water Settings

Water Mode Lets you activate (dynamic and static) water on the terrain.

  • None No water will be rendered at all: cheap.
  • Simple Only the water accumulation will be calculated and applied. Accumulated water is flat: more costly.
  • Rain Ripples Refraction and bumps from rain ripples will be added to the flat water: even more costly.
  • Water Flow Refraction and bumps from flowing water will be added to the flat water: even more costly.
  • Full Refraction and bumps from rain ripples and flowing water will be added to the flat water: most costly.

Please note: If you enable/disable Water/Snow you should rebuild the Normal Array as the snow/water normal only gets included if snow/water is enabled.

The following properties are only available if Water Mode is not set to None.

Water Detail Distance The maximum distance at which water details such as rain ripples and water flow will be rendered. Make sure that this distance is pretty short like 30m.

Fade Distance Distance over which the shader will fade out water details.

Perlin Influence on Wetness/Water

in Cracks Determines the influence of the perlin noise texture (here: blue color channel which is the snow/wetness mask) on dynamic water accumulation. Fixed Water is not influenced.
in Puddles Determines the influence of the perlin noise texture (here: 1 - green color channel) on dynamically accumulated water in puddles. Fixed Water in puddles is not influenced

Dampened Smoothness Smoothness of water at far distances and steep viewing angles (calculated based on the given detail mip level). Lower smoothness values help to reduce specular aliasing.

Fixed Water in Puddles Amount of water in manually painted puddles which does not get dried/frozen.

Fixed Water Flow Speed Multiplier for global flow speed on fixed water.

Flow Normal Tiling Tiling factor for the Water Flow Normal per meter.

Flow Normal Strength Effects the final normal getting written out for the lighting function but also influences “Flow Refraction”.

Flow Refraction Amount of refraction the flow normals add to the final texture look ups of the detail maps.

Flow Speed Speed of water running down the surface.

Flow Interval The shader lerps between 2 offsetted and looped water flow animations. So this parameter determines the duration of each of the 2 loops.

Please note: Rain ripples are controlled globally by the Lux Dynamic Weather script.

Global Snow Settings

Enable Snow Lets you enable/disable dynamically accumulated and fixed snow on the terrain.

Please note: If you enable/disable Water/Snow you should rebuild the Normal Array as the snow/water normal only gets included if snow/water is enabled.

The following properties are only available if Snow is enabled.

Snow Normal Strength Strength of the detail snow normal.

Snow Far Normal Strength Strength of the far snow normal which is derived from the perlin normal.

Snow Edge Feather Lets you smooth the edges of the accumulated snow.

Please note: Snow color and diffuse scattering are controlled globally by the Lux Dynamic Weather script.

Fixed Snow

Fixed snow is not driven by script input: It is not calculated based on the temperature or the amount of accumulated snow but simple according to the given height in world space of the rendered pixel. Fixed snow will not melt, however dynamic snow will accumulate on top (which will melt).

Use Fixed Snow to cover high mountains permanently with snow.

Fixed Snow Start Height(m) Height at which fixed snow will start.

Fade Range Distance over which fixed snow will be faded in starting from Fixed Snow Start Height and wetness/water will be faded out.

Fixed Snow Strength Amount of fixed snow.

Global Snow and Water Detail Normal

Only available if Snow is enabled and/or Water Mode is not set to None.

Detail Normal Normal Map for snow at near distances and water running down the surface. Its size has to fit the size of the normal maps assigned to the details.
Please note that the package ships with a default Snow and Water Detail Normal which will be assigned automatically in case you do not add your own.

Parallax Extrusion

Only available if you use the parallax shader.

Extrusion Amount of parallax extrusion if you use the parallax shader. Gets multiplied with the per layer extrusion settings.

Tessellation and Extrusion

Only available if you use the tessellation shader.

Tessellation Factor Amount of subdivisions applied in the regular shader passes.

Tessellation Shadows Amount of subdivisions applied in the shadow caster pass. Keep this as low as possible.

Extrusion Global multiplier for the extrusion. Do not go crazy here as high values will make collision less accurate and displace details like grass. Recommended values are 0.1 – 0.3.

Tessellation Distance Distance at which the shader starts to tessellate the terrain. Keep this as low as feasible. DICE e.g. recommends a tessellation distance of 16 meters.

Extrusion Range Range over which the shader will extrude the vertices based on the given height. Extrusion starts at the Tessellation Distance.

Mip Level Mip Level at which the height maps will be sampled when it comes to displacement. So you may have high res height maps to control texture blending but sample them at a lower mip level to smooth out the displaced geometry.
0.0 = regular mip level / > 0.0 = higher mip level = blurry height map samples.

The following parameters only effect snow rendering.

When tessellation is active we have the per vertex normals - which do not fit the displaced geometry at all. Usually the shader strengthens the per pixel normals from the assigned normal textures to make look the displaced geometry lit properly. However when covered by snow we want to reveal the snow normals instead. So when tessellation is active the shader lets you pick a blurred and scaled detail normal from the underlying terrain and combines it with the snow normal.

Snow Normal Bias Lets you blur the normal of the underlying terrain.

Snow Normal Strength Lets you scale the normal of the underlying terrain.

Misc

Occlusion Strength Strength of the approximated ambient occlusion.

Mip Bias Lets you adjust the mip level at which the detail maps will be sampled:

1.0 = regular mip level / values > 1.0 = higher mip level = blurrier samples.
Especially when using tessellation very crisp normals can produce a lot of noise. So using a higher Mip Bias might help to stabilize the final image.

Detail Settings

The Detail Settings fold out covers all detail or layer specific settings and offers two different views:

Per Layer Settings If selected the editor shows the different layers as small thumbs and the detail settings for the chosen layer.

Per Feature Settings If selected the editor shows the detail settings for all layers grouped by feature in various foldouts.
Hint: This view offers the possibility to edit multiple parameters of different layers at the same time: Activate the checkbox next to the layer’s thumbnail (hit “a”ll to select all layers, hit “n”one to deselect all layers) in order to make changes added to another layer being relatively applied to the selected layers as well.

As both views more or less offers the same settings i will only cover the Per Layer Settings view here. The Per Feature View offers the same parameters in a different order though.

Layer [selected Layer] Settings

The following properties are only available if you have selected Layer 3 or Layer 7 which support Multi UV Mixing:

Shared Far UV Multiplier Multiplier for the UVs at the globally defines Detail Distance. Values below 1.0 will scale the texture towards the Detail Distance to hide tiling artifacts.

Sahred Far Normal Strength Lets you adjust the strength of the upscaled normal map.

Texture Slots I haven’t labeled these... so the order is: Albedo/Smoothness, Normal and Height Map.

Ø Color (RGB) Muddiness (A) The average color value for the given detail Texture stored in RGB which is needed to apply correct color correction if you have assigned a color map.
Alpha stores the Muddiness: The higher it is the more the albedo will be tweaked towards the average color value based on the given amount of accumulated water.

Grab Pressing Grab will make the script automatically get the average color value and smoothness from the assigned texture.

Whenever you change a texture you will have to do so.

Specular (RGB) Ø Smoothness (A) Specular Color for the selected detail map in RGB. Alpha stores the average Smoothness which is used beyond the splatting distance if you have assigned a color map. In case no color map is assigned smoothness is taken from the built in base map alpha channel.

Extrusion and Blending

Height Multiplier for the height read from the heightmap. This parameter influences the height based blending and water accumulation. It also defines the Base Height used by Extrusion.

Sharpness Lets you smoothen the height based blending. Especially useful in case you do not use a color map.        

Extrusion Multiplier for the Base Height which influences the amount of parallax extrusion or vertex displacement when using the tessellation shader.

Please note: It is a bit tricky to set up Height and Sharpness as changing the values often leads to unexpected results... So it is best done in the Per Feature Settings view as you can easily tweak several parameters at once.

Snow

The following properties are only available if Snow is enabled.

Snow Strength Multiplier for the global snow strength. Lets you add more or less snow per layer.

Snow Slope Damp  Determines the influence of the world normal up vector on snow accumulation: A value of 0.0 would accumulate snow even on faces pointing downwards whereas higher values will shrink the snow accumulation towards faces pointing upwards. The value will be expanded to a range of 0 – 8 within the shader.
Hint: Huge differences between Snow Strength and Slope Damp on layers blended together might lead to strong tiling artifacts as the high-frequency height maps which drive texture blending will get more and more important.

Wetness and Water

The following properties are only available if Water Mode is not set to None.

Water Slope Damp Determines the influence of the world normal up vector on water accumulation: A value of 0.0 would accumulate water and wetness even on faces pointing downwards whereas higher values will shrink the water accumulation towards faces pointing upwards.

Wetness Multiplier for global wetness strength.

Water in Cracks Multiplier for globally accumulated water in cracks.

Water in Puddles Multiplier for globally accumulated water in puddles.

Fixed Water in Puddles Multiplier for globally defined water in fixed puddles.

Perlin Strength

Near Strength of the perlin normal map at near viewing distances that gets added on top of the detail normal map.

Far Strength of the perlin normal map at far viewing distances.

Texture Arrays

This fold out lets you create or update the needed texture arrays.

The Color Map Ultra shader uses texture arrays to store all detail albedo/smoothness, normal and height maps. For this reason all textures of a given array have to fit in size – but different arrays may have different resolutions and sizes.

Please note: Whenever you change, delete or rearrange your detail textures on the terrain you will have to update the texture arrays.

Actually the shader uses 5 texture arrays:

Detail Maps: Stores the albedo/smoothness textures. These Textures have to fit in size and import format.

Aniso Lets you set the Aniso Level it which the array gets imported. I recommend values between 2 - 4. You can of course always change this in the import settings as well.

Normal Maps: Stores the normals for layers. These Textures have to fit in size and import format.

Please note that this array also stores the detail snow normal, so the detail snow normal has to fit in size as well.

Aniso  Lets you set the Aniso Level it which the array gets imported. I recommend values between 2 - 4.

Height Maps: Stores the height maps for all layers, so all height maps have to fit in size and import format.

Please note that this texture array is stored as uncompressed ARGB texture array so you might want to use a lower resolution here in order to save texture space.

Aniso  Lets you set the Aniso Level it which the array gets imported. I recommend values between 2 - 4.

Update Array Hitting this button will update and assign a temporary texture array to give you a quick response. This temporary texture array will get lost on entering playmode a saving the scene. So you will have to save the array.

Save Array Lets you write the temporary texture array to disc.

Please note: If you Update but not Save an array it will be cleared if you save the scene or enter playmode so it will appear as gray texture on the terrain. Simply save the array.

Tools

Export Splat Maps Click to export the current splat maps assigned to the script/shader/terrain.

Swap Details Will swap the detail layers specified in the popups in front of the button. It will affect the terrain’s splat maps and detail textures and swap also the per layer settings.
Use this function e.g. in case you want to change the detail textures which support MultiUV Mixing.
Please note: Swapping detail textures will automatically update the texture arrays to give you “instant” preview – however you will have to save them manually.
Please note: You have to make sure that all detail, normal and height maps are assigned properly. Otherwise the script will throw errors.

ColorMap Painting Tool

This pretty simple tool gives you the possibility to paint onto your color map directly within Unity.

And although it does not provide a lot of features I think it is pretty useful in order to e.g. redefine or even add paths or just some dry grass by painting some shades of brown on top of a green meadow.

It also lets you paint to the alpha channel to define terrain holes, puddles or streams and the snow/wetness mask.

Start Painting

Find the ColormapPaintingTool script and add it to your terrain.

If your terrain material does not have any color map assigned yet the tool will prompt a warning and offers the possibility to generate one from the currently assigned detail and splat maps. This color map will more or less look like the built in Base Map.

The size is set to match the terrain’s Base Map settings.

The generated color map gets automatically applied to your terrain and assigned to the colormap painting tool as well.

Alternatively you may assign a Color Map to the tool’s texture slot at the bottom of the inspector. In this case the script lets you either send the assigned texture to the terrain or create a new one from the currently assigned detail and splat maps.

If your terrain material already has a color map assigned the script will grab it and you can start painting right away.

Depending on the alpha channel of your Color Map shading of the terrain might get totally corrupted like it might show up holes or snow and wetness might not be rendered at all. This is caused by the fact how the Terrain shader interpretes the alpha channel:

0% white marks holes.

37% white marks puddles or fixed water.

75% white default.

100% white snow and wetness mask.

Reset the alpha channel to the default value as needed by the shader by activating the Alpha Tab. Then select Default. Now you may either start to paint correct default values to the alpha channel or simply click the Flood button.

So now that you have a proper Color Map assigned to both the terrain and the script you can start painting.

Chose between the two different painting modes Color and Alpha, select a color you want to paint with or feature you want to paint into the alpha channel, then hit Start Painting.

When done hit Stop Painting and make sure that you Save the Color Map – as otherwise all your efforts will be lost closing unity or leaving the scene.

Color Lets you paint to the rgb channels.

Color The color you will be painting with.

Alpha Lets you paint to the alpha channel.

Default If selected you will paint the default value to the alpha channel

Hole If selected you will paint terrain holes.

Mask If selected you will paint the snow and wetness/water mask.

Puddles If selected you will paint puddles.

Brush Size, Opacity and Hardness should be self explaining.

Start Painting Press to enter Paint Mode. Then go to the Scene View and start painting.

Create Color Map If none is assigned you may create one from scratch. The result will more or less equal the built in base map and does not show up any fancy details. You will have to add these manually.

Copy Alpha / Update Color Map Lets you update the color map according to the given detail distribution while keeping all changes you made to the alpha channel (like painting holes).
If you uncheck
Copy Alpha a new color map will be created and alpha will be set to default.

Important: Do not forget to save your efforts by clicking "Save Color Map".


Painting Terrain Holes, Puddles and the Snow/Wetness Mask

As the terrain shader uses texture arrays we could easily add more and more textures to support various features but doing so would only solve the problem of the number of available texture samplers – not the problem of memory, bandwidth and work in the shader.

So i decided to pack all features mentioned above just into the alpha channel of the Color Map – which in most cases works well but definitely has some drawbacks:

Due to texture filtering one feature will leak into another.

So let’s have a look of how the alpha channel is used:gradient.png

0% white marks holes.

Leak

37% white marks puddles or fixed water.

Leak

75% white default.

Leak

100% white defines the snow and wetness mask.

So holes will leak into puddles – resulting in holes always having “wet” borders. This usually is no problem as most likely you will cover the borders of the terrain holes with some geometry anyway.

Puddles will leak into default – which will give us nice and smooth borders, fine!

Default will leak into the snow/wetness mask – which will give us nice and smooth borders, fine!

The problem arises in case you paint a puddle next to a snow and wetness mask:
The puddle will leak into default – and default then will leak into the mask. But in a “real world scenario” this should never ever happen...

The Alpha Challenge and Photoshop

You can paint to the Color Map in Unity, export it to Photoshop and edit it there. It just works fine – except for the alpha channel:

Even if you input a “correct” alpha channel created using the Colormap Painting Tool it will most likely be corrupted when you save the Color Map in Photoshop.

This is caused by Photoshop’s color management which also affects the alpha channel(!?) as discussed here:

https://twitter.com/seblagarde/status/685105564372844544
https://twitter.com/seblagarde/status/685124306104377345

When using Photoshop make sure that your alpha channel will not be color corrected as described here:

http://retrofist.com/sgray/

Using Substance Painter seems to be fine though.

Finish your Color Map

As the Color Map has to be stored as uncompressed ARGB png during the editing process you should convert it to any other compressed texture format before you start building your built in order to save memory.

So when done, remove the script and select your edited color map texture in the project tab. Then switch the import settings in the inspector just to your needs.

Dynamic Weather

The terrain shader is based on Lux’s dynamic weather functions – however as the shader is very complex and already pretty expensive i added some simplifications and special tweaks needed by such large objects like terrains:

Usually water and wetness should be masked by snow. But accurate snow accumulation needs per pixel normals to be calculated up front while wetness has to be calculated before the per pixel normals are sampled as these might be refracted by water ripples and water flow...

So instead of sampling the per pixel normals twice (as Lux does) water and wetness is simply masked by the fixed snow start height.

This ensures that you will not get any water ripples on faces above the given “Fixed Snow Start Height” – dynamically accumulated snow however will be covered by wetness and refracted by rain ripples and water flow. And in fact: This does not look that bad :-)

Dynamic weather consists of wetness/water and snow – both generally controlled by global script input such as temperature and rainfall over time as well as material and object specific properties like world normal, height or slope damp.

Dynamic water and snow

Dynamic water and snow accumulation is driven by the “Lux Dynamic Weather” script which calculates the values of accumulated wetness, water in cracks, water in puddles and snow based on temperature and the amount of fallen water combined with individually accumulation rates for each of the parameters.

Wetness adds a thin layer of water which will mostly influence the smoothness and albedo of the underlying surface. Normals are tweaked just a tiny little bit.

Water in cracks is accumulated based on the height map of the given detail map and will influence the normals.

Water in puddles is accumulated based on the given puddle mask – which is generated from the manually authored color map’s alpha channel and/or puddles calculated from the global perlin texture.

Each detail map or layer lets you specify a Muddiness factor. The higher it is the more the albedo will be tweaked towards the Average Color Value based on the given amount of accumulated water.

The amount of accumulated water including wetness, water in cracks and puddles can be adjusted per detail map. Each detail map has its own water slope damp factor.

Accumulated water can be globally masked by the perlin texture in order to break up tiling.

Snow distribution is calculated based on the amount of accumulated snow (driven by script input), the given y-position in world space, the surface normal per pixel in world space and the per-detail map world normal damp factor. In order to create a more lively snow accumulation all this finally is combined with a globally defined snow mask which gets sampled twice using different frequencies: a low frequency to control the large scale snow accumulation and a high frequency in order to add details to the snow distribution mask.

Snow will tweak the final albedo towards the globally in the Lux Dynamic Weather script defined snow color, smoothness towards the snow snow smoothness texture and the normal towards the defined snow detail normal.

Fixed water and snow

Next to the dynamic water and snow accumulation you may specify a fixed water and snow amount.

Use this feature to e.g. always cover mountain tops with snow.

Or create “static” puddles or water streams – which you would have to add manually to the color map’s alpha channel.

Please note: Static puddles or water streams are only supported if Enable Color Map is checked.

Realistic Puddles

As the shader does not know about the terrain’s geometry, its hollows or basins it can not calculate realistic puddles automatically. But there are various techniques to achieve a proper result anyway.

Layer based Puddles

The default behaviour of the shader is “Layer based Puddles” – which only takes the per layer defined “Water in Puddles” into account. So you may already get pretty nice and realistic results in case you “virtually” assign one, two, … textures to basins or hollows — which in fact is not that absurd as detail textures usually should be mapped to certain geometric conditions.

In case you may reserve one or two detail textures to be mostly used on basins you could set the “Water in Puddles” or “Fixed Water in Puddles” parameters for these textures to > 0.0 while all other textures would use values around 0.0. Bingo.

Bildschirmfoto 2016-06-17 um 22.24.41.png

Layer based water accumulation in puddles The layer or detail map which is used to shade the water eroded parts of the terrain uses a rather high value as far as “Water in Puddles” is concerned while all other layers use lower values: In the end your terrain gets flooded according to your splat maps showing up some kind of streams according to them.

Puddles influenced by Perlin Noise

Break up the pure layer based puddle distribution by raising the “Perlin influence on - Water in Puddles” parameter: Doing so will take the per layer defined “Water in Puddles” amount into account and combine it with the perlin noise texture.

Bildschirmfoto 2016-06-17 um 22.31.42.png

Raising the Perline Influence on Water in Puddles will break up the shape of the puddles defined by the splat maps.

Manually painted puddles

You will get more control over puddles by painting them manually to the Color Map using the Colormap Painting tool.

Water accumulation on manually painted puddles is driven by:

  • the global and the per layer “Fixed Water in Puddles” properties and will mask snow according to the water amount.
  • script input and dynamic weather conditions. It will never go below the value specified in “Fixed Water in Puddles”. So if “Fixed Water in Puddles” > 0.0 manually painted puddles will never completely dry if it stops raining or the temperature goes below 0.0.

Fixed water accumulation on manually painted puddles does not react to “Water Slope Damp” (as specified in “per Layer / per Feature settings”) – while dynamic water accumulation does.

Hint: In order to make manually painted puddles fully react to script input and the dynamic weather conditions simply set “Fixed Water in Puddles” to 0.0.

Bildschirmfoto 2016-06-17 um 22.43.15.png

Manually painted puddles (quick and dirty) at the edges of the rocks Flood certain areas of the terrain by painting puddles into the color map.

Manually painted Puddles

Layer based Puddles

Distribution

Manually painted into the Color Map

Controlled by splat maps combined with Perlin Map

Masked by snow

no

yes

Mask snow

yes

no

Dry / freeze

Never below “Fixed Water in Puddles”

yes

Grow

yes

yes

Adding static Streams

In order to add “static” streams you will have to manually paint “puddles” and set the amount of “Global Water Settings” -> “Fixed Water in Puddles” > 0.0.

Raising the amount of fixed water will immediately flood all painted puddles too which may not be what you want. So in order to determine between manually painted “dynamic puddles” and manually painted “static streams” or “static puddles” you can adjust the amount of “static water” per layer.

This means that you would have to choose one layer as “background” for your streams and set the amount of fixed water of this layer to e.g. 1.0.

However there should not be any puddles painted onto this layer which you want to be grow dynamically as they will be flooded as well.

For all other layers which do not act as background for static streams or puddles you should set the amount of “static water” to 0.0.

Bildschirmfoto 2016-06-10 um 16.47.47.png

Bildschirmfoto 2016-06-10 um 16.48.08.png

Bildschirmfoto 2016-06-10 um 16.48.39.png

Painted Stream on dry terrain

Due to the amount of fixed water on the rock texture which acts as background of the stream

the stream shows up even if the terrain is fully dry.

Painted Stream on wet terrain

According to the amount of fallen water cracks and puddles on all

other layers get flooded.

Painted Stream on snowy terrain

Static water of the streams masks snow.

Tessellation

Tessellation is great. It looks outstanding and will most likely immediately improve the look of your terrain by an amount you could not imagine before. So why is it still beta?

Because tessellation simply does not work properly on terrains :-(

The bad things about tessellation

I am not aware of any terrain shader supporting tessellation which would not produce cracks. Whenever you start to tessellate a Unity terrain you will get small 1px sized spots where the skybox looks through. These spots are not very visible when you have a lively decorated terrain (e.g. having a lot of grass added on top) and daytime scenes.
But as soon as the sun goes down, your terrain is mostly shaded while the skybox still is pretty bright these spots might get very visible.

Another reason why i am not so super excited about tessellation is collision.
You may either raise vertices, you may shift them downwards or even shift them up and down: In neither case they will fit the terrain’s collider thus third person controllers, enemies or whatever you might think of will start to float on top of the terrain. And fixing this issue is not trivial.

Not to mention that tessellation makes it really difficult to add decals.

Last but not least: Tessellation is expensive to render although it is natively supported by modern GPUs.

So you have to test tessellation and decide wisely.

The good things about tessellation

It just looks great.

Base Map Distance

Unity’s built in terrain shaders use the Base Map Distance to switch from the expensive multipass splatting first and add pass shaders to a simple base map shader which only renders the generated base map. CMU works slightly different tho and needs totally different Base Map Distance settings for parallax and tessellation.

Parallax Shader

When using the parallax shader CMU will use the CMU4-FirstPass-Parallax shader within the splatting distance as set in the CMU inspector which fades towards the Base or Color map.

Every terrain tile beyond the splatting distance should use the way more simple CMU4-Base-Parallax shader. In order to achieve this the Base Map Distance in the terrain settings should match your Splatting Distance.

Tessellation Shader

When using the tessellation shader we want to get rid of this pretty heavy shader as soon as possible. Actually as soon as it stops displacing the vertices which is defined by Tessellation Distance in the CMU inspector.

When setting the terrain’s Base Map Distance to match the Tessellation Distance CMU will fall back to the CMU4-FirstPass-Parallax shader which fades out the details towards the Splatting distance. From there on all further optimizations solely rely on dynamic branching within the  CMU4-FirstPass-Parallax shader.

The Shaders

Parallax mapping

In case you selected parallax mapping CMU will use 2 different shaders based on the distance to the camera and the given Basemap Distance in the terrain settings.

CMU4-FirstPass-Parallax

This shaders is used at near distances and draws up to 8 detail textures in a single pass. A common Add Pass shader neither is needed nor provided.

CMU4-Base-Parallax

This is the the shader that will be used beyond the splatting or better: Base Map Distance. It is a pretty cheap shader which will skip all detail texture lookups.

Tessellation

When using tessellation things get a bit more complicated :) as CMU is using 3 shaders here:

CMU4-FistPass-Tessellation

This shaders it used at near distances and draws up to 8 detail textures in a single pass. It is quite heavy and should be skipped as early as possible. For this reason the Basemap Distance should be set so that it matches the Tessellation Distance.

CMU4-AddPass-Tessellation

When using tessellation actually a second pass is invoked using this shader. This shader is rather cheap and does not do much but drawing the terrain a 2nd time - slightly lowered using a medium gray color. The purpose of this shader/pass is to hide cracks produced by the first pass. The pixel shader of this shader only gets invoked if there are any cracks.

CMU4-FirstPass-Parallax

As we still have to fade from full details to the simple colormap the shader used starting at the Basemap Distance is not a super simple one, but one which fades out details towards the color map.

Additional Shaders

Paths and Decals

The "Path and Decal" shaders are written for geometry that directly "sits" on top of the terrain like—you may guess—paths or decals which you want to fade nicely with the underlying structure.

Right now there are 2 "Paths and Decals" shader: One for forward—which should simply work even if you use deferred—and one for deferred which is named "simple". The reason for this is the fact the the simple deferred shader blends all values like albedo, specular, smoothness and normals directly within the g-buffers in just a single path which gives you:

  • wrong Occlusion
  • wrong Smoothness

But in most cases it just looks fine. And it is fast.

In case you need accurate deferred decal shaders please have a look at the free Lux shader framework which offers accurate double pass deferred decals with full dynamic weather support. The package also ships with a Lux based shader called “Terrain DeferredDecal FullFeatures” which does exactly that: It blends smoothness and  occlusion properly and allows you to accumulate water and snow properly – but it uses two passes.

But in case you use the simple shader these are the shader inputs:

Base (RGB) A simple albedo texture

Normal (RGB) A regular normal map

Specular (RGB) Smoothness (A) Expects the specular color (which should be a rather dark shade of gray) and the smoothness in alpha.

Height Map (G) A regular height map stored in the green color channel.

Height Defines the amount of parallax extrusion.

Blend Control

- Height and vertex colors: Choose this in case you have rather large geometry like paths as you will be able to control the blending by adding vertex color red in order to create very lively shapes. The assigned texture will show up according to the given height value and the assigned vertex color red. Please have a look at the "Path" in the demo scene.

- Height only: Select this in case you just want to add simple and small scaled decals. The assigned texture will show up according to the given height and "Height Cut Off" value.

Height Cut Off This is only relevant in case you have chosen: "Height only". It will let you determine which pixels of the decals show up and which will not according to their height. You may think of it like the well known "_Cutoff" parameter in regular alpha tested shaders.

Please note: Even if we blend the values in the gbuffers using this kind of decal shader might cause heavy aliasing artifacts as not all values are blended properly. For this reason the path in the demo scenes uses specially tweaked texture import settings on every single texture.
Study them carefully to get an idea of how to reduce aliasing artifacts like using trilinear filtering on pretty much any texture or fading out the normal map over its mip levels.
When using the double pass lux shader instead most of this tweaks are not needed.

Please note: The shader does not support Light Probes. So you have to make sure that “Light Probes” in the Mesh Renderer Component is set to “Off”.

Performance

Instancing

As far as i can say using Unity’s 2018.3 new instancing feature on the terrain will slow things down under most circumstances as far as GPU performance is concerned - simply caused by the fact that instanced draws may cause a lot of overdraw: They are not properly sorted front to back anymore.

In order to get around this you will have to bake occlusion. In case you are able to and actually do so GPU times might get back to where they are when instancing is disabled.

Having a look at the CPU side instancing is definitely a win as it reduces the amount of work the CPU has to do. So in case you are bottlenecked by the CPU instancing is an interesting feature.

Both CMU shader variants (parallax and tessellation) support instancing.

Optimizations

In order to get the best performance out of CMU disable all features you do not need of course.

  • Try to set the splatting distance as low as as feasible and try to hide the lowres basemap by fog.
  • Think about texture sizes as this is directly connected to bandwidth: The less data you push through the GPU the faster it will render the terrain. So you may want 2K detail albedo textures, but may get away with 1K normals and even just 512x512 heightmaps. Doing so can easily save you some milliseconds on the GPU.
  • Texture filtering: Normals should use trilinear filtering at least if snow and tessellation are activated because the shader will perform a lot of blends between different mips. If they are set to bilinear filtering only you will get some very ugly popings. However if you do not need snow you may choose bilinear filtering instead giving you better GPU performance.
  • In case you use tessellation: Keep the tessellation distance as low as possible. DICE advises a maximum distance of 16m.

Known Issues and FAQ

Painting terrain textures using the built in tools: Due to tessellation you might not see the brush properly unless you zoom out beyond the tessellation distance.

Lighting or shading in general gets corrupted when entering the playmode: This might be caused by the fact that you have updated the texture arrays but not saved them. Save the texture arrays to fix this.