Let's start from your code:
cub1 = Cuboid[{0, 0, 0}, {20, 2, 20}];
cub2 = Cuboid[{12, 0, 8}, {17, 2, 17}];
Graphics3D[{cub1, cub2}];
reg = DiscretizeRegion[RegionDifference[cub1, cub2]]
You have a lot of tetrahedrons:
MeshCells[reg, 3] // Length
10093
And a lot of polygons:
MeshCells[reg, 2] // Length
22096
You do not need all that for visual, - so get the surface (boundary):
surface = BoundaryDiscretizeRegion[reg];
polygons = MeshCells[surface, 2];
polygons // Length
3820
Now so few polygons! Get the coordinates of the mesh too:
points = MeshCoordinates[surface];
points // Length
> 1910
And here you go:
Graphics3D[{EdgeForm[Gray],
GraphicsComplex[points, Polygon[polygons /. Polygon[x_] -> x]]},
Boxed -> False, Lighting -> "Neutral"]