EDIT: Here's another solution that would be simpler but not as random. You could make a set of many large n by n uniform squares that you fill in with predefined shapes, then use the squares with different rotations to form the tower. This is a much simpler approach, but it requires you to make enough combinations to feel random, and there will be seems that aren't crossed by any shape. Unless you offset the squares every layer, or use a different shape that can fill in a tower.
You could place the pieces by dropping random shapes randomly across the top like in Tetris until no more shapes can be dropped, then rotate the tower and let the shapes fall back into place, then continue to drop shapes from that direction. Repeat the process until you can no longer drop shapes and fill in the remaining holes with small shapes.
If you need all shapes to fit a certain profile, then you could also remove shapes around blockages that aren't fully filled in and restart the algorithm, but it might take a long time to find a configuration that works.
Here's an algorithm for dropping shapes.
1 piece 1
2 piece 2
0 0 1 1 1 0 0
0 0 0 1 2 0 0
0 0 0 0 2 0 0
0 0 0 0 2 0 0
Form a matrix that defines each piece by the grid of square locations taken up by that piece.
Start by assuming all pieces are falling.
In each iteration loop through every piece to determine which pieces are definitively anchored, and stop iterating when the previous iteration finds no new anchored pieces.
To determine whether a piece is anchored, loop through every component of the piece. If any of the following conditions are true, then the piece can be considered anchored.
- A component is in the bottom row.
- The space below a component is from another component that is determined to be anchored.
Once you have determined which pieces are falling you can update the matrix and the scene by dropping all the components of those pieces by 1 and restart the algorithm until you have a situation where all pieces are anchored.