module bubbles(size,d=1.2,s=1.8) { maxr=max(d/2,size[1]); scl = [ d/2/maxr, size[1]/maxr, d/2/maxr ]; nx = floor((size[0]-2*d)/s); sx = s*nx; x0=(size[0]-sx)/2; nz = floor((size[2]-2*d)/s); sz = s*nz; z0=(size[2]-sz)/2; for(iz=[0:nz]) { z=z0+s*iz; for(ix=[0:iz%2?nx-1:nx]) { x=x0+(iz%2?s/2:0)+s*ix; translate([x,0,z]) scale(scl) sphere(r=maxr,$fs=0.5); } } }