Bakes all terrain paint textures Mask maps into one Basemap texture.
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 ExportBasemapMaskTexture method:
Material's height based blend values can be read using Terrain.GetMaterialHeightBasedBlendValues method.
Texture2D[] ExportBasemapMaskTexture(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 BasemapMask 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 Mask 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[] maskMaps = terrainData.TerrainToMesh().ExportBasemapMaskTexture(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 mask maps
TerrainToMeshUtilities.SetupDefaultMaterial(material, diffuseMaps[i], false, null, maskMaps[i], null);
//Assign material
go.AddComponent<MeshRenderer>().sharedMaterial = material;
}
Texture2D ExportBasemapMaskTexture(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 BasemapMask texture for chunk with index splitColumnIndex and splitRowIndex.