Export Basemap Occlusion Texture

Texture2D ExportBasemapOcclusionTexture(int resolution, bool enableHeightBasedBlend = false, float heightTransition = 0)

Bakes terrain layers Occlusion maps into one Basemap texture.

Occlusion map is calculated from Mask map's green channel. If terrain layers don't use Mask maps, then Occlusion map also cannot be baked.

By default TerrainData object doesn't use Height Based Blend feature. This is optional feature for the terrain material and if converted terrain uses it, it needs to be manually set inside ExportBasemapOcclusionTexture method:

Material's height based blend values can be read using Terrain.GetMaterialHeightBasedBlendValues method.


Texture2D[] ExportBasemapOcclusionTexture(int resolution, int splitCountHorizontal, int splitCountVertical, bool enableHeightBasedBlend = false, float heightTransition = 0)

Splits terrain into 2D grid by splitCountHorizontal and splitCountVertical amount and for each chunk calculates BasemapOcclusion texture.

This method can be used in combination with multi-chunk mesh exporter, in this case index of a mesh in 2D grid array and Basemap texture's are the same.

//Example of generating multi-chunk meshes (8x8 grid) with UVs per chunk and
//exporting Basemap Diffuse and Occlusion textures for each one. 

bool calculateUVsPerChunck = true;
int vertexCount = 100;
int textureResolution = 2048;
int splitCountHorizontal = 8;
int splitCountVertical = 8;

Mesh[] meshes = terrainData.TerrainToMesh().ExportMesh(vertexCount, vertexCount, splitCountHorizontal, splitCountVertical, calculateUVsPerChunck);
Texture2D[] diffuseMaps = terrainData.TerrainToMesh().ExportBasemapDiffuseTexture(textureResolution, false, splitCountHorizontal, splitCountVertical);
Texture2D[] occlusionMaps = terrainData.TerrainToMesh().ExportBasemapOcclusionTexture(textureResolution, splitCountHorizontal, splitCountVertical);

for(int i = 0; i < meshes.Length; i++)
{
    GameObject go = new GameObject();

    //Assign generated terrain mesh
    go.AddComponent<MeshFilter>().sharedMesh = meshes[i];


    //Creating material using default shader
    Material material = new Material(TerrainToMeshUtilities.GetDefaultShader());

    //Setting up material to use diffuse and occlusion maps
    TerrainToMeshUtilities.SetupDefaultMaterial(material, diffuseMaps[i], false, null, null, occlusionMaps[i]);


    //Assign material
    go.AddComponent<MeshRenderer>().sharedMaterial = material;
}

ExportBasemapOcclusionTexture(int resolution, int splitCountHorizontal, int splitCountVertical, int splitColumnIndex, int splitRowIndex, bool enableHeightBasedBlend = false, float heightTransition = 0)

Splits terrain into 2D grid by splitCountHorizontal and splitCountVertical amount and calculates BasemapOcclusion texture for chunk with index splitColumnIndex and splitRowIndex.

Last updated