As base building blocks I use a series of SubD shapes as they avoid making everything look too angular. The older mesher used to make a mess of curved surfaces, but this version handles them well. These basic chunks have all their uvs, splat maps and density maps for foliage replication already applied to them:
Instancing and merging them:
Then after adding more detail to the blocks (a block itself can be a collection of blocks, in a recursive manner):
There are two main reasons to run a boolean operation on these geometric soups: first is to cull a lot of overlapping geometry which would have resulted in a massive amount of rendering overdraw. Secondly, once you've established connectivity between two shapes, they can exchange information at the intersecting points, like average normals so as to improve lighting continuity, or have the shapes adjust to one another's local triangle resolution resulting in better formed triangles which in turn makes the mesh more suitable for carrying per-vertex data, e.g. a baked global illumination vertex-map:
That looks beautiful.