Dual Contouring
A Marching Squares (2D) version from a few years back (2014)
Here's an adaptation of the above algo to map an integer height-map to multiple various contour styles:
marching squares online demo.
Water has more or less waves, beach / dirt just has two different curves for variation, grass has flowers or not, the "highest" shape is "concrete" and allows for both 45 degree and 90 degree corners (dual contours).
Tilesheet:
The algorithm is generalizable. You can have any number of boundary shapes (contours) in any number of dimensions. Apply it to simple proc-gen heightmap for more variation in tile / cube based layouts. Clamp your values to the desired range to produce a desired "contour" type: "square corners" or "mitered corners", only flowers, etc.
This is a single pass implementation, more flexibility of terrain / material can be created with multiple passes, one pass per material, eg: Make the concrete have transparency and render it atop the grass / water / mud layers, have a building layer above that, etc.